Лабораторная работа №11: Введение в мониторинг
Цель работы
Section titled “Цель работы”Познакомиться с основами мониторинга, добавив в проект стек Prometheus + Grafana для сбора и визуализации метрик Docker-контейнеров.
Основные теоретические положения
Section titled “Основные теоретические положения”1. Мониторинг
Section titled “1. Мониторинг”Процесс сбора, анализа и визуализации данных о работе системы. Мониторинг позволяет отслеживать потребление ресурсов (CPU, RAM), анализировать производительность и быстро реагировать на проблемы.
2. Prometheus
Section titled “2. Prometheus”Де-факто стандарт в мире облачного мониторинга. Это база данных временных рядов, которая работает по модели pull: Prometheus периодически опрашивает (scrape) специальные эндпоинты (/metrics) ваших сервисов и сохраняет полученные данные.
- Рекомендуемая литература: Prometheus Overview
3. Grafana
Section titled “3. Grafana”Ведущий инструмент для визуализации данных. Grafana позволяет создавать красивые и интерактивные дашборды (панели мониторинга), подключаясь к различным источникам данных, в первую очередь к Prometheus.
- Рекомендуемая литература: What is Grafana?
4. Экспортеры (Exporters)
Section titled “4. Экспортеры (Exporters)”Чтобы Prometheus мог собирать метрики с сервисов, которые не умеют их отдавать “из коробки” (как Docker), используются программы-посредники — экспортеры. Мы будем использовать cAdvisor (Container Advisor) от Google, который собирает метрики о всех контейнерах на хосте и предоставляет их Prometheus.
Задания для выполнения
Section titled “Задания для выполнения”-
Обновление шаблона
docker-compose.j2(30 мин):- На
Main-serverоткройте файлroles/ghost/templates/docker-compose.j2. - Добавьте в него три новых сервиса:
prometheus,grafanaиcadvisor. Добавляйте их в конец секцииservices.# ... конец секции services ...prometheus:image: prom/prometheus:v2.47.2container_name: prometheusvolumes:- ./prometheus.yml:/etc/prometheus/prometheus.ymlports:- "9090:9090"networks:- ghost-netrestart: unless-stoppedgrafana:image: grafana/grafana:10.2.0container_name: grafanaports:- "3000:3000"environment:- GF_SECURITY_ADMIN_PASSWORD={{ grafana_admin_password }}networks:- ghost-netrestart: unless-stoppedcadvisor:image: gcr.io/cadvisor/cadvisor:v0.47.2container_name: cadvisorvolumes:- /:/rootfs:ro- /var/run:/var/run:rw- /sys:/sys:ro- /var/lib/docker/:/var/lib/docker:roports:- "8081:8080" # Меняем порт, чтобы не конфликтовать с Ghostnetworks:- ghost-netrestart: unless-stopped
- На
-
Создание конфигурации Prometheus (20 мин):
- На
Main-serverв директорииroles/ghost/files/создайте файлprometheus.yml. Этот файл говорит Prometheus, какие цели (targets) ему нужно опрашивать.roles/ghost/files/prometheus.yml global:scrape_interval: 15sscrape_configs:- job_name: 'cadvisor'static_configs:- targets: ['cadvisor:8080']
- На
-
Обновление роли
ghost(20 мин):- Добавьте задачу копирования
prometheus.ymlвroles/ghost/tasks/main.yml.# ... в roles/ghost/tasks/main.yml, после копирования .env- name: Copy prometheus.yml to remote hostcopy:src: prometheus.ymldest: "{{ project_path }}/prometheus.yml" - Добавьте пароль для Grafana в
site.ymlв секциюvarsдля хостаweb.# ... в site.yml- hosts: webbecome: yesvars:# ... старые переменныеgrafana_admin_password: "SuperStrongPassword123"
- Добавьте задачу копирования
-
Развертывание и настройка Grafana (20 мин):
- Запустите главный плейбук
site.yml, чтобы развернуть стек мониторинга. - Откройте
http://<IP-Web-node>:3000— веб-интерфейс Grafana. Логин:admin, пароль:SuperStrongPassword123. - Добавьте источник данных:
- Перейдите в
Connections -> Data Sources -> Add new data source. - Выберите
Prometheus. - В поле
Prometheus server URLвведитеhttp://prometheus:9090. - Нажмите
Save & test. Должна появиться зеленая галочка.
- Перейдите в
- Импортируйте дашборд:
- Перейдите в
Dashboards -> New -> Import. - В поле
Import via grafana.comвведите ID193(популярный дашборд для Docker ). - Нажмите
Load, затем выберите ваш источник данных Prometheus и нажмитеImport.
- Перейдите в
- Вы должны увидеть дашборд с метриками ваших контейнеров (CPU, память, сеть).
- Запустите главный плейбук
Контрольные вопросы
Section titled “Контрольные вопросы”- Что такое мониторинг и зачем он нужен?
- В чем разница между Prometheus и Grafana?
- Что такое “экспортер” в экосистеме Prometheus и какую роль в нашей работе выполняет cAdvisor?
- Почему в URL для Prometheus внутри Grafana мы пишем
http://prometheus:9090, а не IP-адрес?