Перейти к содержимому

Proxmox VE

Гипервизор: узлы с их демонами и сетью, виртуальные машины, контейнеры, хранилища, пулы LVM thin, резервные копии, высокая доступность, снапшоты, репликация, Ceph вплоть до OSD, физические диски и пулы ZFS, ожидающие обновления, изменения пакетов, подписка и сертификаты. Один монитор может охватывать весь кластер.

Страница монитора открывается карточкой на каждый узел: CPU, память и корневая файловая система в виде трёх индикаторов, время работы и версия pve-manager, установленная на этом узле, затем только то, что не в порядке, — демоны, которые не запущены, интерфейсы, объявленные при загрузке, но не поднятые, — и заполненность каждого пула LVM thin и группы томов. Узел, переставший отвечать, сохраняет свою карточку со статусом offline.

Две строки под индикаторами, когда узел их сообщает: доля процессорного времени, потраченная на ожидание хранилища (I/O wait — узел с 10 % CPU и 30 % I/O wait не имеет запаса, и никакое другое число об этом не говорит), и память, которую KSM вернул, объединив одинаковые страницы между гостями, — именно так узел размещает больше, чем у него есть RAM.

В список «что не в порядке» добавляются ещё две записи, обе словами:

  • Reboot required — установлено ядро новее, чем запущенное. Карточка называет обе версии, так как узел продолжает работать на старом, пока он не будет перезагружен. Это берётся из /nodes/{node}/apt/versions, для чего нужен только Sys.Audit;
  • Updates pending — сколько пакетов Proxmox имеют более новую версию-кандидата, из того же вызова. Это не то же самое, что apt/update, который считает все ожидающие пакеты системы, но требует Sys.Modify и обычно отклоняется.

Когда кластер сообщает о HA watchdog (Proxmox VE 9 и новее), его состояние указывается рядом с заголовком панели: HA fencing armed, как только ресурсы переданы в HA, HA fencing standby, пока их нет, — в этом случае ни один узел не будет изолирован (fenced), что нормально, но стоит знать, прежде чем на это рассчитывать.

Кластер, обновляемый узел за узлом, показывает это здесь: /version отвечает за тот узел, к которому обратились, поэтому каждая карточка несёт собственную версию, и отстающий виден без открытия оболочки.

Данные поступают из GET /api/targets/{id}/proxmox/nodes, читаются из последнего опроса в хранилище метрик.

The Guests panel: one row per VM and container, grouped by node

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

СтолбецИсточникПримечания
Statusслово + плашка: running, stopped, paused, suspended, templateШаблон отображается в списке, но никогда не считается «stopped».
Name, VMID, nodeинвентарь
CPUguest_cpu_percent, от ядер, выделенных гостюПолоса плюс число ядер.
Memoryguest_memory_used_bytes / guest_memory_total_bytesРазмер баллона, если он есть у ВМ. Вторая строка, +N on host, появляется, когда guest_memory_host_bytes заметно выше того, что видит гость: процесс QEMU обходится гипервизору дороже, чем память, которую он выдаёт, и этот излишек — накладные расходы эмуляции. Ниже 64 МиБ или 5 % строка не показывается.
Diskguest_disk_used_bytes / guest_disk_total_bytesКонтейнеры: реальное использование. ВМ: размер всегда; использование только когда отвечает гостевой агент QEMU (см. ниже), иначе «size only».
Networkrate(guest_network_in/out_bytes) за последние опросы
Uptimeguest_uptime_seconds
Last backupbackup_last_age_secondsПусто, если резервных копий не известно.
HAha_resource_state_infoТолько для гостей под высокой доступностью.
Lockguest_lockedЗначок, только пока удерживается блокировка (backup, migrate, snapshot…).

Список сортируется по любому столбцу, фильтруется по узлу, статусу или пулу, а каждая группа узла сворачивается. Щелчок по строке открывает CPU и память за временной диапазон страницы, а также операционную систему и IP-адреса, видимые изнутри гостя. Данные поступают из GET /api/targets/{id}/proxmox/guests, который читает последний опрос из хранилища метрик — у гипервизора ничего не запрашивается.

Блокировка нормальна в течение тех нескольких минут, которые занимает резервное копирование, миграция или снапшот. Если её оставило прерванное задание, она блокирует любую операцию с этим гостем — включая резервную копию следующей ночи — пока qm unlock (или pct unlock) её не снимет, поэтому «Guest locked» срабатывает через шесть часов.

Инвентарь берётся из /cluster/resources, собственного кэша кластера, поэтому гости узла, переставшего отвечать, по-прежнему перечислены — со статусом unknown и своими размерами, но без живых измерений, — вместо того чтобы исчезнуть с панели в тот момент, когда вы хотите на них посмотреть. Это также обходится на два вызова API дешевле на узел, чем обход /nodes/{node}/qemu и /nodes/{node}/lxc, к чему возвращается опция cluster_resources при отключении.

Использование диска внутри ВМ: гостевой агент QEMU

Заголовок раздела «Использование диска внутри ВМ: гостевой агент QEMU»

Proxmox видит диск ВМ как непрозрачный том: disk для ВМ всегда равен 0, известен только его размер. Чтобы прочитать использование изнутри, коллектор запрашивает у гостевого агента QEMU (agent/get-fsinfo) данные для каждой запущенной ВМ, в конфигурации которой агент включён (Options → QEMU Guest Agent). Два условия:

  • qemu-guest-agent установлен и запущен внутри ВМ (Debian и Ubuntu: apt install qemu-guest-agent; Windows: ISO с драйверами VirtIO);
  • токен имеет VM.GuestAgent.Audit на ВМ — VM.Monitor до Proxmox VE 9 (роль DumbMonit ниже выдаёт его на /).

Корневая файловая система (/, или C:\ в Windows; если её нет, самая большая) даёт guest_disk_used_bytes и guest_disk_used_percent, те же ряды, что у контейнера, поэтому правило «VM or container disk almost full» покрывает оба случая. Каждая реальная файловая система также получает guest_fs_total/used_bytes и guest_fs_used_percent с меткой mountpoint; псевдофайловые системы (tmpfs, squashfs, монтирования snap) и носители без ёмкости пропускаются. guest_agent_enabled показывает, включён ли агент в конфигурации ВМ, guest_agent_running — ответил ли он. Без агента или права ВМ сохраняет свой размер и просто не имеет использования — никогда не вводящих в заблуждение «0 %».

Proxmox знает только тип ОС, записанный в конфигурации гостя (l26, win11), а не то, что реально работает. При включённой опции guest_os коллектор спрашивает каждого запущенного гостя, что он такое: agent/get-osinfo и agent/network-get-interfaces для ВМ, /nodes/{node}/lxc/{vmid}/interfaces для контейнера, для чего внутри ничего устанавливать не нужно. Это даёт guest_os_info (Debian GNU/Linux 12 (bookworm), её id, версия, ядро) и до четырёх guest_ip_info — адреса loopback и IPv6 link-local пропускаются, а машина с десятками виртуальных интерфейсов не засоряет базу рядов.

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

Эти два вызова агента требуют VM.GuestAgent.Audit. В Proxmox VE 7 его не было, и использовался VM.Monitor; Proxmox VE 9 убрал VM.Monitor и оставляет только привилегии гостевого агента. Без той, которую знает ваша версия, оба ряда просто отсутствуют; больше ничего не меняется.

Раздел Ceph появляется на странице монитора, только когда в кластере действительно есть Ceph: состояние здоровья и слова за ним, общая и использованная ёмкость, сколько OSD up и in, таблица OSD (хост, класс устройства, использование, задержки apply и commit) и таблица пулов (использование, size и min size, placement groups относительно числа, которое выбрал бы autoscaler), файловые системы CephFS, оставленные установленными флаги OSD и текущие заглушённые проверки здоровья.

Последние два — то, что панель мониторинга обычно скрывает. noout, установленный на время обслуживания и никогда не снятый, означает, что Ceph больше не будет перебалансировать данные из-за мёртвого OSD, а заглушённая проверка больше не отображается в HEALTH_OK — в обоих случаях кластер выглядит здоровым, пока его избыточность тихо исчезает.

GET /api/targets/{id}/proxmox/ceph отвечает available: false, когда в кластере нет Ceph, по этому признаку UI знает, что раздел рисовать не нужно. Детализация стоит три вызова на одном узле плюс два на весь кластер, независимо от размера кластера, и требует опции ceph_detail поверх ceph.

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

СемействоМетрикиМетки
Clustercluster_quorate, cluster_nodes, cluster_nodes_online, cluster_member_online; version_info (+ version, release, repoid)cluster, node
Cluster inventorycluster_guests_total, cluster_guests_running, cluster_templates_total (шаблоны считаются отдельно, никогда как «stopped»); pool_guests, по одной на каждый пул ресурсовpool
Nodesnode_up, node_cpu_percent, node_cpu_count, node_load1/5/15, node_memory_used/total_bytes, node_memory_percent, node_swap_used/total_bytes, node_rootfs_used/total/avail_bytes, node_rootfs_percent, node_cpu_iowait_percent (время ожидания дисков — узел с 10% CPU и 30% iowait не имеет запаса), node_ksm_shared_bytes (память, возвращённая дедупликацией страниц), node_uptime_seconds, node_version_infonode
Node servicesnode_service_running, node_service_state_info (+ state), node_services_failed, node_core_services_down; node_pve_version_info (+ version, release) для узла, который ответилnode, service
Node networknode_interface_active, node_interface_exists, node_interface_autostart, node_interface_mtu, node_interface_offline; итог node_interfaces_offlinenode, iface, type (bridge, bond, vlan, eth…)
LVM, thin pools and mountsnode_lvm_vg_size/free_bytes, node_lvm_vg_used_percent, node_lvm_vg_physical_volumes (метка vg); node_thinpool_size_bytes, node_thinpool_used_bytes, node_thinpool_used_percent, node_thinpool_metadata_size_bytes, node_thinpool_metadata_used_percent (метки vg, pool); node_directory_mount_info (+ path, device, fstype), node_directory_mountsnode, vg, pool
Guests (VMs and containers)guest_status_info (+ status: running, stopped, paused, suspended, template), guest_running (не для шаблонов), guest_cpu_percent (от выделенных ядер), guest_cpu_count, guest_memory_used/total_bytes, guest_memory_host_bytes (Proxmox VE 9: память, которую ВМ занимает на хосте, включая накладные расходы эмуляции), guest_memory_percent (с собственной точки зрения гостя; в Proxmox VE 9 берётся из драйвера баллона, а у ВМ без него есть байты, но нет процента, вместо значения выше 100%), guest_disk_total_bytes, guest_disk_used_bytes и guest_disk_used_percent (контейнеры; ВМ только через гостевой агент), guest_disk_read/write_bytes, guest_network_in/out_bytes (счётчики), guest_uptime_seconds; guest_pool_info (+ pool), guest_locked (+ lock; ряд существует только пока удерживается блокировка, поэтому её длительность читается прямо с графика)node, vmid, name, type (qemu или lxc)
VM detail (running VMs)guest_agent_enabled, guest_agent_running, guest_balloon_bytes, guest_memory_guest_free_bytes (свободная память, видимая изнутри, драйвер баллона), guest_running_qemu_info (+ version: QEMU, с которым была запущена ВМ — после обновления гипервизора он остаётся прежним, пока ВМ не будет остановлена и запущена снова, чего живая миграция не делает); для каждой файловой системы guest_fs_total_bytes, guest_fs_used_bytes, guest_fs_used_percentnode, vmid, name, type; файловые системы: + mountpoint, fstype
Guest system and addressesguest_os_info (+ os, os_id, os_version, kernel), guest_ip_info (+ iface, ip; не более четырёх маршрутизируемых адресов на гостя). Обновляется раз в часnode, vmid, name, type
Guest network cardsguest_netdev_in_bytes, guest_netdev_out_bytes (счётчики), одна пара на виртуальный интерфейс, тогда как guest_network_in/out_bytes даёт только итог по гостюnode, vmid, dev (tap100i0, veth200i0)
Storagesstorage_active, storage_enabled, storage_used/total/avail_bytes, storage_used_percent (ёмкость публикуется, только когда Proxmox её сообщает: неактивное хранилище или datastore PBS, размер которого PVE не читает, не получают ни одного значения вместо нулевых байтов)node, storage, type (dir, lvmthin, zfspool, nfs, pbs…), shared
Backups (per guest)backup_present, backup_last_timestamp_seconds, backup_last_age_seconds, backup_last_size_bytes, backup_count; итоги backup_guests_total, backup_guests_without_backupvmid, name, node, type
Backups (vzdump runs, per node)backup_job_runs, backup_job_failures, backup_job_last_ok, backup_job_last_timestamp_seconds, backup_job_last_age_seconds, backup_job_last_duration_secondsnode
Backup jobs (scheduled)backup_job_enabled, backup_job_next_run_seconds, backup_job_last_ok, backup_job_last_run_age_seconds (последние две только когда задача vzdump несёт id задания, PVE 7.2+); итоги backup_jobs_total, backup_guests_not_covered; backup_covered на гостя (0 для гостя, не охваченного ни одним заданием)job, storage, schedule; backup_covered: vmid, name, node, type
Backup job coveragebackup_job_guests, backup_job_volumes_included, backup_job_volumes_excluded; backup_job_guest_excluded_volumes (+ vmid, name, type, reason), публикуется только для неожиданного исключенияjob
HAha_quorum_ok, ha_fencing_armed (+ state: Proxmox VE 9 сообщает, находится ли watchdog в состоянии armed или standby — в standby ничто не будет изолировано), ha_master_active, ha_lrm_active (node), ha_resources_total; для каждого ресурса ha_resource_started, ha_resource_error (1 в состоянии error, fence или recovery), ha_resource_state_info (+ state)sid, node, vmid, type
HA managerha_node_online, ha_node_status_info (+ status: online, fence, gone, maintenance), ha_master_info (узел, удерживающий мастер CRM), ha_manager_age_seconds; для каждого узла ha_lrm_mode_info (+ mode, state), ha_lrm_age_seconds, ha_lrm_stale (1, когда LRM не писал более двух минут)node
Snapshotsguest_snapshot_count, guest_snapshot_oldest_age_seconds, guest_snapshot_newest_age_seconds (возрасты только при count > 0); guest_snapshot_guests_skipped при превышении max_snapshot_guestsvmid, name, node, type
Replicationreplication_job_enabled, replication_job_error (сообщение об ошибке или fail_count > 0), replication_job_fail_count, replication_job_last_sync_age_seconds, replication_job_next_sync_seconds, replication_job_duration_seconds; replication_jobs_totaljob, vmid, node (источник), to_node
Cephceph_health (0 OK, 1 WARN, 2 ERR, 3 неизвестно), ceph_health_info (+ status), ceph_osds_total/up/in, ceph_bytes_total/used, ceph_used_percent, ceph_pgs_total, ceph_mons_total
Ceph OSDsceph_osd_up, ceph_osd_in, ceph_osd_used_percent, ceph_osd_used_bytes, ceph_osd_total_bytes, ceph_osd_apply_latency_ms, ceph_osd_commit_latency_ms, ceph_osd_reweight, ceph_osd_crush_weight; итоги ceph_osds_down, ceph_osds_outosd, ceph_host, device_class
Ceph pools and CephFSceph_pool_used_percent, ceph_pool_used_bytes, ceph_pool_size, ceph_pool_min_size, ceph_pool_pg_num, ceph_pool_pg_num_optimal (что выбрал бы autoscaler), ceph_pool_info (+ type, crush_rule, autoscale), ceph_pools_total; ceph_fs_info (+ metadata_pool, data_pool), ceph_fs_totalpool; CephFS: name
Ceph flags and mutesceph_flag (1, пока флаг установлен), ceph_flags_set; ceph_health_mute_info (+ sticky), ceph_health_mutesflag; заглушки: code
Physical disksnode_disk_size_bytes, node_disk_smart_failed (1, когда состояние SMART равно FAILED; отсутствует, когда диск сообщает UNKNOWN), node_disk_health_info (+ health, used: LVM, ZFS, partitions…), node_disk_wearout_percent (SSD и NVMe: 0 — новый, 100 — конец номинального ресурса), node_disk_temperature_celsius (из disks/smart: атрибут ATA 194/190 или строка температуры текстового отчёта — Temperature: для NVMe, Current Drive Temperature: для SAS)node, disk (/dev/sda, /dev/nvme0n1), model, type (ssd, hdd, nvme)
ZFS poolsnode_zfs_pool_degraded (1, если не ONLINE), node_zfs_pool_health_info (+ health), node_zfs_pool_size/alloc/free_bytes, node_zfs_pool_used_percent, node_zfs_pool_fragmentation_percentnode, pool
Updatesnode_updates_pending, node_updates_security_pending (пакеты, чьё происхождение, метка репозитория, suite, раздел или URL журнала изменений указывают на архив безопасности, например bookworm-security у Debian). Без Sys.Modify эти два ряда не существуют; node_pve_packages_upgradable тогда всё равно считает пакеты Proxmox, чья версия-кандидат отличается от установленной, а node_reboot_required (+ running, installed) сообщает, что более новое ядро установлено, но ещё не загружено — оба читаются из apt/versions, для чего нужен только Sys.Auditnode
Package changesnode_packages_changed: обычно 0; в течение часа после того, как опрос видит изменение установленной версии пакета Proxmox (apt/versions), число изменившихся пакетов, с меткой changes, например pve-manager 8.2.4→8.2.7, proxmox-kernel-6.8 6.8.8-2→6.8.12-2node, changes
Subscription and repositoriesnode_subscription_active, node_subscription_info (+ status: active, notfound, expired…, level, next_due); node_repository_errors (нечитаемые файлы sources), node_repository_warnings (собственные предупреждения Proxmox: репозиторий enterprise без подписки, тестовый репозиторий), node_repository_enabled (+ repo: enterprise, no-subscription, test, ceph-*)node
Certificatesnode_certificate_expiry_days (отрицательное после истечения)node, filename, subject
RRD stream (off by default)node_rrd_<metric>, guest_rrd_<metric>, storage_rrd_<metric> — каждое измерение, которое получают собственные серверы метрик Proxmox, под своим именем (см. metrics_export ниже)node; гости: vmid, type; хранилища: node, storage
Collectionup, scrape_errors, scrape_duration_seconds

Возраст резервной копии по каждой машине отвечает на самый дорогостоящий сбой домашней лаборатории: резервная копия, не выполнявшаяся неделями и обнаруженная в день восстановления. Он вычисляется из журнала задач vzdump (за backup_lookback_days) и, если включён scan_backup_storage, из архивов, найденных в хранилищах резервных копий.

Запланированные задания берутся из Datacenter → Backup: backup_covered равен 0 для каждого гостя, который сам Proxmox перечисляет как не охваченный ни одним заданием, поэтому машина, созданная вчера, появляется до первой пропущенной резервной копии, а не после.

Задание, охватывающее гостя, не обязательно записывает все его диски. Том, помеченный backup=0, пропускается каждую ночь, задание по-прежнему сообщает об успехе, и никто не узнаёт об этом до восстановления. backup_job_guest_excluded_volumes называет задание, гостя и собственную причину Proxmox для исключения — но только когда исключение неожиданно: привод CD-ROM, образ cloudinit или запись, вообще не являющаяся томом, исключаются по замыслу, учитываются в backup_job_volumes_excluded и никогда не сообщаются по гостям. Без этого различия каждая машина с виртуальным приводом вызывала бы оповещение.

За демонами узла стоит следить по одной причине: остановленный pvestatd ничего явно не ломает — веб-интерфейс продолжает показывать числа на момент его смерти, и всё выглядит нормально. node_core_services_down считает только pve-cluster, pvedaemon, pveproxy, pvestatd, pve-firewall, corosync и watchdog-mux, и только те, которые сам узел объявляет включёнными, поэтому отдельный узел без corosync или HA не считает ничего недостающим.

Интерфейс считается offline, когда он настроен на запуск при загрузке и не поднят (или вообще больше не существует). Поднимаемый по требованию, без autostart, никогда не сообщается: его отсутствие нормально. Мост, не вернувшийся после перезагрузки, отрезает всех подключённых к нему гостей, хотя каждый из них работает прекрасно, и больше ничто об этом не говорит.

Заполнившийся пул LVM thin переводит всех гостей, хранящихся на нём, в режим только чтения сразу, а удаление файлов внутри гостей не возвращает место. Его метаданные находятся на отдельном, гораздо меньшем томе и часто заполняются первыми, с точно таким же последствием — поэтому два уровня заполнения — отдельные ряды и отдельные правила.

Изменения пакетов обнаруживает сам коллектор: он запоминает установленные версии из предыдущего опроса (по монитору и узлу, в памяти — после перезапуска сервера он учится заново, ничего не сообщая). Учитывается только пакет, присутствующий в обоих опросах с разной версией; новоустановленный или удалённый пакет не учитывается.

Частичный сбой (один узел недоступен, одно хранилище медленное) всё равно считается успешным опросом: то, что удалось прочитать, записывается, а сбой учитывается в scrape_errors. Функции, которых просто нет, молчат: отсутствие Ceph, задания репликации, пула ZFS, гостевого агента или права на перечень обновлений не порождает ни рядов, ни ошибки. То же относится ко всему вышесказанному: отсутствующая привилегия (403), эндпоинт, которого нет в более старом Proxmox (404 или 501), не установленная функция (Ceph отвечает 500) не вызывают ни ошибки, ни метрики — никогда нуль, притворяющийся измерением.

Температуры плат недоступны: API Proxmox VE не предоставляет датчики, только собственную температуру SMART дисков. Установите агент DumbMonit на узел, если нужно больше.

Применяемые встроенные правила: Monitor unreachable, High CPU, Disk almost full, Filesystem almost full (forecast), Backup too old, Unusual CPU, VM or container stopped, VM or container CPU high, VM or container memory high, VM or container disk almost full, HA resource in error, Cluster lost quorum, Node offline, Storage almost full, Backup job failed, Old snapshot, Replication failed, Ceph health error, Ceph health warning, Updates pending, Security updates pending, Proxmox packages changed, Proxmox disk wearing out, Proxmox disk SMART failure, Proxmox ZFS pool degraded, Node certificate expiring, Thin pool almost full, Thin pool metadata almost full, Proxmox service down, Node network interface down, Ceph OSD down, Ceph OSD nearly full, Ceph pool almost full, Ceph noout flag left on, HA manager not reporting, Backup job excludes a disk, Guest locked.

/cluster/metrics/export — эндпоинт, который потребляют собственные серверы метрик Proxmox (InfluxDB, Graphite): всё, что измеряет pvestatd, для всего кластера, за один вызов. Он ценен по двум причинам.

  • Он несёт измерения, которых не даёт больше ничто — в частности pressure stall information (PSI) по узлам: сколько времени задачи ждут CPU, диск или память. Именно это число объясняет «всё тормозит», когда и CPU, и память выглядят нормально.
  • Он читается с history=1 от последней уже виденной точки, поэтому каждая точка между двумя опросами принимается со своей меткой времени. Монитор, опрашиваемый каждые пять минут, получает свои пять одноминутных точек вместо единственного текущего значения.

Он выключен по умолчанию, и это сознательный компромисс. Эти ряды частично повторяют те, что остальной сбор уже производит под лучшими именами, поэтому включение metrics_export добавляет большое число рядов для хранения и просеивания ради деталей, которые большинство установок никогда не смотрят. Имена публикуются ровно так, как их отправляет Proxmox (node_rrd_pressure_cpu_some_avg10, guest_rrd_netin…), а не переводятся: Proxmox добавляет новые в каждом релизе, и написанная здесь таблица перевода устарела бы к следующему. Нужен Sys.Audit на / — который роль DumbMonit уже имеет, если она была выдана на /, как показано ниже.

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

  1. Откройте оболочку на любом узле (в веб-интерфейсе: выберите узел, затем Shell; или SSH) и создайте пользователя, зарезервированного для мониторинга. Пароль ему не нужен: входит токен.

    pveum user add dumbmonit@pve --comment "DumbMonit monitoring"
  2. Создайте роль только с теми привилегиями, которые использует коллектор: Sys.Audit (узлы, кластер, HA, диски и SMART, ZFS, сертификаты, версии пакетов, подписка), Datastore.Audit (хранилища и архивы резервных копий), VM.Audit (ВМ, контейнеры, снапшоты) и VM.GuestAgent.Audit (то, что гостевой агент QEMU читает внутри ВМ: использование диска, операционная система, IP-адреса). Ни одна из них ничего не может изменить.

    pveum role add DumbMonit --privs "Datastore.Audit Sys.Audit VM.Audit VM.GuestAgent.Audit"
  3. Выдайте пользователю эту роль на весь кластер.

    pveum aclmod / -user dumbmonit@pve -role DumbMonit
  4. Создайте API-токен пользователя. Разделение привилегий выключено, поэтому токен просто наследует права пользователя.

    pveum user token add dumbmonit@pve monitor --privsep 0
  5. Команда выводит таблицу с full-tokenid и value. Скопируйте full-tokenid в поле Token ID DumbMonit, а value (UUID) — в поле Secret. Секрет показывается один раз: если он утерян, удалите токен и создайте новый.

    dumbmonit@pve!monitor
  6. Необязательно, чтобы считать ожидающие обновления и ожидающие исправления безопасности: Proxmox защищает этот список правом Sys.Modify. Выдайте его только на /nodes; без него коллектор молча пропускает список.

    pveum role add DumbMonitUpdates --privs Sys.Modify
    pveum aclmod /nodes -user dumbmonit@pve -role DumbMonitUpdates
  7. В более старом Proxmox VM.GuestAgent.Audit может ещё не существовать, и команда выше отклоняется с ошибкой invalid privilege: вызовы гостевого агента тогда покрываются VM.Monitor, который, в свою очередь, был удалён в Proxmox VE 9. Используйте ту, которую знает ваша версия.

    pveum role add DumbMonit --privs "Datastore.Audit Sys.Audit VM.Audit VM.Monitor"
  8. Предпочитаете веб-интерфейс? Те же шаги находятся в Datacenter → Permissions: Users, Roles, Add → User Permission, затем API Tokens со снятой отметкой «Privilege Separation».

  9. В DumbMonit введите адрес любого узла (по умолчанию порт 8006).

Документация производителя: Proxmox VE user management.

Учётные данныеПоля
API-токен (рекомендуется)Token ID: пользователь, realm и имя токена в том виде, как их показывает Proxmox, dumbmonit@pve!monitor. Secret: UUID, показанный один раз при создании токена. Без срока действия, на гипервизоре не открывается сессия.
Имя пользователя / парольuser@realm и пароль. Тикет получается, кэшируется и обновляется за десять минут до истечения его двухчасового срока.

API принимает токен из двух частей (token_id + secret) или, как в более старых версиях, одной строкой token = user@realm!name=secret; оба варианта хранятся одинаково. Целый токен, вставленный в Token ID, разделяется формой.

Роль DumbMonit выше несёт то, что PVEAuditor выдаёт для путей, которые читает коллектор, плюс привилегию гостевого агента: коллектор выполняет только GET. По эндпоинтам: Sys.Audit для /version, /cluster/*, /nodes/{node}/status, services, version, network, netstat, tasks, replication, certificates/info, disks/list, disks/smart, disks/zfs, apt/versions, apt/repositories и subscription; Datastore.Audit для storage и storage/{id}/content; VM.Audit для qemu, lxc, snapshot, status/current и interfaces контейнера; VM.GuestAgent.Audit — или VM.Monitor до Proxmox VE 9 — для agent/get-fsinfo.

Два пути требуют немного больше остальных, и оба покрываются ролью в том виде, как она выдана на шаге 3 — на /, а не на /nodes:

  • Sys.Audit на / для инвентаря LVM (disks/lvm, disks/lvmthin, disks/directory) и для /cluster/metrics/export, необязательного потока RRD. Если выдано только на /nodes, ряды thin-пулов и ряды *_rrd_* молча отсутствуют.
  • VM.GuestAgent.Audit для двух вызовов гостевого агента, читающих операционную систему и адреса ВМ (agent/get-osinfo, agent/network-get-interfaces). В Proxmox VE 7 этой привилегии не было, и использовался VM.Monitor; Proxmox VE 9 отказался от VM.Monitor. Без той, которую знает ваша версия, guest_os_info и guest_ip_info для ВМ просто не публикуются; контейнеры, которым агент не нужен, сохраняют свои адреса.

Единственное, чего роль не покрывает вовсе, — список ожидающих обновлений (apt/update), который Proxmox защищает правом Sys.Modify на /nodes — необязательно, как объясняет шаг 6; без него коллектор молча пропускает node_updates_pending и node_updates_security_pending.

(Используйте -token 'dumbmonit@pve!monitor' вместо -user в командах aclmod для токена, созданного с отмеченным «Privilege Separation».)

Адрес: 10.0.0.10, pve.lan, pve.lan:8006, [fd00::1] или полный URL https://pve.example.net. Схема https и порт 8006 добавляются, если отсутствуют.

КлючНазваниеПо умолчаниюСправка
portAPI port8006Используется, если адрес не задаёт порт.
insecure_tlsAccept an unverifiable certificatefalseProxmox по умолчанию поставляется с самоподписанным сертификатом: включите, если соединение отклоняется по этой причине.
request_timeout_secondsTimeout per request (seconds)10Время, отведённое на каждый вызов API, от 1 до 120.
backup_lookback_daysBackup lookback (days)31Более старые задачи резервного копирования не рассматриваются, от 1 до 3650.
scan_backup_storageInventory backup archivestrueСканирует хранилища резервных копий, чтобы датировать последнюю копию каждой машины. Отключите, если хранилище медленно отвечает.
nodesMonitored nodes(пусто)Имена отслеживаемых узлов через запятую. Пусто: каждый узел кластера.
cluster_resourcesRead the cluster inventorytrueОдин вызов /cluster/resources перечисляет все узлы, гостей, хранилища и пулы. Оставьте включённым: это единственный источник, по-прежнему видящий гостей узла, переставшего отвечать, и он экономит два вызова на узел. При выключении коллектор вместо этого обходит /nodes/{node}/qemu и /nodes/{node}/lxc и теряет пулы и блокировки.
servicesWatch node servicestrue/nodes/{node}/services и version: состояние демонов Proxmox каждого узла и установленная на нём версия. Остановленный pvestatd оставляет весь кластер с замороженными числами.
networkWatch node networkingtrue/nodes/{node}/network и netstat: мосты, бонды и VLAN с состоянием линка, а также счётчики трафика сетевой карты каждого гостя.
lvmWatch LVM and thin poolstruedisks/lvm, disks/lvmthin и disks/directory: группы томов, thin-пулы (заполнение данных и метаданных) и каталоги-монтирования, управляемые PVE. Нужен Sys.Audit на /; иначе молчит.
haHigh availabilitytrueЧитает /cluster/ha/status/current и manager_status: кворум, мастер CRM, собственное представление менеджера о каждом узле, каждый LRM с возрастом последнего отчёта и каждый ресурс HA.
backup_jobsScheduled backup jobstrueЧитает задания из Datacenter → Backup и гостей, не охваченных ни одним заданием.
scan_snapshotsInventory snapshotstrueОдин вызов на гостя (четыре одновременно на узел). Отключите на очень больших кластерах.
max_snapshot_guestsSnapshot inventory limit200Гости сверх этого числа пропускаются при каждом опросе и учитываются в guest_snapshot_guests_skipped, от 1 до 10000.
replicationReplication jobstrueСостояние репликации хранилищ по узлам. Молчит, если на узле нет заданий.
cephCeph healthtrueЧитает /cluster/ceph/status. Молчит, если Ceph не установлен.
ceph_detailWatch Ceph in detailtrueСостояние, использование и задержки по каждому OSD, использование по пулам, CephFS, флаги OSD и заглушённые проверки здоровья. Три вызова на одном узле плюс два на весь кластер, независимо от размера кластера. Требует включённого ceph; без Ceph молчит.
backup_volumesCheck what backup jobs includetrueДля каждого запланированного задания: каких гостей оно охватывает и какие из их дисков реально записывает. Ловит задание, которое каждую ночь завершается успешно, пропуская диск с данными. Один вызов на задание.
guest_osRead guest OS and addressestrueОперационная система и IP-адреса, видимые изнутри каждого запущенного гостя (гостевой агент QEMU для ВМ, пространство имён контейнера для контейнеров). Обновляется раз в час на гостя, а не при каждом опросе. Нужен VM.GuestAgent.Audit в Proxmox VE 8.
metrics_exportIngest the full RRD metric streamfalseЧитает /cluster/metrics/export, поток, который потребляют собственные серверы метрик Proxmox, включая pressure stall (PSI) по узлам, и каждую точку с момента последнего опроса, а не только текущую. По умолчанию выключено: добавляемые им ряды *_rrd_* частично повторяют уже собираемые. Нужен Sys.Audit на /.
updatesPending updatestrueСчитает пакеты, перечисленные apt/update. Нужен Sys.Modify на /nodes (см. выше); иначе молчит.
certificatesCertificate expirytrueДней до истечения каждого сертификата узла (pve-ssl.pem, pveproxy-ssl.pem, pve-root-ca.pem).
guest_agentAsk the QEMU guest agenttrueДля каждой запущенной ВМ: status/current (баллон, флаг агента) и, когда агент включён, agent/get-fsinfo (нужен VM.GuestAgent.Audit). Четыре вызова одновременно на узел. Молчит, если агента нет.
disksWatch physical diskstruedisks/list плюс один вызов disks/smart на диск: состояние, износ, температура.
zfsWatch ZFS poolstruedisks/zfs: состояние, ёмкость, фрагментация. Без ZFS молчит.
packagesDetect package changestrueapt/versions в сравнении с предыдущим опросом; изменение сообщается в течение часа в node_packages_changed.
subscriptionWatch subscription and repositoriestruesubscription и apt/repositories: статус, предупреждения, включённые стандартные репозитории.
СимптомВероятная причина
На мониторе показана ошибка сертификатаСамоподписанный сертификат. Установите доверенный сертификат (ACME встроен в Proxmox) или включите insecure_tls. Опция никогда не включается неявно.
Ошибка аутентификацииСекрет вставлен в Token ID (или наоборот), отметка «Privilege Separation» осталась включённой (тогда у токена нет прав), либо роль DumbMonit не применена на /.
Отсутствует возраст резервной копии для гостяВ окне просмотра нет задачи vzdump и в хранилищах не найден архив; либо scan_backup_storage отключён.
Медленные опросыХранилище резервных копий, которое долго перечисляется, или много гостей для инвентаризации снапшотов. Отключите scan_backup_storage или scan_snapshots, уменьшите max_snapshot_guests или увеличьте request_timeout_seconds.
Отсутствует node_updates_pendingУ пользователя или токена нет Sys.Modify на /nodes. Выдайте роль DumbMonitUpdates из шага 6 или проигнорируйте: node_pve_packages_upgradable и node_reboot_required покрывают пакеты Proxmox и без него.
Нет процента памяти для ВМProxmox VE 9 сообщает в инвентаре кластера память, которую ВМ занимает на хосте — с накладными расходами, поэтому регулярно выше выделенной. Процент, вычисленный по ней, навсегда оставался бы выше 100%. Честное число берётся из драйвера баллона внутри гостя; поэтому ВМ с отключённым баллонированием показывает байты, но не процент. guest_memory_host_bytes — значение со стороны хоста.
Нет ёмкости для хранилища резервных копийDatastore Proxmox Backup Server, смонтированный в PVE, не сообщает размер: PVE его не читает. Он есть на странице самого монитора datastore.
Использование диска пусто («size only») для ВМУ ВМ нет гостевого агента QEMU (не включён в её опциях или qemu-guest-agent не установлен внутри), либо у токена нет VM.GuestAgent.Audit. guest_agent_enabled и guest_agent_running показывают, что именно. Контейнерам он не нужен.
Нет рядов node_disk_*У токена нет Sys.Audit на / (роль DumbMonit его выдаёт), либо узел работает за RAID-контроллером, скрывающим SMART: disks/list тогда сообщает UNKNOWN, и node_disk_smart_failed не публикуется.
node_packages_changed срабатывает после перезапуска сервераНе срабатывает: первый опрос после перезапуска только узнаёт версии. Изменение сообщается лишь между двумя последовательными опросами одного процесса сервера.
Отсутствует backup_job_last_ok{job=…}, хотя backup_job_last_ok{node=…} существуетЗадачи vzdump не несут id задания (Proxmox VE старше 7.2 или задания, запущенные вручную). Состояние запусков по узлам по-прежнему есть.
Нет метрик Ceph или репликацииСообщать нечего: Ceph не установлен или не настроено ни одного задания репликации. Это не ошибка.
Нет thin-пула или группы томов на карточке узлаОпция lvm выключена, на узле нет LVM, либо у пользователя Sys.Audit только на /nodes — этот инвентарь требует его на /.
Раздел Ceph отсутствует, хотя в кластере есть Cephceph или ceph_detail выключены, либо каждый узел ответил на вызовы детализации ошибкой. available: false в /api/targets/{id}/proxmox/ceph означает «здесь нет Ceph», а не «ещё не собрано».
Нет операционной системы или IP-адреса для ВМГостевой агент QEMU не включён или не установлен в этой ВМ, либо у токена нет VM.GuestAgent.Audit в Proxmox VE 8 (шаг 7). Контейнерам агент не нужен. Только что запущенный гость ждёт до часа: сведения обновляются ежечасно, а не при каждом опросе.
У гостя остаётся значок блокировкиЕё оставили прерванные резервное копирование, миграция или снапшот. qm unlock <vmid> для ВМ, pct unlock <vmid> для контейнера — после проверки, что задание действительно завершено.
pve_backup_excludes_disk срабатывает на машине с CD-ROMНе срабатывает: приводы, образы cloudinit и записи, не являющиеся томами, исключаются по замыслу и никогда не сообщаются по гостям. Сработал реальный диск с backup=0.
Нет рядов *_rrd_*metrics_export выключен (по умолчанию так и есть), либо у пользователя нет Sys.Audit на /.