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

12 KiB
Raw Permalink Blame History

Коллектор system

Автор: Сергей Антропов
Сайт: https://devops.org.ru

Описание

Коллектор system собирает базовые системные метрики Linux системы, включая информацию о CPU, памяти, сетевых интерфейсах, дисках, синхронизации времени и доступных обновлениях. Предоставляет комплексный обзор состояния системы.

Поддерживаемые платформы

  • Linux: Полная поддержка
  • macOS/Windows: Не поддерживается (возвращает пустой JSON)

Собираемые данные

Информация о CPU

{
  "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)

{
  "ram": {
    "total_mb": 16384,                       // Общая память в МБ
    "used_mb": 8192,                         // Использованная память в МБ
    "free_mb": 8192,                         // Свободная память в МБ
    "available_mb": 10240,                   // Доступная память в МБ
    "cached_mb": 2048,                       // Кэшированная память в МБ
    "buffers_mb": 512,                       // Буферы в МБ
    "usage_percent": 50.0                    // Использование памяти в процентах
  }
}

Информация о swap

{
  "swap": {
    "total_mb": 2048,                        // Общий размер swap в МБ
    "used_mb": 256,                          // Использованный swap в МБ
    "free_mb": 1792,                         // Свободный swap в МБ
    "usage_percent": 12.5                    // Использование swap в процентах
  }
}

Сетевые интерфейсы

{
  "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"
    }
  ]
}

Информация о дисках

{
  "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
    }
  ]
}

Синхронизация времени

{
  "time_sync": {
    "ntp_synchronized": true,                // Синхронизирован ли NTP
    "ntp_service": "systemd-timesyncd",      // Сервис NTP
    "ntp_status": "active",                  // Статус сервиса NTP
    "timezone": "Europe/Moscow",             // Часовой пояс
    "drift_seconds": 0.001                   // Дрейф времени в секундах
  }
}

Доступные обновления

{
  "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

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)

Примеры использования

Проверка работы коллектора

# Запуск коллектора напрямую
./bin/agent/collectors/system

# Запуск через агент
make run

Фильтрация данных

# Информация о 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. Пустые данные об обновлениях

    • Проверьте доступность менеджера пакетов
    • Убедитесь в правильности прав доступа

Отладка

# Проверка доступности файлов
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.)