# Коллектор docker **Автор:** Сергей Антропов **Сайт:** https://devops.org.ru ## Описание Коллектор `docker` собирает информацию о Docker контейнерах, сетях, томах и версиях Docker. Предоставляет детальную информацию о состоянии Docker окружения. ## Поддерживаемые платформы - **Linux**: Полная поддержка - **macOS**: Базовая поддержка - **Windows**: Не поддерживается (возвращает пустой JSON) ## Собираемые данные ### Информация о версии Docker ```json { "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" // Архитектура } } ``` ### Информация о контейнерах ```json { "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 // Лимит памяти в МБ } ] } ``` ### Информация о сетях ```json { "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" // Время создания } ] } ``` ### Информация о томах ```json { "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 ```json { "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 ```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` - основная команда Docker - `docker version` - версия Docker - `docker ps` - список контейнеров - `docker images` - список образов - `docker network ls` - список сетей - `docker volume ls` - список томов - `docker stats` - статистика контейнеров ## Примеры использования ### Проверка работы коллектора ```bash # Запуск коллектора напрямую ./bin/agent/collectors/docker # Запуск через агент make run ``` ### Фильтрация данных ```bash # Версия 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' ``` ## Устранение неполадок ### Частые проблемы 1. **"Docker not found"** - Убедитесь, что Docker установлен - Проверьте доступность команды `docker` - Убедитесь, что Docker daemon запущен 2. **"Permission denied"** - Добавьте пользователя в группу `docker` - Или запустите с правами `sudo` 3. **"Cannot connect to Docker daemon"** - Проверьте статус Docker daemon - Убедитесь, что Docker socket доступен 4. **Пустые данные о контейнерах** - Проверьте права доступа к Docker API - Убедитесь в корректности конфигурации Docker ### Отладка ```bash # Проверка установки 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 и др.