Перейти к содержанию

Proxmox Datacenter Manager

Консоль, объединяющая несколько кластеров Proxmox VE и серверов Proxmox Backup Server: до каких экземпляров она дотягивается, вся инфраструктура с первого взгляда, задачи, завершившиеся ошибкой где бы то ни было, и состояние самой консоли.

Проверено только на тестовом экземпляре

Эта интеграция была создана и проверена на Proxmox Datacenter Manager 1.1, установленном специально для этой цели, а не на боевом. Каждый вызов — это чтение, и формы данных взяты у настоящего datacenter manager, но никто ещё не запускал её неделями на живом datacenter manager. Сообщите нам, что сломается.

Один монитор на всю инфраструктуру или по монитору на кластер?

Монитор Datacenter Manager не заменяет мониторы Proxmox VE и Proxmox Backup Server. Он отвечает на другой вопрос.

Монитор Datacenter Manager Один монитор на кластер и на сервер резервного копирования
Мониторов для создания один по одному на кластер, по одному на сервер резервного копирования
Учётных данных для управления один токен, на консоли по одному токену на экземпляр
Нагрузка на каждый кластер нулевая с нашей стороны: мы читаем собственный кэш консоли один опрос за интервал на кластер
Что вы получаете доступность, версия, количество гостей и узлов, итоги по CPU, памяти и хранилищу, неудачные задачи всё это плюс гости по отдельности, снапшоты, задания резервного копирования, HA, Ceph, репликация, диски и SMART, пулы ZFS, 30-дневный календарь резервных копий
Чего вы не получите серии по каждому гостю, детали по каждому хранилищу данных, диски, снапшоты, логи задач единый итог по всей инфраструктуре
Главный отказ консоль не может достучаться до экземпляра кластер не отвечает нам

Наша рекомендация. Добавляйте монитор Datacenter Manager, когда у вас уже есть консоль и нужна одна страница, которая говорит, цела ли инфраструктура — это самый дешёвый способ заметить, что удалённая площадка отвалилась, и он ничего не стоит кластерам. Добавляйте отдельный монитор для каждого кластера и сервера резервного копирования, которыми вы действительно управляете: именно там глубина, и именно он скажет, какая ВМ остановилась или какая резервная копия не удалась. Они пересекаются, но не конфликтуют; неудачная резервная копия тогда вызывает одно оповещение от монитора PBS (с логом задачи) и одно от консоли (с названием экземпляра). Отключите правило консоли для задач, если считаете это избыточным, или ограничьте его экземплярами, для которых у вас нет отдельного монитора.

Если консоли у вас нет вообще, не устанавливайте её только ради мониторинга: отдельные мониторы видят строго больше.

Страница монитора

Помимо общих графиков, монитор Datacenter Manager показывает три панели, которые читаются из сохранённых опросом данных — открытие страницы не обращается ни к консоли, ни к управляемым ею кластерам:

  • Federated instances — полоса итогов по инфраструктуре (экземпляры, узлы онлайн, гости запущенные и остановленные, ядра, память, хранилище), затем одна строка на каждый федеративный экземпляр. Сначала идут экземпляры, до которых консоль не дотягивается, затем с неудачными задачами, затем отстающие по версии. Каждая строка содержит продукт (Proxmox VE или Backup Server), версию, количество узлов и гостей, использование памяти и хранилища, состояние подписки, настроенный адрес, когда консоль последний раз собирала с него данные — и, при ошибке, сообщение, полученное самой консолью. Это сообщение — единственное, что объясняет сбой, поэтому оно показывается дословно.
  • Failures — каждая задача, завершившаяся ошибкой по всей инфраструктуре за последние 14 дней, сначала новые, с экземпляром, на котором она выполнялась, типом задачи, временем запуска, длительностью и сообщением об ошибке. Сам лог задачи остаётся на экземпляре: откройте его там или добавьте этот кластер как отдельный монитор, где Show log его загружает.
  • Console host — машина, на которой работает консоль: CPU, память, корневая файловая система, аптайм и ядро, её сертификаты с числом дней до истечения, пакеты, ожидающие обновления, и статус подписки управляемых узлов. Вся панель необязательна: токен без Sys.Audit ничего из этого не прочитает, и панель сообщит об этом, а не покажет нули.

История задач хранится в SQLite (pdm_task_history, 19 дней, не более 5000 задач на монитор), поэтому список неудач переживает перезапуски, хотя каждый опрос смотрит только на окно задач.

Что отслеживается

Все метрики имеют префикс dumbmonit_pdm_.

Семейство Метрики Метки
Инфраструктура remotes_total, remotes_failed, nodes_online, nodes_offline, cpu_used_cores, cpu_total_cores, memory_used_bytes, memory_total_bytes, memory_used_percent, storage_used_bytes, storage_total_bytes, storage_used_percent, datastores_total
Гости инфраструктуры guests_running, guests_stopped guest_type (qemu, lxc)
Экземпляры remote_reachable (1 — консоль получила ответ, 0 — нет), remote_version_info (серия присутствия, метка version), remote_version_behind, remote_nodes_online, remote_nodes_offline, remote_guests_running, remote_guests_stopped, remote_cpu_used_cores, remote_cpu_total_cores, remote_cpu_used_percent, remote_memory_used_bytes, remote_memory_total_bytes, remote_memory_used_percent, remote_storage_used_bytes, remote_storage_total_bytes, remote_storage_used_percent, remote_datastores, remote_subscription_active, remote_updates_pending, remote_last_collection_age_seconds, remote_tasks_failed remote, type (pve, pbs)
Задачи в окне tasks_total, tasks_failed, tasks_running
Хост консоли node_cpu_percent, node_cpu_count, node_iowait_percent, node_load1, node_memory_used_bytes, node_memory_total_bytes, node_memory_used_percent, node_swap_used_bytes, node_swap_total_bytes, node_rootfs_used_bytes, node_rootfs_total_bytes, node_rootfs_percent, node_uptime_seconds, node_kernel_info, node_updates_pending, version_info
Сертификаты консоли node_certificate_expiry_days (отрицательное значение после истечения) file (proxy.pem)
Подписка subscription_active (метка status), subscription_active_nodes, subscription_total_nodes
Сбор up, scrape_errors, scrape_duration_seconds

Задача, завершившаяся с WARNINGS: n, считается успешной. Весь опрос признаётся неудачным, только если не удался GET /version; любой другой неудавшийся вызов учитывается в scrape_errors, а экземпляр, до которого консоль не дотягивается, — это измерение (remote_reachable = 0), а не ошибка сбора.

remote_version_behind сравнивает федеративные экземпляры друг с другом, продукт за продуктом: значение 1, когда другой кластер Proxmox VE — или другой сервер резервного копирования — в той же инфраструктуре работает на более новой версии. Это не сравнение с тем, что публикует Proxmox; опросу незачем выходить в интернет. Серия существует только для экземпляра, версия которого была прочитана, поэтому недоступный экземпляр никогда не сойдёт за обновлённый.

Итоги по хранилищам считают каждое имя хранилища один раз на экземпляр: хранилище, общее для пяти узлов кластера, считается один раз, а не пять.

Применяемые встроенные правила: Monitor unreachable, Federated instance unreachable, Federated instance behind, Task failed on a federated instance, Datacenter console disk almost full, Datacenter console certificate expiring, Datacenter console updates pending. Уведомления называют соответствующий экземпляр.

Что подготовить в Proxmox Datacenter Manager

Приведённые ниже шаги совпадают с теми, что показывает уведомление рядом с формой. Принцип: пользователь, выделенный для мониторинга, токен с ролью только для чтения — никогда не та учётная запись, под которой вы входите.

  1. В консоли откройте Configuration → Access Control → Users и нажмите Add. Назовите учётную запись так, как указано ниже, и оставьте пароль пустым: входит токен.

    dumbmonit@pdm
    
  2. Всё там же, в Access Control, откройте API Tokens → Add, выберите этого пользователя и назовите токен "monitor". Консоль показывает секрет один раз: скопируйте его сейчас.

    dumbmonit@pdm!monitor
    
  3. Дайте и пользователю, и токену роль Auditor на / (верх дерева, то есть вся инфраструктура). Auditor включает System.Audit, Resource.Audit и Access.Audit и ничего не может изменить. Токен никогда не имеет больше прав, чем его пользователь, поэтому разрешение выдаётся дважды: Permissions → Add → User Permission, затем снова с API Token Permission.

  4. Скопируйте идентификатор токена в поле Token ID в DumbMonit, а секрет — в поле Secret.
  5. В DumbMonit введите адрес консоли, например "dc.lan" или "dc.lan:8443".

Warning

Не используйте повторно учётную запись, под которой вы входите: утёкший токен тогда управлял бы сразу всеми кластерами, которые объединяет консоль. Роль Auditor может только читать. Консоль также по умолчанию использует самоподписанный сертификат: если соединение отклоняется по этой причине, отметьте "Accept an unverifiable certificate" в опциях. Два пункта требуют большего, чем Auditor, и без этого просто пропускаются: статус сбора метрик по каждому экземпляру и сводка обновлений федеративных экземпляров.

Предпочитаете командную строку? proxmox-datacenter-manager-admin управляет удалёнными экземплярами (remotes), а не пользователями; создайте учётную запись, токен и два разрешения в веб-интерфейсе.

Учётные данные

Учётные данные Поля
Токен API (рекомендуется) Token ID: пользователь, realm и имя токена в том виде, как их показывает консоль, dumbmonit@pdm!monitor. Secret: UUID, показанный один раз при создании токена. DumbMonit отправляет их в заголовке PDMAPIToken=user@pdm!name:secret, которого ожидает консоль.

Варианта с именем пользователя и паролем нет, и это сделано намеренно: с первого выпуска консоль возвращает свой билет сессии только в cookie HttpOnly — тело JSON содержит непригодный ticket-info. Вход ничего не дал бы по сравнению с токеном, но открывал бы залогиненную сессию при каждом опросе. Токены в любом случае рекомендуются Proxmox для автоматизации.

Права, только чтение. Проще всего и достаточно: встроенная роль Auditor на /, выданная пользователю и токену. По конечным точкам:

Endpoint Требуется
GET /version любой аутентифицированный пользователь
GET /remotes/remote возвращает экземпляры, которые вызывающий может проверять
GET /remotes/remote/{id}/version Resource.Audit на /resource/{id}
GET /resources/status, GET /resources/list Resource.Audit на /resource
GET /resources/subscription Resource.Audit на /resource
GET /remotes/tasks/list Resource.Audit на /resource/{remote}, по каждому экземпляру
GET /nodes/{node}/status System.Audit на /system/status
GET /nodes/{node}/certificates/info, GET /nodes/{node}/subscription любой аутентифицированный пользователь
GET /nodes/{node}/apt/update System.Audit; 403 допускается: нет серии node_updates_pending, ошибки сбора нет
GET /remotes/metric-collection/status больше, чем Auditor; 403 допускается: нет серии remote_last_collection_age_seconds, ошибки сбора нет
GET /remotes/updates/summary Resource.Modify — привилегия на запись. По этой причине выключено по умолчанию (remote_updates)

Обратите внимание, что консоль скрывает токены доступа, которые она хранит для своих экземпляров (GET /remotes/remote возвращает пустой token), а DumbMonit это поле всё равно никогда не читает: ни один секрет экземпляра не проходит ни через сборщик, ни через сохранённое представление, ни через API.

Адрес: 10.0.0.40, dc.lan, dc.lan:8443, [fd00::2] или полный URL. Схема https и порт 8443 добавляются, если отсутствуют.

Опции

Ключ Название По умолчанию Справка
port API port 8443 Используется, если в адресе не указан порт.
insecure_tls Accept an unverifiable certificate false Proxmox Datacenter Manager по умолчанию поставляется с самоподписанным сертификатом: включите это, если соединение отклоняется по этой причине.
request_timeout_seconds Timeout per request (seconds) 20 Время, отведённое на каждый вызов API, от 1 до 120. Консоль ретранслирует вызовы каждому федеративному экземпляру, поэтому один медленный сайт задерживает весь ответ.
node Console node name localhost Имя узла, на котором работает консоль. У Datacenter Manager единственный узел, и он называется "localhost".
task_lookback_hours Task window (hours) 24 Более старые задачи не учитываются среди неудач, от 1 до 8760.
max_age_seconds Accepted cache age (seconds) 60 Насколько устаревшим может быть собственный инвентарь консоли, прежде чем она снова опросит федеративные экземпляры, от 0 до 3600. Ноль запрашивает свежие данные при каждом опросе, что возвращает нагрузку на каждый кластер.
remotes Monitored instances (пусто) Имена федеративных экземпляров для мониторинга через запятую. Пусто: каждый экземпляр.
max_remotes Instance version limit 100 Максимальное число экземпляров, у которых запрашивается версия при каждом опросе, от 1 до 1000.
versions Read each instance version true Один вызов на федеративный экземпляр, чтобы сообщить его версию и пометить отставшие от остальных. Экземпляр, который не отвечает, считается недоступным.
tasks Watch tasks across instances true Читает список задач каждого федеративного экземпляра, чтобы сообщать о неудачах.
node_status Watch the console host true Читает CPU, память, корневую файловую систему, аптайм, сертификаты и подписку машины, на которой работает консоль.
updates Count pending updates true Перечисляет пакеты, ожидающие обновления, на самой консоли.
remote_updates Count updates on each instance false Читает сводку обновлений консоли для федеративных экземпляров. По умолчанию выключено: консоль защищает этот путь привилегией Resource.Modify, на запись, которой у учётной записи мониторинга нет причин обладать.

max_age_seconds — единственная опция, которую стоит понять. Консоль хранит собственный инвентарь, обновляемый её собственным циклом сбора. Запрос свежих данных при каждом опросе заставляет консоль снова обращаться к каждому кластеру сверх её обычного ритма — ровно та нагрузка, которой единый монитор консоли должно избегать. Шестьдесят секунд — это всё равно свежее, чем интервал опроса по умолчанию.

Типичные ошибки

Симптом Вероятная причина
Ошибка сертификата Самоподписанный сертификат: установите доверенный (ACME встроен в консоль) или включите insecure_tls.
Ошибка аутентификации Секрет вставлен в Token ID (или наоборот), либо разрешение выдано пользователю, но не токену — токен никогда не имеет больше прав, чем его пользователь, а два ACL — отдельные записи.
Каждый экземпляр показан как недоступный, но собственная страница консоли в порядке У токена Auditor есть на пользователе, но нет на токене, либо только на /system: именно Resource.Audit на /resource позволяет консоли отвечать за её экземпляры.
Экземпляр недоступен, и в сообщении упоминается отпечаток (fingerprint) Консоль проверяет сертификат каждого управляемого ею экземпляра; исправьте это в консоли (Remotes → экземпляр), а не здесь.
Нет серии remote_last_collection_age_seconds GET /remotes/metric-collection/status требует больше, чем Auditor, и молча пропускается. Остальное не затронуто.
Нет серии remote_updates_pending remote_updates выключено по умолчанию, потому что этот путь требует Resource.Modify. Включайте, только если готовы выдать привилегию на запись.
Нет панели хоста консоли У токена нет System.Audit на /system/status, либо node_status выключено.
"Federated instance behind" никогда не срабатывает Оно сравнивает экземпляры одного продукта друг с другом. Консоли, объединяющей единственный кластер Proxmox VE, не с чем его сравнивать.
Итоги по инфраструктуре — сплошные тире Консоль ответила, но ничего не насчитала — обычно потому, что все экземпляры недоступны. Строки экземпляров объясняют почему.