- Добавлен новый коллектор 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
9.7 KiB
9.7 KiB
Коллектор docker
Автор: Сергей Антропов
Сайт: https://devops.org.ru
Описание
Коллектор docker
собирает информацию о Docker контейнерах, сетях, томах и версиях Docker. Предоставляет детальную информацию о состоянии Docker окружения.
Поддерживаемые платформы
- Linux: Полная поддержка
- macOS: Базовая поддержка
- Windows: Не поддерживается (возвращает пустой JSON)
Собираемые данные
Информация о версии Docker
{
"docker_version": {
"version": "24.0.7", // Версия Docker
"api_version": "1.43", // Версия API
"go_version": "go1.20.10", // Версия Go
"git_commit": "afdd53b", // Git commit
"build_time": "2023-10-25T18:00:00.000000000+00:00", // Время сборки
"os": "linux", // Операционная система
"arch": "amd64" // Архитектура
}
}
Информация о контейнерах
{
"containers": [
{
"id": "a1b2c3d4e5f6", // ID контейнера
"name": "web-server", // Имя контейнера
"image": "nginx:latest", // Образ
"status": "running", // Статус (running, stopped, paused)
"state": "running", // Состояние
"created": "2024-01-01T12:00:00Z", // Время создания
"started": "2024-01-01T12:00:00Z", // Время запуска
"ports": [ // Публичные порты
{
"private_port": 80,
"public_port": 8080,
"type": "tcp"
}
],
"mounts": [ // Точки монтирования
{
"source": "/host/path",
"destination": "/container/path",
"mode": "rw",
"type": "bind"
}
],
"networks": ["bridge"], // Сети
"labels": { // Метки
"com.example.service": "web"
},
"restart_policy": "unless-stopped", // Политика перезапуска
"cpu_usage": 25.5, // Использование CPU в процентах
"memory_usage_mb": 128, // Использование памяти в МБ
"memory_limit_mb": 512 // Лимит памяти в МБ
}
]
}
Информация о сетях
{
"networks": [
{
"id": "n1b2c3d4e5f6", // ID сети
"name": "bridge", // Имя сети
"driver": "bridge", // Драйвер сети
"scope": "local", // Область действия
"ipam": { // IP Address Management
"driver": "default",
"config": [
{
"subnet": "172.17.0.0/16",
"gateway": "172.17.0.1"
}
]
},
"containers": 3, // Количество контейнеров
"created": "2024-01-01T12:00:00Z" // Время создания
}
]
}
Информация о томах
{
"volumes": [
{
"name": "my-volume", // Имя тома
"driver": "local", // Драйвер тома
"mountpoint": "/var/lib/docker/volumes/my-volume/_data", // Точка монтирования
"created": "2024-01-01T12:00:00Z", // Время создания
"labels": { // Метки
"com.example.volume": "data"
},
"size_bytes": 1073741824, // Размер в байтах
"containers": 2 // Количество контейнеров
}
]
}
Статистика Docker
{
"stats": {
"containers_total": 5, // Общее количество контейнеров
"containers_running": 3, // Запущенные контейнеры
"containers_stopped": 2, // Остановленные контейнеры
"images_total": 15, // Общее количество образов
"networks_total": 3, // Общее количество сетей
"volumes_total": 5, // Общее количество томов
"total_cpu_usage": 45.2, // Общее использование CPU
"total_memory_usage_mb": 1024, // Общее использование памяти в МБ
"total_memory_limit_mb": 2048 // Общий лимит памяти в МБ
}
}
Конфигурация
config.yaml
collectors:
docker:
enabled: true
type: exec
key: docker
interval: "60s" # 1 минута
timeout: "8s"
exec: "./collectors/docker"
platforms: [linux, darwin]
Переменные окружения
COLLECTOR_TIMEOUT
: Таймаут выполнения коллектора (по умолчанию 8s)
Требования
Системные требования
- Docker Engine
- Доступ к Docker API
- Права на выполнение Docker команд
Команды
Коллектор использует следующие команды (должны быть доступны):
docker
- основная команда Dockerdocker version
- версия Dockerdocker ps
- список контейнеровdocker images
- список образовdocker network ls
- список сетейdocker volume ls
- список томовdocker stats
- статистика контейнеров
Примеры использования
Проверка работы коллектора
# Запуск коллектора напрямую
./bin/agent/collectors/docker
# Запуск через агент
make run
Фильтрация данных
# Версия Docker
./bin/agent/collectors/docker | jq '.docker_version'
# Все контейнеры
./bin/agent/collectors/docker | jq '.containers'
# Только запущенные контейнеры
./bin/agent/collectors/docker | jq '.containers[] | select(.status == "running")'
# Контейнеры с высоким использованием CPU (>50%)
./bin/agent/collectors/docker | jq '.containers[] | select(.cpu_usage > 50)'
# Контейнеры с высоким использованием памяти (>500MB)
./bin/agent/collectors/docker | jq '.containers[] | select(.memory_usage_mb > 500)'
# Сети
./bin/agent/collectors/docker | jq '.networks'
# Тома
./bin/agent/collectors/docker | jq '.volumes'
# Статистика
./bin/agent/collectors/docker | jq '.stats'
# Общее количество контейнеров
./bin/agent/collectors/docker | jq '.stats.containers_total'
# Общее использование CPU
./bin/agent/collectors/docker | jq '.stats.total_cpu_usage'
# Общее использование памяти
./bin/agent/collectors/docker | jq '.stats.total_memory_usage_mb'
Устранение неполадок
Частые проблемы
-
"Docker not found"
- Убедитесь, что Docker установлен
- Проверьте доступность команды
docker
- Убедитесь, что Docker daemon запущен
-
"Permission denied"
- Добавьте пользователя в группу
docker
- Или запустите с правами
sudo
- Добавьте пользователя в группу
-
"Cannot connect to Docker daemon"
- Проверьте статус Docker daemon
- Убедитесь, что Docker socket доступен
-
Пустые данные о контейнерах
- Проверьте права доступа к Docker API
- Убедитесь в корректности конфигурации Docker
Отладка
# Проверка установки Docker
docker --version
# Проверка статуса Docker daemon
systemctl status docker
# Проверка доступности Docker API
docker info
# Проверка контейнеров
docker ps -a
# Проверка образов
docker images
# Проверка сетей
docker network ls
# Проверка томов
docker volume ls
# Проверка статистики
docker stats --no-stream
Безопасность
- Коллектор требует права на доступ к Docker API
- Не передает пароли или секретные ключи
- Собирает только публичную информацию о контейнерах
- Не выполняет привилегированные операции
Производительность
- Время выполнения: ~2-8 секунд
- Интервал сбора: рекомендуется 1 минута (60s)
- Потребление ресурсов: минимальное
- Собирает только локальную информацию о Docker
Совместимость
- Docker: 20.0+
- Платформы: Linux, macOS
- Архитектуры: x86_64, ARM64
- Сети: bridge, overlay, macvlan и др.
- Тома: local, nfs, cifs и др.