Мониторинг приложений: введение в 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.
Вот вкратце как это всё работает. На практике конечно нужно разобраться в деталях подробнее, но общая суть, надеюсь понятна.