# Коллектор 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.)