Как я собираю картину через 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.
Источники
- Broadcom Knowledge Base: How to calculate current snapshot size, estimate consolidation times, and understand performance factors
- Broadcom Knowledge Base: Recommendations for creating a snapshot for a large virtual machine
- Zabbix documentation: Virtual machine monitoring
- Zabbix documentation: User macros

