- Добавлен новый коллектор 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
12 KiB
12 KiB
Коллектор 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'
Устранение неполадок
Частые проблемы
-
"no data"
- Проверьте доступность файлов
/proc/*
- Убедитесь в правильности прав доступа
- Проверьте доступность системных команд
- Проверьте доступность файлов
-
Пустые данные о CPU
- Проверьте доступность
/proc/stat
- Убедитесь в корректности формата файла
- Проверьте доступность
-
Пустые данные о памяти
- Проверьте доступность
/proc/meminfo
- Убедитесь в корректности формата файла
- Проверьте доступность
-
Пустые данные о сети
- Проверьте доступность
/proc/net/dev
- Убедитесь в корректности формата файла
- Проверьте доступность
-
Пустые данные о дисках
- Проверьте доступность команды
df
- Убедитесь в правильности прав доступа
- Проверьте доступность команды
-
Пустые данные об обновлениях
- Проверьте доступность менеджера пакетов
- Убедитесь в правильности прав доступа
Отладка
# Проверка доступности файлов
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.)