- Добавлен сбор информации о виртуальных машинах и контейнерах Proxmox - Генерация уникального vm_id на основе cluster_uuid + vmid (16 символов SHA256) - Убрана информация о VM из коллектора proxcluster - Обновлена документация по коллектору GPU - Исправлен возврат пустого массива вместо null для vms Автор: Сергей Антропов, сайт: https://devops.org.ru
8.6 KiB
8.6 KiB
GPU коллектор
Автор: Сергей Антропов
Сайт: https://devops.org.ru
Описание
Коллектор GPU собирает информацию о графических процессорах (GPU) в системе и виртуальных машинах Proxmox. Поддерживает NVIDIA GPU через nvidia-smi
и AMD GPU через rocm-smi
. Возвращает детальную информацию о каждом GPU, агрегированную статистику по всем устройствам, а также информацию о виртуальных машинах и контейнерах в Proxmox кластере.
Собираемые данные
Детальная информация о GPU
Для каждого GPU собирается:
id
- индекс GPUname
- модель GPUdriver_version
- версия драйвераmem_total_mb
- общий объем видеопамяти в МБmem_used_mb
- используемая видеопамять в МБgpu_util_pct
- утилизация GPU в процентахmem_util_pct
- утилизация видеопамяти в процентахtemperature_c
- температура в градусах Цельсияpower_watt
- потребляемая мощность в ваттах
Агрегированная статистика
В секции summary
:
total_count
- общее количество GPUmodels
- количество GPU по моделям (map[string]int)total_mem_mb
- суммарный объем видеопамяти всех GPUtotal_used_mem_mb
- суммарная используемая видеопамятьtotal_watt
- суммарное потребление всех GPUavg_utilization_pct
- средняя утилизация всех GPUtemperature_c
- статистика по температуре:min
- минимальная температура среди всех GPUmax
- максимальная температура среди всех GPUavg
- средняя температура всех GPU
Информация о виртуальных машинах
В секции vms
(только для Proxmox):
vmid
- ID виртуальной машины/контейнераvm_id
- уникальный ID (16 символов SHA256 от cluster_uuid + vmid)name
- имя виртуальной машины/контейнераstatus
- статус (running, stopped, suspended)node
- нода, на которой запущена VMcpu
- текущее использование CPUmaxcpu
- максимальное количество CPUmem
- текущее использование памяти в МБ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
- общее потребление GPUsummary.avg_utilization_pct
- средняя утилизацияsummary.temperature_c.max
- максимальная температура GPUsummary.temperature_c.avg
- средняя температура GPUgpu[].temperature_c
- температура каждого GPUgpu[].mem_util_pct
- утилизация видеопамятиsummary.total_count
- количество GPU в системе