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

298 lines
9.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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