Sergey Antropoff 15e6260ac3 feat: добавлен коллектор proxvms и обновлена документация
- Добавлен новый коллектор 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
2025-09-15 12:47:44 +03:00

9.7 KiB
Raw Blame History

Коллектор 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 - основная команда Docker
  • docker version - версия Docker
  • docker 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'

Устранение неполадок

Частые проблемы

  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

Отладка

# Проверка установки 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 и др.