Мониторинг на 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.
Мониторингът е непрекъснат процес. Редовно преглеждайте метриките и оптимизирайте системата според нуждите на вашите приложения.
Благодарим ви за прочитането на статията! Ако намерихте информацията за полезна, можете да дарите посредством бутоните по-долу:
Donate ☕️ Дарете с PayPalDonate 💳 Дарете с Revolut