- Добавлен новый коллектор 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
298 lines
9.7 KiB
Markdown
298 lines
9.7 KiB
Markdown
# Коллектор 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 и др.
|