# Коллектор 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 и др.)