SensusAgent/docs/collectors/proxcluster.md
Sergey Antropoff 621d3f0a43 feat: добавлена информация о VM в коллектор GPU
- Добавлен сбор информации о виртуальных машинах и контейнерах Proxmox
- Генерация уникального vm_id на основе cluster_uuid + vmid (16 символов SHA256)
- Убрана информация о VM из коллектора proxcluster
- Обновлена документация по коллектору GPU
- Исправлен возврат пустого массива вместо null для vms

Автор: Сергей Антропов, сайт: https://devops.org.ru
2025-09-11 16:14:42 +03:00

445 lines
17 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Коллектор proxcluster
## Автор: Сергей Антропов, сайт: https://devops.org.ru
## Описание
Коллектор `proxcluster` собирает подробную информацию о Proxmox кластере, включая основную информацию о кластере, кворуме, хранилищах, нодах и данных corosync.
## Поддерживаемые платформы
- **Linux**: Полная поддержка
- **macOS/Windows**: Не поддерживается (возвращает пустой JSON)
## Собираемые данные
### Основная информация о кластере
```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
}
```
### Информация о кворуме
```json
{
"quorum": {
"quorate": true, // Есть ли кворум
"members": 3, // Количество участников
"total_votes": 3, // Общее количество голосов
"expected_votes": 3 // Ожидаемое количество голосов
}
}
```
### Хранилища кластера
```json
{
"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
}
]
}
```
### Подробная информация о нодах
```json
{
"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
```json
{
"corosync": {
"bindnetaddr": "192.168.1.0", // Сетевой адрес для привязки
"mcastport": 5405, // Порт для multicast
"ttl": 1, // TTL для multicast
"quorum_provider": "corosync_votequorum" // Провайдер кворума
}
}
```
### Агрегированные ресурсы кластера
```json
{
"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
```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 VE
- `corosync-quorumtool` - информация о кворуме
- `pvecm` - управление кластером
- `pvesm` - управление хранилищами
- `systemctl` - управление сервисами
- `ps` - список процессов
- `getent` - разрешение имен хостов
- `nvidia-smi` - информация о NVIDIA GPU
- `lspci` - информация о PCI устройствах (для AMD/Intel GPU)
## Уникальные идентификаторы
### cluster_id
Генерируется на основе:
- `cluster_name` из corosync.conf
- `cluster_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 повышает криптографическую стойкость.
## Примеры использования
### Проверка работы коллектора
```bash
# Запуск коллектора напрямую
./bin/agent/collectors/proxcluster
# Запуск через агент
make run
```
### Фильтрация данных
```bash
# Только информация о кластере
./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'
```
## Устранение неполадок
### Частые проблемы
1. **"no cluster data found"**
- Проверьте, что система является Proxmox VE кластером
- Убедитесь в доступности файла corosync.conf
- Проверьте права доступа к файлам конфигурации
2. **"failed to parse corosync.conf"**
- Проверьте формат файла corosync.conf
- Убедитесь, что в файле есть cluster_name и cluster_uuid
3. **"cluster version not found"**
- Убедитесь, что установлен Proxmox VE
- Проверьте доступность команды pveversion
4. **Пустые данные о нодах/хранилищах**
- Проверьте доступность команд pvecm, pvesm
- Убедитесь в правильности конфигурации кластера
### Отладка
```bash
# Проверка доступности команд
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 и др.)