- Добавлен сбор информации о виртуальных машинах и контейнерах Proxmox - Генерация уникального vm_id на основе cluster_uuid + vmid (16 символов SHA256) - Убрана информация о VM из коллектора proxcluster - Обновлена документация по коллектору GPU - Исправлен возврат пустого массива вместо null для vms Автор: Сергей Антропов, сайт: https://devops.org.ru
17 KiB
17 KiB
Коллектор proxcluster
Автор: Сергей Антропов, сайт: https://devops.org.ru
Описание
Коллектор proxcluster
собирает подробную информацию о Proxmox кластере, включая основную информацию о кластере, кворуме, хранилищах, нодах и данных corosync.
Поддерживаемые платформы
- Linux: Полная поддержка
- macOS/Windows: Не поддерживается (возвращает пустой JSON)
Собираемые данные
Основная информация о кластере
{
"cluster_id": "a1b2c3d4e5f67890", // Уникальный ID на основе cluster_name + cluster_uuid (SHA256, 16 символов)
"name": "production-cluster", // Имя кластера из corosync.conf
"cluster_uuid": "12345678-1234-1234-1234-123456789abc", // UUID кластера
"version": "8.1.4" // Версия Proxmox VE
}
Информация о кворуме
{
"quorum": {
"quorate": true, // Есть ли кворум
"members": 3, // Количество участников
"total_votes": 3, // Общее количество голосов
"expected_votes": 3 // Ожидаемое количество голосов
}
}
Хранилища кластера
{
"storages": [
{
"storage_id": "local-lvm", // Идентификатор хранилища
"type": "lvmthin", // Тип хранилища
"content": ["images", "rootdir"], // Типы контента
"total_gb": 500, // Общий размер в ГБ
"used_gb": 320, // Использовано в ГБ
"avail_gb": 180, // Доступно в ГБ
"shared": false // Является ли хранилище общим
},
{
"storage_id": "nfs-storage",
"type": "nfs",
"content": ["images", "backup"],
"total_gb": 2000,
"used_gb": 1500,
"avail_gb": 500,
"shared": true
}
]
}
Подробная информация о нодах
{
"nodes": [
{
"node_uid": "d8b7a93c2f0e4f16", // Уникальный ID ноды (SHA256 от cluster_uuid + node_id, 16 символов)
"node_id": "1", // ID ноды в кластере
"name": "pve1", // Имя ноды
"ip": "192.168.1.10", // IP адрес ноды
"online": true, // Статус ноды
"cluster_id": "a1b2c3d4e5f67890", // ID кластера (SHA256 от cluster_name + cluster_uuid, 16 символов)
"cluster_uuid": "12345678-1234-1234-1234-123456789abc", // UUID кластера
"machine_id": "4b1d2c3a4e5f6789aabbccddeeff0011", // Machine ID системы
"product_uuid": "C9E4DDB2-1F27-4F3B-B3A9-ACD2C66F73B0", // UUID продукта
"os": { // Информация об ОС
"kernel": "Linux 5.15.108-1-pve",
"pve_version": "7.4-3",
"uptime_sec": 523423
},
"hardware": { // Информация о железе
"cpu_model": "Intel(R) Xeon(R) Gold 6226R",
"cpu_cores": 32,
"sockets": 2,
"threads": 64,
"memory_total_mb": 262144
},
"resources": { // Использование ресурсов
"cpu_usage_percent": 25.3,
"memory_used_mb": 98304,
"swap_used_mb": 512,
"loadavg": [0.52, 0.61, 0.72]
},
"network": [ // Сетевая информация
{
"iface": "eth0",
"mac": "52:54:00:12:34:56",
"ip": "192.168.1.10",
"rx_bytes": 123456789,
"tx_bytes": 987654321,
"errors": 0
},
{
"iface": "vmbr0",
"type": "bridge",
"ip": "192.168.1.1"
}
],
"disks": [ // Информация о дисках
{
"device": "/dev/sda",
"model": "Samsung SSD 870 EVO",
"size_gb": 1000,
"used_gb": 200,
"health": "PASSED"
},
{
"device": "rpool",
"type": "zfs",
"size_gb": 5000,
"used_gb": 2300,
"status": "ONLINE"
}
],
"services": [ // Статус сервисов
{"name": "pve-cluster", "active": true},
{"name": "pvedaemon", "active": true},
{"name": "pveproxy", "active": true},
{"name": "corosync", "active": true}
],
"logs": [], // Логи ноды (пустой массив в упрощенной версии)
"gpus": [ // Информация о GPU
{
"index": 0,
"model": "NVIDIA GeForce RTX 4090",
"memory_total_mb": 24576,
"memory_used_mb": 8192,
"utilization_percent": 45.5,
"temperature_c": 65.0
}
]
},
{
"node_uid": "e2f0c1a87d9b5d44",
"node_id": "2",
"name": "pve2",
"ip": "192.168.1.11",
"online": false, // Офлайн нода
"cluster_id": "a1b2c3d4e5f67890", // ID кластера
"cluster_uuid": "12345678-1234-1234-1234-123456789abc", // UUID кластера
"machine_id": "",
"product_uuid": "",
"os": {
"kernel": "",
"pve_version": "",
"uptime_sec": 0
},
"hardware": {
"cpu_model": "",
"cpu_cores": 0,
"sockets": 0,
"threads": 0,
"memory_total_mb": 0
},
"resources": {
"cpu_usage_percent": 0,
"memory_used_mb": 0,
"swap_used_mb": 0,
"loadavg": [0.0, 0.0, 0.0]
},
"network": [],
"disks": [],
"services": [],
"logs": [],
"gpus": []
}
]
}
Информация о corosync
{
"corosync": {
"bindnetaddr": "192.168.1.0", // Сетевой адрес для привязки
"mcastport": 5405, // Порт для multicast
"ttl": 1, // TTL для multicast
"quorum_provider": "corosync_votequorum" // Провайдер кворума
}
}
Агрегированные ресурсы кластера
{
"cluster_resources": {
"cpu": { // Агрегированная информация о CPU
"total_cores": 96, // Общее количество ядер
"total_sockets": 6, // Общее количество сокетов
"total_threads": 192, // Общее количество потоков
"online_cores": 64, // Ядра онлайн нод
"online_sockets": 4, // Сокеты онлайн нод
"online_threads": 128 // Потоки онлайн нод
},
"memory": { // Агрегированная информация о памяти
"total_mb": 524288, // Общая память в МБ
"used_mb": 196608, // Использованная память в МБ
"online_total": 393216, // Память онлайн нод в МБ
"online_used": 131072 // Использованная память онлайн нод в МБ
},
"storage": { // Агрегированная информация о хранилищах
"total_gb": 10000, // Общий размер всех хранилищ в ГБ
"used_gb": 6500, // Использованное место в ГБ
"avail_gb": 3500, // Доступное место в ГБ
"shared_gb": 5000, // Размер общих хранилищ в ГБ
"local_gb": 5000 // Размер локальных хранилищ в ГБ
},
"disks": { // Агрегированная информация о дисках
"total_count": 12, // Общее количество дисков
"total_size_gb": 24000, // Общий размер всех дисков в ГБ
"ssd_count": 6, // Количество SSD дисков
"ssd_size_gb": 12000, // Размер SSD дисков в ГБ
"hdd_count": 6, // Количество HDD дисков
"hdd_size_gb": 12000, // Размер HDD дисков в ГБ
"online_count": 8, // Количество дисков онлайн нод
"online_size_gb": 16000 // Размер дисков онлайн нод в ГБ
},
"gpu": { // Агрегированная информация о GPU
"total_count": 4, // Общее количество GPU
"online_count": 3, // Количество GPU онлайн нод
"total_memory_mb": 98304, // Общая память всех GPU в МБ
"used_memory_mb": 32768, // Использованная память GPU в МБ
"online_memory_mb": 73728, // Память GPU онлайн нод в МБ
"online_used_mb": 24576, // Использованная память GPU онлайн нод в МБ
"avg_utilization": 35.2, // Средняя утилизация GPU в процентах
"avg_temperature": 58.5, // Средняя температура GPU в градусах Цельсия
"models": [ // Список уникальных моделей GPU
"NVIDIA GeForce RTX 4090",
"NVIDIA GeForce RTX 3080",
"AMD Radeon RX 6800 XT"
]
},
"nodes": { // Статистика нод
"total": 3, // Общее количество нод
"online": 2 // Количество онлайн нод
}
}
}
Конфигурация
config.yaml
collectors:
proxcluster:
enabled: true
type: exec
key: proxcluster
interval: "1800s" # 30 минут
timeout: "30s"
exec: "./collectors/proxcluster"
platforms: [linux]
Переменные окружения
COLLECTOR_TIMEOUT
: Таймаут выполнения коллектора (по умолчанию 30s)
Требования
Системные требования
- Proxmox VE кластер
- Доступ к файлам конфигурации:
/etc/corosync/corosync.conf
(основной)/etc/pve/corosync.conf
(альтернативный)/var/lib/pve-cluster/corosync.conf
(альтернативный)
Команды
Коллектор использует следующие команды (должны быть доступны):
pveversion
- версия Proxmox VEcorosync-quorumtool
- информация о кворумеpvecm
- управление кластеромpvesm
- управление хранилищамиsystemctl
- управление сервисамиps
- список процессовgetent
- разрешение имен хостовnvidia-smi
- информация о NVIDIA GPUlspci
- информация о PCI устройствах (для AMD/Intel GPU)
Уникальные идентификаторы
cluster_id
Генерируется на основе:
cluster_name
из corosync.confcluster_uuid
из corosync.conf
Формула: SHA256(cluster_name + ":" + cluster_uuid)[:16]
(первые 16 символов SHA256 хеша)
node_uid
Генерируется на основе:
cluster_uuid
кластераnode_id
ноды
Формула: SHA256(cluster_uuid + ":" + node_id)[:16]
(первые 16 символов SHA256 хеша)
Это обеспечивает уникальность идентификаторов для каждого кластера и ноды, даже если имена совпадают. Использование SHA256 повышает криптографическую стойкость.
Примеры использования
Проверка работы коллектора
# Запуск коллектора напрямую
./bin/agent/collectors/proxcluster
# Запуск через агент
make run
Фильтрация данных
# Только информация о кластере
./bin/agent/collectors/proxcluster | jq '.cluster_id, .name, .version'
# Только кворум
./bin/agent/collectors/proxcluster | jq '.quorum'
# Только хранилища
./bin/agent/collectors/proxcluster | jq '.storages'
# Только ноды
./bin/agent/collectors/proxcluster | jq '.nodes'
# Только онлайн ноды
./bin/agent/collectors/proxcluster | jq '.nodes[] | select(.online == true)'
# Информация о corosync
./bin/agent/collectors/proxcluster | jq '.corosync'
# Агрегированные ресурсы кластера
./bin/agent/collectors/proxcluster | jq '.cluster_resources'
# Только CPU ресурсы
./bin/agent/collectors/proxcluster | jq '.cluster_resources.cpu'
# Только память
./bin/agent/collectors/proxcluster | jq '.cluster_resources.memory'
# Только хранилища
./bin/agent/collectors/proxcluster | jq '.cluster_resources.storage'
# Только диски
./bin/agent/collectors/proxcluster | jq '.cluster_resources.disks'
# Статистика нод
./bin/agent/collectors/proxcluster | jq '.cluster_resources.nodes'
# Только GPU ресурсы
./bin/agent/collectors/proxcluster | jq '.cluster_resources.gpu'
# Только модели GPU
./bin/agent/collectors/proxcluster | jq '.cluster_resources.gpu.models'
# GPU на конкретной ноде
./bin/agent/collectors/proxcluster | jq '.nodes[] | select(.name == "pve1") | .gpus'
Устранение неполадок
Частые проблемы
-
"no cluster data found"
- Проверьте, что система является Proxmox VE кластером
- Убедитесь в доступности файла corosync.conf
- Проверьте права доступа к файлам конфигурации
-
"failed to parse corosync.conf"
- Проверьте формат файла corosync.conf
- Убедитесь, что в файле есть cluster_name и cluster_uuid
-
"cluster version not found"
- Убедитесь, что установлен Proxmox VE
- Проверьте доступность команды pveversion
-
Пустые данные о нодах/хранилищах
- Проверьте доступность команд pvecm, pvesm
- Убедитесь в правильности конфигурации кластера
Отладка
# Проверка доступности команд
which pveversion pvecm pvesm corosync-quorumtool
# Проверка файлов конфигурации
ls -la /etc/corosync/corosync.conf /etc/pve/corosync.conf
# Проверка статуса сервисов
systemctl status pve-cluster corosync pveproxy pvedaemon
# Проверка кворума
corosync-quorumtool -s
# Проверка нод кластера
pvecm nodes
# Проверка хранилищ
pvesm status
Безопасность
- Коллектор требует права на чтение системных файлов конфигурации
- Не передает пароли или секретные ключи
- Собирает только публичную информацию о кластере
- Для офлайн нод возвращает пустые значения вместо попыток подключения
Производительность
- Время выполнения: ~10-30 секунд (зависит от размера кластера и количества нод)
- Интервал сбора: рекомендуется 30 минут (1800s)
- Потребление ресурсов: минимальное
- Для офлайн нод сбор данных пропускается
Совместимость
- Proxmox VE: 6.0+
- Кластеры: от 1 ноды (без кворума) до 32 нод
- Хранилища: все поддерживаемые типы (local, nfs, ceph, lvm, zfs и др.)
- Сети: все типы интерфейсов (eth, ens, enp, vmbr и др.)
- Диски: все типы устройств (sda, nvme, vda и др.)