Схема по материалу: Как я контролирую старые VMware snapshots, не превращая мониторинг в риск для ВМ
Схема основана на материале «Как я контролирую старые VMware snapshots, не превращая мониторинг в риск для ВМ» и его сигналах. Возраст и дерево snapshots рассматриваются вместе с backup-задачами, состоянием ВМ, свободным местом и задержкой datastore.

Как я собираю картину через vCenter

Я начинаю не с удаления, а с инвентаризации через vCenter API. Отдельная техническая учётная запись читает конфигурацию ВМ, состояние питания, дерево snapshots, задачи и события; для неё я создаю минимальную роль только чтения на нужном объекте vCenter и распространяю её вниз лишь на контролируемый контур. Права на создание, удаление, консолидацию, изменение дисков и питание ей не выдаю. Это принципиальная граница: компрометация мониторинга не должна превратиться в управление виртуальными машинами. Zabbix vmware collector обращается к VMware web services, раздельно получает конфигурационные данные и performance counters. Поэтому я проверяю не только доступность API, но и свежесть обоих потоков: инвентаризация может обновляться, пока показатели производительности уже запаздывают. Время последнего успешного получения сопоставляю с задачами vCenter, чтобы сетевой сбой или переполненный кэш не выглядели как достоверное отсутствие снимков. В Zabbix привязываю штатный VMware или VMware FQDN template на уровне хоста vCenter. Макросы {$VMWARE.URL}, {$VMWARE.USERNAME} и {$VMWARE.PASSWORD} задаю на этом хосте, секрет храню как secret или vault value, а не глобально. Макрос {$VMWARE.VM.UUID} остаётся в области обнаруженного хоста ВМ. Так разные vCenter не наследуют чужие адреса и учётные данные, а область каждого секрета видна при ревизии.

Почему одного возраста снимка недостаточно

Для каждого найденного snapshot я фиксирую ВМ, уникальный идентификатор, имя, описание, createTime, родителя и дочерние элементы. Время создания берётся из vCenter, а не вычисляется по имени файла или подписи оператора. Дерево важнее плоского списка: удаление узла внутри цепочки и удаление всех узлов создают разную работу по слиянию delta. Размер воспринимаю только как оценку риска. Snapshot начинается с delta-дисков и растёт по мере записи в гостевой системе; он способен приблизиться к размеру базового диска. Если у ВМ несколько VMDK на разных datastore, соответствующие delta тоже распределены, поэтому одна цифра из карточки не описывает запас каждого хранилища. Я отказался от правила «старше N дней — удалить». Спокойная выключенная ВМ и интенсивная база данных за одинаковое время создают несопоставимые delta, а назначение снимка может быть связано с ещё не закрытым изменением. Универсального N-дневного порога нет: я использую возраст для приоритизации разбора, но решение принимаю по дереву, темпу записи, владельцу изменения, состоянию backup и ресурсу всех затронутых datastore.

Возраст и consolidation needed ведут в разные ветви

Старый видимый snapshot означает, что в менеджере существует точка состояния с давним createTime. Флаг «Virtual machine disks consolidation is needed» означает другое: vCenter видит необходимость свести оставшиеся delta-файлы либо несогласованность между представлением менеджера и файлами дисков. Такой флаг может появиться после неудачного удаления, обрыва backup, блокировки файла или потери связи, даже если оператор не видит старого узла дерева. И наоборот, давний snapshot не обязательно включает этот статус. Я завожу отдельные события и разные ветви runbook. При одном возрасте выясняю назначение, владельца и допустимость удаления. При consolidation needed сначала изучаю последние задачи, ошибки backup, блокировки, место и связь ESXi с vCenter; обычное удаление видимого снимка не считаю доказанным лечением. В мониторинге эти сигналы могут коррелировать, но не склеиваются одним триггером. Я намеренно не автоматизирую ни Delete, ни Consolidate: обе операции меняют дисковую цепочку и создают I/O. Zabbix только обнаруживает, дополняет контекстом и направляет запрос на согласованное обслуживание.

Состояние ВМ, backup, CBT и guest quiesce

Следующая проверка — питание ВМ и окно резервного копирования. Для включённой ВМ активная запись продолжается во время удаления, а вспомогательная delta может расти, пока предыдущие данные сливаются. Выключенное состояние уменьшает этот фактор, но я не выключаю сервис только ради удобства без разрешённого изменения. По задачам vCenter и консоли backup выясняю, не идёт ли сейчас создание, чтение или удаление временного snapshot. Любое пересечение означает остановку моего действия и передачу владельцу backup: конкурирующие операции способны оставить блокировку или сорвать копию. Я отдельно проверяю CBT. Changed Block Tracking помогает backup читать изменённые блоки и снижает потребность в полном чтении диска, но не делает snapshot архивом и не оправдывает долгую цепочку. Предпочтительная альтернатива сохранению старой контрольной точки — проверенная image-level backup с CBT либо прикладная резервная копия базы, когда важна согласованность приложения. Guest quiesce рассматриваю как свойство конкретной операции: VMware Tools и VSS или гостевые механизмы должны быть исправны, а приложение — поддерживать заморозку. Снимок без quiesce обычно даёт crash-consistent состояние, но не обещает application-consistent восстановление. Я не включаю quiesce вслепую на нагруженной ВМ: сначала проверяю требования приложения и результат тестового восстановления.

Хранилище определяет допустимость обслуживания

Перед согласованием изменения я собираю по каждому datastore свободное место, latency, текущие IOPS и throughput, а также соседние тяжёлые задачи: миграции, backup, клонирование и другие консолидации. Свободный процент сам по себе слаб: важен абсолютный запас относительно delta, формат дисков, размещение всех VMDK и ожидаемая запись работающей ВМ. Низкая latency до старта не гарантирует безопасное окно, поэтому я сохраняю исходный профиль и задаю условия остановки по отклонению от нормального поведения именно этого хранилища. Если запас сомнителен, сначала освобождается или расширяется ёмкость либо согласуется перенос нагрузки; удалением snapshot место не «добывают наудачу». Большая delta означает интенсивное чтение и запись при слиянии. На общем datastore это влияет не только на выбранную ВМ, поэтому владелец изменения учитывает соседние сервисы. Я отклонил параллельную обработку списка: последовательная работа позволяет увидеть эффект одной операции и прекратить дальнейшие. В Zabbix событие об устаревшем снимке обогащаю состоянием питания, свободным местом и latency, но итог «можно выполнять» оставляю человеку, который сверяет актуальные задачи vCenter и согласование.

Фрагмент runbook перед изменением

Мой рабочий фрагмент выглядит так. Первое: подтвердить UUID ВМ, дерево и createTime через vCenter, сопоставить имя с заявкой на изменение, не полагаясь на похожие отображаемые названия. Второе: записать исходное состояние питания, актуальность monitoring data, статус consolidation needed, активные и недавние задачи. Третье: получить у владельца backup подтверждение отсутствия задания и ближайшего запуска; проверить последнюю успешную копию и возможность восстановления, а не только зелёный статус задания. Четвёртое: проверить свободное место и профиль latency на каждом datastore с дисками ВМ, исключить параллельные тяжёлые операции. Пятое: оформить безопасное окно, ответственного наблюдателя, критерии остановки и решение для отката; изменение начинает только уполномоченный администратор vCenter. Если назначение snapshot неизвестно, цепочка выглядит необычно, есть блокировка, backup активен, хранилище напряжено или ВМ нельзя обслуживать — я останавливаюсь, а не угадываю. Мониторинговая учётная запись остаётся read-only. В runbook нет команды массового удаления: способ выбирается в vSphere Client для одной подтверждённой ВМ после одобрения изменения.

Изолированная проверка, удаление и откат

До производственного окна я повторяю процесс на изолированной тестовой ВМ с отдельным datastore или гарантированно отделённой нагрузкой. Создаю разрешённую контрольную точку, выполняю ограниченную запись, проверяю, что Zabbix обнаружил createTime и дерево, а затем уполномоченной ролью удаляю именно этот снимок через vCenter. Наблюдаю задачи, latency, свободное место и доступность гостевой системы. Тест должен подтвердить не скорость вообще, а правильность идентификации, маршрута согласования и телеметрии. При неожиданной ошибке прекращаю новые действия, сохраняю task ID и события, не перезапускаю хост и не манипулирую файлами datastore вручную. Для удаления snapshot нет честного «отменить и вернуть прежнюю delta» после завершённого слияния. Поэтому мой откат — заранее подготовленное восстановление из проверенной backup-копии либо возврат приложения по его плану, а не обещание воскресить удалённый узел. Пока операция выполняется, вмешательство возможно только по официальной процедуре поддержки для наблюдаемого состояния. В производстве обрабатываю одну ВМ; дальнейшие пункты очереди ждут успешной проверки результата.

Что я проверяю после изменения

После завершения я не закрываю работу по одному зелёному task. Повторно читаю дерево snapshots и статус consolidation needed, убеждаюсь, что ожидаемый узел исчез, а непредусмотренные точки сохранены. Проверяю состояние питания, доступность VMware Tools, heartbeat гостя и прикладной health check, согласованный с владельцем сервиса. Затем сравниваю datastore free space и latency с исходным профилем, слежу, не продолжает ли расти временная delta и не появились ли ошибки дисков или блокировок в событиях vCenter. Отдельно подтверждаю у backup-системы, что следующее задание стартует без конфликта, CBT остаётся в ожидаемом состоянии, а цепочка резервных копий пригодна; при сомнении назначается проверка восстановления, а не сброс CBT наугад. В Zabbix жду новый цикл конфигурационного сбора и performance collection: отсутствие старого снимка должно быть результатом свежих данных, а не пустого ответа API. Если инвентаризация или performance counters устарели, событие не закрываю вручную. В заявку прикладываю идентификаторы задач, времена начала и завершения, наблюдаемые метрики и результат прикладной проверки без секретов. Так мониторинг доказывает обнаружение и последующий контроль, но не получает опасных полномочий изменять ВМ.

Сигналы, которые сопоставляю

  • Время создания, глубина дерева и связь каждого snapshot с конкретной ВМ.
  • Флаг consolidation needed отдельно от возраста видимого snapshot.
  • Состояние питания ВМ, активность backup и назначение guest quiesce.
  • Свободное место, задержка и текущая нагрузка каждого datastore с дисками ВМ.

Отвергнутые альтернативы

  • Автоматически удалять snapshot по возрастуВозраст не показывает назначение снимка, активность backup, фактический объём delta, состояние цепочки и доступный ресурс datastore.
  • Считать consolidation needed синонимом старого snapshotЭтот статус указывает на необходимость сведения оставшихся delta-файлов или несогласованность, а не на календарный возраст видимого снимка.
  • Оценивать риск только по размеру из интерфейсаОтображаемое значение зависит от версии и представления, а delta растёт по объёму изменений и может располагаться на нескольких datastore.
  • Использовать snapshots как долговременную замену backupСнимок сохраняет зависимость от исходных виртуальных дисков и хранилища; для восстановления нужны отдельные проверенные резервные копии.
  • Запускать консолидацию одновременно на нескольких нагруженных ВМПараллельное сведение усиливает конкуренцию за I/O и усложняет остановку работ при ухудшении задержки.

Конфигурация и сбор

Минимальная роль vCenter только для чтения конфигурации, состояния, задач, событий и performance counters в назначенном контуре. Права на snapshot, консолидацию, диски и питание отсутствуют; секретные макросы ограничены хостом vCenter.

  • Получить через vCenter API дерево snapshots, createTime, состояние питания, задачи и события.
  • Сопоставить конфигурационный сбор с performance counters datastore и проверить свежесть обоих потоков.
  • Проверить область макросов VMware template без раскрытия значений username и password.
  • Передать на изменение только контекст и идентификаторы; не выполнять операции учётной записью Zabbix.

Контролируемая проверка и свидетельство

На изолированной ВМ создаётся разрешённая контрольная точка и небольшая известная запись. Проверяются обнаружение дерева, сбор метрик и маршрут согласования; уполномоченный администратор удаляет один подтверждённый snapshot через vCenter. Тест прекращается при ошибке задачи, росте latency, нехватке места или нарушении доступности гостя.

Фрагмент рабочего регламента

  • Подтвердить UUID, createTime и положение snapshot в дереве, затем найти владельца изменения.
  • Проверить power state, consolidation needed, активные задачи backup и назначение quiesce.
  • Сверить free space и latency каждого datastore, исключив конкурирующие тяжёлые операции.
  • Получить одобрение окна и передать выполнение отдельному администратору vCenter; Zabbix оставить read-only.
  • После задачи повторить чтение дерева, guest health, datastore и результата следующего backup.

Откат

Завершённое слияние snapshot не отменяется возвратом старой delta. До изменения подтверждается работоспособная backup-копия и прикладной план восстановления. При ошибке новые операции прекращаются, сохраняются task ID и события, а дальнейшее действие выбирается по состоянию цепочки и официальной процедуре; ручное удаление файлов datastore исключено.

Ограничения вывода

Возраст, отображаемый размер и свободный процент datastore по отдельности не определяют безопасное действие. Нет универсального N-дневного порога: решение зависит от дерева, скорости записи, power state, backup и CBT, guest quiesce, размещения VMDK, запаса и latency хранилища. Мониторинг не подтверждает восстановимость без отдельного теста backup.

Источники

  1. Broadcom Knowledge Base: How to calculate current snapshot size, estimate consolidation times, and understand performance factors
  2. Broadcom Knowledge Base: Recommendations for creating a snapshot for a large virtual machine
  3. Zabbix documentation: Virtual machine monitoring
  4. Zabbix documentation: User macros