Backend
October 11, 2023

Мониторинг приложений: введение в Prometheus и Grafana

Поговорим о том, как отслеживать работу приложений и сайтов, чтобы всё было стабильно и без сбоев.

Итак, мониторинг приложений - зачем это нужно? Представь, у тебя есть серьезный сайт или приложение, которым пользуются тысячи людей. И вдруг на сайте что-то ломается или приложение начинает тупить и вылетать. Ты же не хочешь, чтобы пользователи ругались и уходили? Конечно нет! А мониторинг как раз и помогает следить за всеми процессами и быстро узнавать о проблемах.

Для мониторинга есть специальные инструменты. Одними из них являются Prometheus и Grafana. Давай разберёмся, что они из себя представляют.

Prometheus - это программа, которая собирает данные о работе приложений и сайтов. Она следит за всеми процессами и записывает, если где-то возникают ошибки или задержки.

Чтобы запустить Prometheus, нужно прописать для него специальную конфигурацию.

Вот пример кода:

global:
  scrape_interval: 15s 
scrape_configs:
  - job_name: 'prometheus'
    static_configs:
      - targets: ['localhost:9090']

Здесь мы указываем, что Prometheus будет собирать данные каждые 15 секунд. И будет следить за приложением на локальном сервере по адресу localhost:9090.

Grafana - это дашборд с графиками и диаграммами. Сюда поступают данные из Prometheus и отображаются в виде графиков. Это помогает визуально следить за состоянием системы.

Для установки Grafana тоже нужна небольшая настройка:

[server]
root_url = http://localhost:3000

[auth.anonymous]
enabled = true

[auth.basic]
enabled = false

Здесь мы запускаем Grafana на локальном сервере по адресу 3000. И разрешаем доступ без авторизации для простоты.

Теперь Grafana и Prometheus нужно "познакомить", чтобы данные передавались. Это делается так:

В настройках Grafana прописываем адрес Prometheus:

instance_name: 'prometheus'

datasources:
  - name: 'prometheus' 
    type: 'prometheus'
    access: 'proxy'
    url: 'http://localhost:9090'

Вуаля, теперь они друг друга видят! Данные из Prometheus будут поступать в Grafana.

Пришло время нарисовать графики и посмотреть, как оно работает. В Grafana есть специальный редактор, где можно создавать дашборды.

Допустим, мы хотим следить за количеством запросов к нашему сайту. В редакторе выбираем тип визуализации Graph (график).

И в поле Query прописываем запрос к Prometheus:

rate(myapp_requests_total[5m])

Это будет отображать количество запросов за последние 5 минут. Нажимаем Save и смотрим результат!

Можно добавить много других полезных графиков: по CPU, памяти, ошибкам и т.д. Главное правильно составить запросы к данным.

А теперь самое вкусное - алерты! Это уведомления, которые срабатывают при проблемах. Например, можно настроить оповещение в Slack или Telegram, если сайт простаивает дольше 10 секунд.

В Prometheus это выглядит так:

alert: HighLatency
expr: job:request_latency_seconds:mean5m{job="myapp"} > 0.1
for: 10m

receivers:
- slack

Здесь мы говорим - если время ответа больше 0.1 секунды в течение 10 минут, отправить алерт. Ресивер slack означает, что алерт придёт в Slack.

Аналогично можно настроить алерты и в самой Grafana в разделе Alerting.

Вот вкратце как это всё работает. На практике конечно нужно разобраться в деталях подробнее, но общая суть, надеюсь понятна.