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

257 lines
8.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 в системе