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