- Добавлен новый коллектор 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
321 lines
11 KiB
Markdown
321 lines
11 KiB
Markdown
# Коллектор 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)
|