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

8.6 KiB
Raw Blame History

GPU коллектор

Автор: Сергей Антропов
Сайт: https://devops.org.ru

Описание

Коллектор GPU собирает информацию о графических процессорах (GPU) в системе и виртуальных машинах Proxmox. Поддерживает NVIDIA GPU через nvidia-smi и AMD GPU через rocm-smi. Возвращает детальную информацию о каждом GPU, агрегированную статистику по всем устройствам, а также информацию о виртуальных машинах и контейнерах в Proxmox кластере.

Собираемые данные

Детальная информация о GPU

Для каждого GPU собирается:

  • id - индекс GPU
  • name - модель GPU
  • driver_version - версия драйвера
  • mem_total_mb - общий объем видеопамяти в МБ
  • mem_used_mb - используемая видеопамять в МБ
  • gpu_util_pct - утилизация GPU в процентах
  • mem_util_pct - утилизация видеопамяти в процентах
  • temperature_c - температура в градусах Цельсия
  • power_watt - потребляемая мощность в ваттах

Агрегированная статистика

В секции summary:

  • total_count - общее количество GPU
  • models - количество GPU по моделям (map[string]int)
  • total_mem_mb - суммарный объем видеопамяти всех GPU
  • total_used_mem_mb - суммарная используемая видеопамять
  • total_watt - суммарное потребление всех GPU
  • avg_utilization_pct - средняя утилизация всех GPU
  • temperature_c - статистика по температуре:
    • min - минимальная температура среди всех GPU
    • max - максимальная температура среди всех GPU
    • avg - средняя температура всех GPU

Информация о виртуальных машинах

В секции vms (только для Proxmox):

  • vmid - ID виртуальной машины/контейнера
  • vm_id - уникальный ID (16 символов SHA256 от cluster_uuid + vmid)
  • name - имя виртуальной машины/контейнера
  • status - статус (running, stopped, suspended)
  • node - нода, на которой запущена VM
  • cpu - текущее использование CPU
  • maxcpu - максимальное количество CPU
  • mem - текущее использование памяти в МБ
  • maxmem - максимальная память в МБ
  • disk - текущее использование диска в ГБ
  • maxdisk - максимальный размер диска в ГБ
  • uptime - время работы в секундах
  • template - является ли шаблоном
  • pid - PID процесса
  • netin - входящий сетевой трафик в байтах
  • netout - исходящий сетевой трафик в байтах
  • diskread - прочитано с диска в байтах
  • diskwrite - записано на диск в байтах
  • guest_agent - статус guest agent (только для VM)
  • type - тип: "qemu" для виртуальных машин, "lxc" для контейнеров

Зависимости

NVIDIA GPU

  • nvidia-smi - утилита для мониторинга NVIDIA GPU

AMD GPU

  • rocm-smi - утилита для мониторинга AMD GPU

Виртуальные машины Proxmox

  • pvesh - утилита командной строки Proxmox VE
  • Доступ к /etc/corosync/corosync.conf или /etc/pve/corosync.conf для получения cluster_uuid

Примеры вывода

NVIDIA GPU

{
  "collector_name": "gpu",
  "gpu": [
    {
      "id": 0,
      "name": "NVIDIA GeForce RTX 3080",
      "driver_version": "525.60.13",
      "mem_total_mb": 10240,
      "mem_used_mb": 5120,
      "gpu_util_pct": 75,
      "mem_util_pct": 50,
      "temperature_c": 65,
      "power_watt": 250.5
    },
    {
      "id": 1,
      "name": "NVIDIA GeForce RTX 4090",
      "driver_version": "525.60.13",
      "mem_total_mb": 24576,
      "mem_used_mb": 12288,
      "gpu_util_pct": 85,
      "mem_util_pct": 50,
      "temperature_c": 70,
      "power_watt": 450.0
    }
  ],
  "summary": {
    "total_count": 2,
    "models": {
      "NVIDIA GeForce RTX 3080": 1,
      "NVIDIA GeForce RTX 4090": 1
    },
    "total_mem_mb": 34816,
    "total_used_mem_mb": 17408,
    "total_watt": 700.5,
    "avg_utilization_pct": 80.0,
    "temperature_c": {
      "min": 65,
      "max": 70,
      "avg": 67.5
    }
  }
}

AMD GPU

{
  "collector_name": "gpu",
  "gpu": [
    {
      "id": 0,
      "name": "AMD Radeon RX 6800 XT",
      "driver_version": "22.40.0",
      "mem_total_mb": 16384,
      "mem_used_mb": 8192,
      "gpu_util_pct": 60,
      "mem_util_pct": 50,
      "temperature_c": 55,
      "power_watt": 200.0
    }
  ],
  "summary": {
    "total_count": 1,
    "models": {
      "AMD Radeon RX 6800 XT": 1
    },
    "total_mem_mb": 16384,
    "total_used_mem_mb": 8192,
    "total_watt": 200.0,
    "avg_utilization_pct": 60.0,
    "temperature_c": {
      "min": 55,
      "max": 55,
      "avg": 55
    }
  }
}

Отсутствие GPU

{
  "collector_name": "gpu",
  "gpu": null
}

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

Получить общую информацию о GPU

./collectors/gpu | jq '.summary'

Получить список всех моделей GPU

./collectors/gpu | jq '.summary.models'

Получить суммарное потребление GPU

./collectors/gpu | jq '.summary.total_watt'

Получить среднюю утилизацию

./collectors/gpu | jq '.summary.avg_utilization_pct'

Получить статистику по температуре

./collectors/gpu | jq '.summary.temperature_c'

Получить максимальную температуру

./collectors/gpu | jq '.summary.temperature_c.max'

Получить минимальную температуру

./collectors/gpu | jq '.summary.temperature_c.min'

Получить среднюю температуру

./collectors/gpu | jq '.summary.temperature_c.avg'

Получить информацию о конкретном GPU

./collectors/gpu | jq '.gpu[0]'

Получить GPU с высокой утилизацией (>80%)

./collectors/gpu | jq '.gpu[] | select(.gpu_util_pct > 80)'

Получить GPU с высокой температурой (>70°C)

./collectors/gpu | jq '.gpu[] | select(.temperature_c > 70)'

Конфигурация

Пример конфигурации в config.yaml:

collectors:
  gpu:
    enabled: true
    type: exec
    key: gpu
    interval: "30s"
    timeout: "10s"
    exec: "./collectors/gpu"
    platforms: [linux]

Особенности

  • Приоритет NVIDIA: Если доступен nvidia-smi, используется он, иначе rocm-smi
  • Fallback: Если ни один из драйверов недоступен, возвращается пустой результат
  • Агрегация: Статистика вычисляется только при наличии GPU
  • Совместимость: Поддерживает различные версии nvidia-smi и rocm-smi
  • Производительность: Минимальное время выполнения за счет оптимизированных запросов

Мониторинг

Рекомендуемые метрики для мониторинга:

  • summary.total_watt - общее потребление GPU
  • summary.avg_utilization_pct - средняя утилизация
  • summary.temperature_c.max - максимальная температура GPU
  • summary.temperature_c.avg - средняя температура GPU
  • gpu[].temperature_c - температура каждого GPU
  • gpu[].mem_util_pct - утилизация видеопамяти
  • summary.total_count - количество GPU в системе