# 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 ```json { "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 ```json { "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 ```json { "collector_name": "gpu", "gpu": null } ``` ## Примеры использования ### Получить общую информацию о GPU ```bash ./collectors/gpu | jq '.summary' ``` ### Получить список всех моделей GPU ```bash ./collectors/gpu | jq '.summary.models' ``` ### Получить суммарное потребление GPU ```bash ./collectors/gpu | jq '.summary.total_watt' ``` ### Получить среднюю утилизацию ```bash ./collectors/gpu | jq '.summary.avg_utilization_pct' ``` ### Получить статистику по температуре ```bash ./collectors/gpu | jq '.summary.temperature_c' ``` ### Получить максимальную температуру ```bash ./collectors/gpu | jq '.summary.temperature_c.max' ``` ### Получить минимальную температуру ```bash ./collectors/gpu | jq '.summary.temperature_c.min' ``` ### Получить среднюю температуру ```bash ./collectors/gpu | jq '.summary.temperature_c.avg' ``` ### Получить информацию о конкретном GPU ```bash ./collectors/gpu | jq '.gpu[0]' ``` ### Получить GPU с высокой утилизацией (>80%) ```bash ./collectors/gpu | jq '.gpu[] | select(.gpu_util_pct > 80)' ``` ### Получить GPU с высокой температурой (>70°C) ```bash ./collectors/gpu | jq '.gpu[] | select(.temperature_c > 70)' ``` ## Конфигурация Пример конфигурации в `config.yaml`: ```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 в системе