Sergey Antropoff 15e6260ac3 feat: добавлен коллектор proxvms и обновлена документация
- Добавлен новый коллектор proxvms для сбора информации о виртуальных машинах и контейнерах Proxmox
- Реализован парсинг конфигураций VM/контейнеров с структурированием данных
- Добавлена поддержка парсинга сетевых интерфейсов, IP конфигураций, SCSI/IDE устройств
- Реализован парсинг JSON из поля description с переводом русских ключей на английский
- Добавлена генерация уникальных идентификаторов (cluster_uid, node_uid, machine_uid)
- Обновлена документация для всех коллекторов:
  - proxcluster (существующая)
  - gpu (существующая)
  - proxnode (новая)
  - proxvms (новая)
  - system (новая)
  - docker (новая)
  - hba (новая)
  - sensors (новая)
  - kubernetes (новая)
  - macos (новая)
  - uptime (новая)
- Обновлен основной файл docs/collectors.md с полным списком коллекторов
- Добавлена поддержка платформ для каждого коллектора
- Включены примеры использования и устранение неполадок

Автор: Сергей Антропов, сайт: https://devops.org.ru
2025-09-15 12:47:44 +03:00

321 lines
11 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.

# Коллектор proxnode
**Автор:** Сергей Антропов
**Сайт:** https://devops.org.ru
## Описание
Коллектор `proxnode` собирает подробную информацию о Proxmox ноде, включая системные ресурсы, сервисы, диски, сетевые интерфейсы и другую важную информацию о состоянии ноды.
## Поддерживаемые платформы
- **Linux**: Полная поддержка
- **macOS/Windows**: Не поддерживается (возвращает пустой JSON)
## Собираемые данные
### Основная информация о ноде
```json
{
"node_uid": "d8b7a93c2f0e4f16", // Уникальный ID ноды (SHA256 от cluster_uuid + node_id, 16 символов)
"node_id": "1", // ID ноды в кластере
"name": "pve1", // Имя ноды
"ip": "192.168.1.10", // IP адрес ноды
"online": true, // Статус ноды
"cluster_id": "a1b2c3d4e5f67890", // ID кластера (SHA256 от cluster_name + cluster_uuid, 16 символов)
"cluster_uuid": "12345678-1234-1234-1234-123456789abc", // UUID кластера
"machine_id": "4b1d2c3a4e5f6789aabbccddeeff0011", // Machine ID системы
"product_uuid": "C9E4DDB2-1F27-4F3B-B3A9-ACD2C66F73B0" // UUID продукта
}
```
### Информация об операционной системе
```json
{
"os": {
"kernel": "Linux 5.15.108-1-pve", // Версия ядра
"pve_version": "7.4-3", // Версия Proxmox VE
"uptime_sec": 523423 // Время работы в секундах
}
}
```
### Информация о железе
```json
{
"hardware": {
"cpu_model": "Intel(R) Xeon(R) Gold 6226R", // Модель процессора
"cpu_cores": 32, // Количество ядер
"sockets": 2, // Количество сокетов
"threads": 64, // Количество потоков
"memory_total_mb": 262144 // Общая память в МБ
}
}
```
### Использование ресурсов
```json
{
"resources": {
"cpu_usage_percent": 25.3, // Использование CPU в процентах
"memory_used_mb": 98304, // Использованная память в МБ
"swap_used_mb": 512, // Использованный swap в МБ
"loadavg": [0.52, 0.61, 0.72] // Средняя нагрузка (1м, 5м, 15м)
}
}
```
### Сетевая информация
```json
{
"network": [
{
"iface": "eth0", // Имя интерфейса
"mac": "52:54:00:12:34:56", // MAC адрес
"ip": "192.168.1.10", // IP адрес
"rx_bytes": 123456789, // Принято байт
"tx_bytes": 987654321, // Передано байт
"errors": 0 // Количество ошибок
},
{
"iface": "vmbr0", // Имя интерфейса
"type": "bridge", // Тип интерфейса
"ip": "192.168.1.1" // IP адрес
}
]
}
```
### Информация о дисках
```json
{
"disks": [
{
"device": "/dev/sda", // Устройство
"model": "Samsung SSD 870 EVO", // Модель диска
"size_gb": 1000, // Размер в ГБ
"used_gb": 200, // Использовано в ГБ
"health": "PASSED" // Состояние здоровья
},
{
"device": "rpool", // Устройство
"type": "zfs", // Тип файловой системы
"size_gb": 5000, // Размер в ГБ
"used_gb": 2300, // Использовано в ГБ
"status": "ONLINE" // Статус
}
]
}
```
### Статус сервисов
```json
{
"services": [
{"name": "pve-cluster", "active": true}, // Сервис кластера
{"name": "pvedaemon", "active": true}, // Демон Proxmox
{"name": "pveproxy", "active": true}, // Прокси Proxmox
{"name": "corosync", "active": true} // Corosync
]
}
```
### Информация о GPU
```json
{
"gpus": [
{
"index": 0, // Индекс GPU
"model": "NVIDIA GeForce RTX 4090", // Модель GPU
"memory_total_mb": 24576, // Общая память в МБ
"memory_used_mb": 8192, // Использованная память в МБ
"utilization_percent": 45.5, // Утилизация в процентах
"temperature_c": 65.0 // Температура в градусах Цельсия
}
]
}
```
## Конфигурация
### config.yaml
```yaml
collectors:
proxnode:
enabled: true
type: exec
key: proxnode
interval: "300s" # 5 минут
timeout: "30s"
exec: "./collectors/proxnode"
platforms: [linux]
```
### Переменные окружения
- `COLLECTOR_TIMEOUT`: Таймаут выполнения коллектора (по умолчанию 30s)
## Требования
### Системные требования
- Proxmox VE нода
- Доступ к файлам конфигурации:
- `/etc/corosync/corosync.conf` (основной)
- `/etc/pve/corosync.conf` (альтернативный)
- `/var/lib/pve-cluster/corosync.conf` (альтернативный)
### Команды
Коллектор использует следующие команды (должны быть доступны):
- `pveversion` - версия Proxmox VE
- `systemctl` - управление сервисами
- `ps` - список процессов
- `getent` - разрешение имен хостов
- `nvidia-smi` - информация о NVIDIA GPU
- `lspci` - информация о PCI устройствах (для AMD/Intel GPU)
- `df` - информация о дисках
- `cat /proc/loadavg` - средняя нагрузка
- `cat /proc/meminfo` - информация о памяти
- `cat /proc/stat` - статистика CPU
- `cat /proc/uptime` - время работы системы
## Уникальные идентификаторы
### node_uid
Генерируется на основе:
- `cluster_uuid` кластера
- `node_id` ноды
Формула: `SHA256(cluster_uuid + ":" + node_id)[:16]` (первые 16 символов SHA256 хеша)
### cluster_id
Генерируется на основе:
- `cluster_name` из corosync.conf
- `cluster_uuid` из corosync.conf
Формула: `SHA256(cluster_name + ":" + cluster_uuid)[:16]` (первые 16 символов SHA256 хеша)
Это обеспечивает уникальность идентификаторов для каждого кластера и ноды, даже если имена совпадают.
## Примеры использования
### Проверка работы коллектора
```bash
# Запуск коллектора напрямую
./bin/agent/collectors/proxnode
# Запуск через агент
make run
```
### Фильтрация данных
```bash
# Основная информация о ноде
./bin/agent/collectors/proxnode | jq '.node_uid, .name, .ip'
# Информация об ОС
./bin/agent/collectors/proxnode | jq '.os'
# Информация о железе
./bin/agent/collectors/proxnode | jq '.hardware'
# Использование ресурсов
./bin/agent/collectors/proxnode | jq '.resources'
# Сетевая информация
./bin/agent/collectors/proxnode | jq '.network'
# Информация о дисках
./bin/agent/collectors/proxnode | jq '.disks'
# Статус сервисов
./bin/agent/collectors/proxnode | jq '.services'
# Информация о GPU
./bin/agent/collectors/proxnode | jq '.gpus'
# Только активные сервисы
./bin/agent/collectors/proxnode | jq '.services[] | select(.active == true)'
# Диски с высокой утилизацией (>80%)
./bin/agent/collectors/proxnode | jq '.disks[] | select((.used_gb / .size_gb * 100) > 80)'
```
## Устранение неполадок
### Частые проблемы
1. **"no cluster data found"**
- Проверьте, что система является Proxmox VE нодой
- Убедитесь в доступности файла corosync.conf
- Проверьте права доступа к файлам конфигурации
2. **"failed to parse corosync.conf"**
- Проверьте формат файла corosync.conf
- Убедитесь, что в файле есть cluster_name и cluster_uuid
3. **"cluster version not found"**
- Убедитесь, что установлен Proxmox VE
- Проверьте доступность команды pveversion
4. **Пустые данные о ресурсах**
- Проверьте доступность системных команд
- Убедитесь в правильности конфигурации системы
### Отладка
```bash
# Проверка доступности команд
which pveversion systemctl ps getent nvidia-smi lspci df
# Проверка файлов конфигурации
ls -la /etc/corosync/corosync.conf /etc/pve/corosync.conf
# Проверка статуса сервисов
systemctl status pve-cluster corosync pveproxy pvedaemon
# Проверка системных ресурсов
cat /proc/loadavg /proc/meminfo /proc/stat /proc/uptime
# Проверка дисков
df -h
# Проверка GPU
nvidia-smi
```
## Безопасность
- Коллектор требует права на чтение системных файлов конфигурации
- Не передает пароли или секретные ключи
- Собирает только публичную информацию о ноде
- Не выполняет привилегированные операции
## Производительность
- Время выполнения: ~5-15 секунд
- Интервал сбора: рекомендуется 5 минут (300s)
- Потребление ресурсов: минимальное
- Собирает только локальную информацию о ноде
## Совместимость
- **Proxmox VE**: 6.0+
- **Ноды**: все типы нод Proxmox VE
- **Диски**: все типы устройств (sda, nvme, vda и др.)
- **Сети**: все типы интерфейсов (eth, ens, enp, vmbr и др.)
- **GPU**: NVIDIA (через nvidia-smi), AMD/Intel (через lspci)