- Удалены лишние поля: cluster_backup, cluster_config_join, preferred_node, totem, cluster_config_nodes, cluster_firewall_*, cluster_ha_*, cluster_log, cluster_nextid, cluster_options, cluster_resources - Убрана информация о storage из cluster_resources - Добавлена детальная информация по каждой ноде: * vm_summary с количеством VM/контейнеров и их ресурсами * Статистика по CPU/памяти для VM * Количество запущенных/остановленных VM и контейнеров - Упрощен список endpoints для pvesh запросов - Улучшена структура вывода коллектора Автор: Сергей Антропов, сайт: https://devops.org.ru
310 lines
10 KiB
Markdown
310 lines
10 KiB
Markdown
# 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 (для хостовых систем)
|
||
|
||
### Настройка для виртуальных машин
|
||
|
||
Коллектор поддерживает несколько способов получения информации о кластере и VM ID:
|
||
|
||
#### 1. Переменные окружения (рекомендуется)
|
||
```bash
|
||
export PROXMOX_CLUSTER_UUID="e7ac0786668e0ff0"
|
||
export PROXMOX_VM_ID="100"
|
||
```
|
||
|
||
#### 2. Конфигурационный файл
|
||
Создайте файл `/etc/sensusagent/proxmox.conf`:
|
||
```yaml
|
||
cluster_uuid: "e7ac0786668e0ff0"
|
||
vm_id: "100"
|
||
```
|
||
|
||
#### 3. Автоматическое определение
|
||
Коллектор автоматически определяет Proxmox окружение и генерирует дефолтные значения.
|
||
|
||
## Примеры вывода
|
||
|
||
### 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
|
||
}
|
||
}
|
||
}
|
||
```
|
||
|
||
### Виртуальная машина Proxmox
|
||
```json
|
||
{
|
||
"collector_name": "gpu",
|
||
"gpu": [],
|
||
"vms": [
|
||
{
|
||
"vmid": "100",
|
||
"vm_id": "a1b2c3d4e5f6g7h8",
|
||
"name": "web-server",
|
||
"status": "running",
|
||
"node": "current",
|
||
"cpu": 25.5,
|
||
"maxcpu": 4,
|
||
"mem": 2048,
|
||
"maxmem": 8192,
|
||
"disk": 0,
|
||
"maxdisk": 0,
|
||
"uptime": 86400,
|
||
"template": false,
|
||
"pid": 0,
|
||
"netin": 0,
|
||
"netout": 0,
|
||
"diskread": 0,
|
||
"diskwrite": 0,
|
||
"guest_agent": 0,
|
||
"type": "qemu"
|
||
}
|
||
]
|
||
}
|
||
```
|
||
|
||
### Отсутствие GPU
|
||
```json
|
||
{
|
||
"collector_name": "gpu",
|
||
"gpu": [],
|
||
"vms": []
|
||
}
|
||
```
|
||
|
||
## Примеры использования
|
||
|
||
### Получить общую информацию о 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 в системе
|