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

17 KiB
Raw Blame History

Коллектор 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 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 повышает криптографическую стойкость.

Примеры использования

Проверка работы коллектора

# Запуск коллектора напрямую
./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'

Устранение неполадок

Частые проблемы

  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
    • Убедитесь в правильности конфигурации кластера

Отладка

# Проверка доступности команд
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 и др.)