Skip to content

Лабораторная работа №11: Введение в мониторинг

Познакомиться с основами мониторинга, добавив в проект стек Prometheus + Grafana для сбора и визуализации метрик Docker-контейнеров.

Основные теоретические положения

Section titled “Основные теоретические положения”

Процесс сбора, анализа и визуализации данных о работе системы. Мониторинг позволяет отслеживать потребление ресурсов (CPU, RAM), анализировать производительность и быстро реагировать на проблемы.

Де-факто стандарт в мире облачного мониторинга. Это база данных временных рядов, которая работает по модели pull: Prometheus периодически опрашивает (scrape) специальные эндпоинты (/metrics) ваших сервисов и сохраняет полученные данные.

Ведущий инструмент для визуализации данных. Grafana позволяет создавать красивые и интерактивные дашборды (панели мониторинга), подключаясь к различным источникам данных, в первую очередь к Prometheus.

Чтобы Prometheus мог собирать метрики с сервисов, которые не умеют их отдавать “из коробки” (как Docker), используются программы-посредники — экспортеры. Мы будем использовать cAdvisor (Container Advisor) от Google, который собирает метрики о всех контейнерах на хосте и предоставляет их Prometheus.

Задания для выполнения

Section titled “Задания для выполнения”
  1. Обновление шаблона docker-compose.j2 (30 мин):

    • На Main-server откройте файл roles/ghost/templates/docker-compose.j2.
    • Добавьте в него три новых сервиса: prometheus, grafana и cadvisor. Добавляйте их в конец секции services.
      # ... конец секции services ...
      prometheus:
      image: prom/prometheus:v2.47.2
      container_name: prometheus
      volumes:
      - ./prometheus.yml:/etc/prometheus/prometheus.yml
      ports:
      - "9090:9090"
      networks:
      - ghost-net
      restart: unless-stopped
      grafana:
      image: grafana/grafana:10.2.0
      container_name: grafana
      ports:
      - "3000:3000"
      environment:
      - GF_SECURITY_ADMIN_PASSWORD={{ grafana_admin_password }}
      networks:
      - ghost-net
      restart: unless-stopped
      cadvisor:
      image: gcr.io/cadvisor/cadvisor:v0.47.2
      container_name: cadvisor
      volumes:
      - /:/rootfs:ro
      - /var/run:/var/run:rw
      - /sys:/sys:ro
      - /var/lib/docker/:/var/lib/docker:ro
      ports:
      - "8081:8080" # Меняем порт, чтобы не конфликтовать с Ghost
      networks:
      - ghost-net
      restart: unless-stopped
  2. Создание конфигурации Prometheus (20 мин):

    • На Main-server в директории roles/ghost/files/ создайте файл prometheus.yml. Этот файл говорит Prometheus, какие цели (targets) ему нужно опрашивать.
      roles/ghost/files/prometheus.yml
      global:
      scrape_interval: 15s
      scrape_configs:
      - job_name: 'cadvisor'
      static_configs:
      - targets: ['cadvisor:8080']
  3. Обновление роли ghost (20 мин):

    • Добавьте задачу копирования prometheus.yml в roles/ghost/tasks/main.yml.
      # ... в roles/ghost/tasks/main.yml, после копирования .env
      - name: Copy prometheus.yml to remote host
      copy:
      src: prometheus.yml
      dest: "{{ project_path }}/prometheus.yml"
    • Добавьте пароль для Grafana в site.yml в секцию vars для хоста web.
      # ... в site.yml
      - hosts: web
      become: yes
      vars:
      # ... старые переменные
      grafana_admin_password: "SuperStrongPassword123"
  4. Развертывание и настройка 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 введите ID 193 (популярный дашборд для Docker ).
      • Нажмите Load, затем выберите ваш источник данных Prometheus и нажмите Import.
    • Вы должны увидеть дашборд с метриками ваших контейнеров (CPU, память, сеть).
  1. Что такое мониторинг и зачем он нужен?
  2. В чем разница между Prometheus и Grafana?
  3. Что такое “экспортер” в экосистеме Prometheus и какую роль в нашей работе выполняет cAdvisor?
  4. Почему в URL для Prometheus внутри Grafana мы пишем http://prometheus:9090, а не IP-адрес?