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

358 lines
12 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.

# Коллектор system
**Автор:** Сергей Антропов
**Сайт:** https://devops.org.ru
## Описание
Коллектор `system` собирает базовые системные метрики Linux системы, включая информацию о CPU, памяти, сетевых интерфейсах, дисках, синхронизации времени и доступных обновлениях. Предоставляет комплексный обзор состояния системы.
## Поддерживаемые платформы
- **Linux**: Полная поддержка
- **macOS/Windows**: Не поддерживается (возвращает пустой JSON)
## Собираемые данные
### Информация о CPU
```json
{
"cpu": {
"usage_percent": 25.3, // Использование CPU в процентах
"load_avg": { // Средняя нагрузка системы
"1min": 0.52, // Загрузка за 1 минуту
"5min": 0.61, // Загрузка за 5 минут
"15min": 0.72 // Загрузка за 15 минут
},
"cores": 8, // Количество ядер CPU
"model": "Intel(R) Core(TM) i7-8700K CPU @ 3.70GHz" // Модель процессора
}
}
```
### Информация о памяти (RAM)
```json
{
"ram": {
"total_mb": 16384, // Общая память в МБ
"used_mb": 8192, // Использованная память в МБ
"free_mb": 8192, // Свободная память в МБ
"available_mb": 10240, // Доступная память в МБ
"cached_mb": 2048, // Кэшированная память в МБ
"buffers_mb": 512, // Буферы в МБ
"usage_percent": 50.0 // Использование памяти в процентах
}
}
```
### Информация о swap
```json
{
"swap": {
"total_mb": 2048, // Общий размер swap в МБ
"used_mb": 256, // Использованный swap в МБ
"free_mb": 1792, // Свободный swap в МБ
"usage_percent": 12.5 // Использование swap в процентах
}
}
```
### Сетевые интерфейсы
```json
{
"network": [
{
"interface": "eth0", // Имя интерфейса
"rx_bytes": 1234567890, // Принято байт
"tx_bytes": 9876543210, // Передано байт
"rx_packets": 1234567, // Принято пакетов
"tx_packets": 9876543, // Передано пакетов
"rx_errors": 0, // Ошибки приема
"tx_errors": 0, // Ошибки передачи
"rx_dropped": 0, // Отброшено при приеме
"tx_dropped": 0, // Отброшено при передаче
"speed_mbps": 1000, // Скорость в Мбит/с
"duplex": "full", // Дуплекс (full/half)
"status": "up" // Статус интерфейса
},
{
"interface": "lo",
"rx_bytes": 123456,
"tx_bytes": 123456,
"rx_packets": 1234,
"tx_packets": 1234,
"rx_errors": 0,
"tx_errors": 0,
"rx_dropped": 0,
"tx_dropped": 0,
"speed_mbps": 0,
"duplex": "unknown",
"status": "up"
}
]
}
```
### Информация о дисках
```json
{
"disks": [
{
"device": "/dev/sda", // Устройство
"mountpoint": "/", // Точка монтирования
"filesystem": "ext4", // Тип файловой системы
"total_gb": 100.0, // Общий размер в ГБ
"used_gb": 50.0, // Использовано в ГБ
"free_gb": 45.0, // Свободно в ГБ
"usage_percent": 52.6, // Использование в процентах
"inodes_total": 6553600, // Общее количество inode
"inodes_used": 3276800, // Использовано inode
"inodes_free": 3276800, // Свободно inode
"inodes_usage_percent": 50.0 // Использование inode в процентах
},
{
"device": "/dev/sdb",
"mountpoint": "/home",
"filesystem": "ext4",
"total_gb": 500.0,
"used_gb": 200.0,
"free_gb": 275.0,
"usage_percent": 42.1,
"inodes_total": 32768000,
"inodes_used": 16384000,
"inodes_free": 16384000,
"inodes_usage_percent": 50.0
}
]
}
```
### Синхронизация времени
```json
{
"time_sync": {
"ntp_synchronized": true, // Синхронизирован ли NTP
"ntp_service": "systemd-timesyncd", // Сервис NTP
"ntp_status": "active", // Статус сервиса NTP
"timezone": "Europe/Moscow", // Часовой пояс
"drift_seconds": 0.001 // Дрейф времени в секундах
}
}
```
### Доступные обновления
```json
{
"updates": {
"package_manager": "apt", // Менеджер пакетов
"updates_available": 15, // Количество доступных обновлений
"security_updates": 3, // Количество обновлений безопасности
"upgradeable_packages": [ // Список пакетов для обновления
{
"name": "linux-image-generic",
"current_version": "5.4.0-74.83",
"available_version": "5.4.0-74.84",
"is_security": true
},
{
"name": "openssl",
"current_version": "1.1.1f-1ubuntu2.13",
"available_version": "1.1.1f-1ubuntu2.14",
"is_security": true
}
]
}
}
```
## Конфигурация
### config.yaml
```yaml
collectors:
system:
enabled: true
type: exec
key: system
interval: "30s" # 30 секунд
timeout: "8s"
exec: "./collectors/system"
platforms: [linux]
```
### Переменные окружения
- `COLLECTOR_TIMEOUT`: Таймаут выполнения коллектора (по умолчанию 8s)
## Требования
### Системные требования
- Linux система
- Доступ к файлам `/proc/*`
- Права на чтение системной информации
### Команды
Коллектор использует следующие команды (должны быть доступны):
- `df` - информация о дисках
- `free` - информация о памяти
- `uptime` - время работы системы
- `systemctl` - управление сервисами (для NTP)
- `timedatectl` - управление временем
- `apt list --upgradable` - список обновлений (Ubuntu/Debian)
- `yum check-update` - список обновлений (RHEL/CentOS)
- `dnf check-update` - список обновлений (Fedora)
## Примеры использования
### Проверка работы коллектора
```bash
# Запуск коллектора напрямую
./bin/agent/collectors/system
# Запуск через агент
make run
```
### Фильтрация данных
```bash
# Информация о CPU
./bin/agent/collectors/system | jq '.cpu'
# Использование CPU
./bin/agent/collectors/system | jq '.cpu.usage_percent'
# Средняя нагрузка
./bin/agent/collectors/system | jq '.cpu.load_avg'
# Информация о памяти
./bin/agent/collectors/system | jq '.ram'
# Использование памяти
./bin/agent/collectors/system | jq '.ram.usage_percent'
# Информация о swap
./bin/agent/collectors/system | jq '.swap'
# Сетевые интерфейсы
./bin/agent/collectors/system | jq '.network'
# Трафик по интерфейсам
./bin/agent/collectors/system | jq '.network[] | {interface, rx_bytes, tx_bytes}'
# Информация о дисках
./bin/agent/collectors/system | jq '.disks'
# Диски с высокой утилизацией (>80%)
./bin/agent/collectors/system | jq '.disks[] | select(.usage_percent > 80)'
# Синхронизация времени
./bin/agent/collectors/system | jq '.time_sync'
# Доступные обновления
./bin/agent/collectors/system | jq '.updates'
# Количество обновлений
./bin/agent/collectors/system | jq '.updates.updates_available'
# Обновления безопасности
./bin/agent/collectors/system | jq '.updates.security_updates'
# Список пакетов для обновления
./bin/agent/collectors/system | jq '.updates.upgradeable_packages'
```
## Устранение неполадок
### Частые проблемы
1. **"no data"**
- Проверьте доступность файлов `/proc/*`
- Убедитесь в правильности прав доступа
- Проверьте доступность системных команд
2. **Пустые данные о CPU**
- Проверьте доступность `/proc/stat`
- Убедитесь в корректности формата файла
3. **Пустые данные о памяти**
- Проверьте доступность `/proc/meminfo`
- Убедитесь в корректности формата файла
4. **Пустые данные о сети**
- Проверьте доступность `/proc/net/dev`
- Убедитесь в корректности формата файла
5. **Пустые данные о дисках**
- Проверьте доступность команды `df`
- Убедитесь в правильности прав доступа
6. **Пустые данные об обновлениях**
- Проверьте доступность менеджера пакетов
- Убедитесь в правильности прав доступа
### Отладка
```bash
# Проверка доступности файлов
ls -la /proc/stat /proc/meminfo /proc/net/dev /proc/loadavg
# Проверка доступности команд
which df free uptime systemctl timedatectl
# Проверка информации о CPU
cat /proc/stat | head -1
# Проверка информации о памяти
cat /proc/meminfo | head -10
# Проверка сетевых интерфейсов
cat /proc/net/dev
# Проверка дисков
df -h
# Проверка времени
timedatectl status
# Проверка обновлений (Ubuntu/Debian)
apt list --upgradable
# Проверка обновлений (RHEL/CentOS)
yum check-update
```
## Безопасность
- Коллектор требует права на чтение системных файлов
- Не передает пароли или секретные ключи
- Собирает только публичную информацию о системе
- Не выполняет привилегированные операции
## Производительность
- Время выполнения: ~2-8 секунд
- Интервал сбора: рекомендуется 30 секунд
- Потребление ресурсов: минимальное
- Собирает только локальную информацию о системе
## Совместимость
- **Linux**: все дистрибутивы
- **Файловые системы**: ext4, xfs, btrfs, zfs и др.
- **Менеджеры пакетов**: apt, yum, dnf, pacman и др.
- **Сетевые интерфейсы**: eth, ens, enp, wlan и др.
- **CPU**: все архитектуры (x86_64, ARM, etc.)