Мониторинг на Docker контейнерите с Prometheus и Grafana

Пълно ръководство стъпка по стъпка за начинаещи
Защо е важен мониторингът на контейнерите?
Когато работите с Docker контейнери в продукция, мониторингът е критично важен. Без него сте слепи за това какво се случва във вашите приложения.
Ето защо се нуждаете от мониторинг:
- Откриване на проблеми преди потребителите да ги забележат
- Проследяване на производителността и ресурсите
- Планиране на капацитета и скалиране
- Бърза диагностика при инциденти
Docker контейнери → cAdvisor → Prometheus → Grafana → Красиви графики
Какво ще инсталираме?
Prometheus
Prometheus е open-source система за мониторинг. Тя събира метрики от различни източници и ги съхранява в time-series база данни.
Grafana
Grafana е платформа за визуализация на данни. Създава красиви dashboard-ове с графики и табла в реално време.
cAdvisor
cAdvisor (Container Advisor) събира, агрегира и експортва информация за работещите контейнери. Това е нашият мост между Docker и Prometheus.
Стъпка 1: Подготовка на средата
Създаване на работна директория
Първо създайте директория за проекта и навигирайте в нея:
mkdir docker-monitoring cd docker-monitoring
Стъпка 2: Конфигурация на Prometheus
Създаване на prometheus.yml
Създайте файл prometheus.yml с конфигурацията на Prometheus:
global:
scrape_interval: 15s
evaluation_interval: 15s
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
- job_name: 'cadvisor'
static_configs:
- targets: ['cadvisor:8080']
- job_name: 'node-exporter'
static_configs:
- targets: ['node-exporter:9100']Стъпка 3: Docker Compose конфигурация
Създаване на docker-compose.yml
Създайте файл docker-compose.yml който ще orchestrira всички сервиси:
version: '3.8'
services:
prometheus:
image: prom/prometheus:latest
container_name: prometheus
ports:
- "9090:9090"
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
command:
- '--config.file=/etc/prometheus/prometheus.yml'
- '--storage.tsdb.path=/prometheus'
- '--web.console.libraries=/etc/prometheus/console_libraries'
- '--web.console.templates=/etc/prometheus/consoles'
- '--web.enable-lifecycle'
restart: unless-stopped
grafana:
image: grafana/grafana:latest
container_name: grafana
ports:
- "3000:3000"
environment:
- GF_SECURITY_ADMIN_PASSWORD=admin123
volumes:
- grafana-data:/var/lib/grafana
restart: unless-stopped
cadvisor:
image: gcr.io/cadvisor/cadvisor:latest
container_name: cadvisor
ports:
- "8080:8080"
volumes:
- /:/rootfs:ro
- /var/run:/var/run:ro
- /sys:/sys:ro
- /var/lib/docker/:/var/lib/docker:ro
- /dev/disk/:/dev/disk:ro
privileged: true
devices:
- /dev/kmsg
restart: unless-stopped
node-exporter:
image: prom/node-exporter:latest
container_name: node-exporter
ports:
- "9100:9100"
volumes:
- /proc:/host/proc:ro
- /sys:/host/sys:ro
- /:/rootfs:ro
command:
- '--path.procfs=/host/proc'
- '--path.sysfs=/host/sys'
- '--collector.filesystem.mount-points-exclude=^/(sys|proc|dev|host|etc)($$|/)'
restart: unless-stopped
# Примерно приложение за мониторинг
sample-app:
image: nginx:latest
container_name: sample-app
ports:
- "8081:80"
restart: unless-stopped
volumes:
grafana-data:Стъпка 4: Стартиране на системата
Пускане на всички сервиси
Стартирайте цялата система с една команда:
docker-compose up -d
Проверете дали всички контейнери работят:
docker-compose ps
Стъпка 5: Конфигуриране на Grafana
Първоначална настройка
Отворете браузъра и отидете на http://localhost:3000.
Логнете се с:
- Потребител: admin
- Парола: admin123
Добавяне на Prometheus като Data Source
След логин, следвайте тези стъпки:
- Отидете на "Configuration" → "Data Sources"
- Кликнете "Add data source"
- Изберете "Prometheus"
- В URL полето въведете: http://prometheus:9090
- Кликнете "Save & Test"
Стъпка 6: Създаване на Dashboard
Импортиране на готов dashboard
Най-лесният начин е да импортирате готов dashboard:
- Отидете на "+" → "Import"
- В полето "Import via grafana.com" въведете: 893
- Кликнете "Load"
- Изберете вашия Prometheus data source
- Кликнете "Import"
Създаване на собствен panel
Можете също да създадете собствен panel:
- Кликнете "Add panel"
- В Query полето въведете: rate(container_cpu_usage_seconds_total[1m])
- Настройте заглавието на "Container CPU Usage"
- Кликнете "Apply"
Стъпка 7: Полезни метрики и заявки
Ключови Prometheus заявки
Ето някои полезни PromQL заявки за мониторинг на контейнери:
CPU заявки
# CPU използване по контейнер (%)
rate(container_cpu_usage_seconds_total{name!=""}[1m]) * 100
# Топ 5 контейнера по CPU
topk(5, rate(container_cpu_usage_seconds_total{name!=""}[1m]))Памет заявки
# Използвана памет по контейнер (MB)
container_memory_usage_bytes{name!=""} / 1024 / 1024
# Процент използвана памет
(container_memory_usage_bytes{name!=""} / container_spec_memory_limit_bytes{name!=""}) * 100Мрежови метрики
# Мрежов трафик - получен
rate(container_network_receive_bytes_total{name!=""}[1m])
# Мрежов трафик - изпратен
rate(container_network_transmit_bytes_total{name!=""}[1m])Стъпка 8: Настройване на алерти
Създаване на basic алерти
В Grafana можете да настроите алерти за важни метрики:
Алерт за високо CPU използване
- Отворете панела за CPU използване
- Кликнете "Alert" таба
- Създайте правило: "WHEN max() OF query() IS ABOVE 80"
- Настройте notification channel
Стъпка 9: Тестване на системата
Генериране на натоварване
За да тествате мониторинга, можете да генерирате натоварване:
# Стартиране на контейнер с високо CPU използване docker run --rm -d --name cpu-stress alpine sh -c "while true; do :; done" # Спиране след няколко минути docker stop cpu-stress
Стартирайте няколко контейнера за тест:
# Различни тестови контейнери docker run -d --name test-nginx nginx:alpine docker run -d --name test-redis redis:alpine docker run -d --name test-postgres -e POSTGRES_PASSWORD=test postgres:alpine
Стъпка 10: Поддръжка и оптимизация
Best practices за продукция
Data retention
По подразбиране Prometheus пази данни 15 дни. За продукция настройте подходящ retention:
# Добавете към Prometheus командите в docker-compose.yml - '--storage.tsdb.retention.time=30d' - '--storage.tsdb.retention.size=10GB'
Security настройки
- Променете default паролата на Grafana
- Настройте reverse proxy с SSL
- Ограничете достъпа с firewall правила
- Използвайте authentication за Prometheus
Backup стратегия
# Backup на Grafana конфигурация docker exec grafana grafana-cli admin export-dashboard > dashboards-backup.json # Backup на Prometheus данни docker exec prometheus tar -czf /tmp/prometheus-backup.tar.gz /prometheus
Често срещани проблеми и решения
Prometheus не събира данни от cAdvisor
- Проверете дали cAdvisor контейнерът работи: docker-compose ps
- Тествайте директен достъп: curl http://localhost:8080/metrics
- Проверете мрежовите връзки между контейнерите
Grafana не може да се свърже с Prometheus
- Уверете се, че използвате правилния URL: http://prometheus:9090
- Проверете дали и двата контейнера са в същата мрежа
- Тествайте connectivity: docker exec grafana ping prometheus
Високо използване на дискова памет
- Намалете scrape интервала в prometheus.yml
- Настройте по-кратък retention период
- Използвайте по-специфични label селектори
Заключение
Честито! Сега имате пълноценна система за мониторинг на Docker контейнери.
Това setup ви дава възможност да:
- Проследявате performance на всички контейнери в реално време
- Получавате алерти при проблеми
- Анализирате trends и планирате капацитет
- Бързо диагностицирате проблеми
Следващи стъпки: Експериментирайте с различни dashboard-ове, настройте алерти за вашите специфични нужди и разгледайте advanced функции като service discovery и federation.
Мониторингът е непрекъснат процес. Редовно преглеждайте метриките и оптимизирайте системата според нуждите на вашите приложения.


Един коментар
Коментарите са изключени.