Мониторинг состояния сервисов в Prometheus/grafana

Мониторинг состояния сервисов в Prometheus/grafana

Dmitry Bubnov

Часто хочется видеть состояние служб, запущенных в системе и получать своевременные уведомления о проблемах с ними. Попробуем реализовать это с помощью стека Prometheus/Grafana

восемь шакалов из десяти


В статье рассмотрим:

  • Сбор данных с node_exporter
  • Изменение отображения метрик
  • Выборка нужной информации из всех собранных данных
  • Немного PromQL - язык запросов Prometheus
  • Визуализация данных в Grafana

Я уже пытался писать о стеке prometheus/grafana. Надеюсь, этот пост станет достойным продолжением эпопеи про мониторинг.


Будем считать, что Prometheus/Grafana/Node-exporter уже работает. Если ещё не работает - воспользуйтесь моим плэйбуком.

Node exporter экспортирует состояние всех служб в параметре node_systemd_unit_state.

Выборка нужной информации из всех собранных данных

В качестве даных увидим что-то вроде node_systemd_unit_state{name="nginx.service", instance="10.0.0.1", status="active"}. Видеть всю эту строку в мониторинге не нужно и часто это только сбивает с толку. Нам ведь нужны только имя сервиса и его состояние.

За подписи данных отвечает параметр Legend под строкой запроса. Туда можно вписать что угодно и это будет отображаться в легенде. Воспользуемся переменной name, в которой указано имя нашего сервиса. Если сразу после изменения данные на графике не изменились - нажмите значок глаза над запросом - там, где стрелки и корзинка. Обратите внимание, что переменная должна быть в фигурных скобках: {{name}}


Видеть состояние всех служб нужно не часто. Будем наблюдать только за важными нам сервисами. Для этого отфильтруем запрос по конкретным службам:

node_systemd_unit_state{name=~"(nginx.service|rabbitmq-server.service|memcached.service)"}
Запрос в Grafana. На этом этапе у вас будет график, моя картинка с шага позже

В параметре name указаны службы, за которыми будем наблюдать. Знак =~ означает выбор значений по регулярному выражению. Дальше в скобках перечислены службы, разделенные знаком | что означает ИЛИ. Теперь будем наблюдать только за нужными сервисами.

В параметрах есть ещё одно поле state - оно отвечает за состояние сервиса. нам интересны только активные, поэтому его значение active. Дополнительно можно указать хост, с которого будем отображать данные на этой панели.


Визуализация данных в Grafana

По умолчанию Grafana отображает наши данные в виде графика. В случае со службами это визуально неудобно. Поэтому будем показывать данные в виде таблицы.


Парметры отображения

Для этого в раздел Visualization и выбираем таблицу. В Data указываем какие данные будем использовать для отображения. Нам нужно Time Series Aggregation - аггрегированные данные. В Columns выбираем Current - то есть последнее полученное значение. Мы ведь хотим знать актуальное состояние службы, а не средние данные за последний час. Сейчас уже можно видеть как преобразилось отображение данных.


Сейчас в таблице должно быть две колонки - Metric и Current, в которых описаны названия метрики и её значения. Current не очень понятно описывает колонку. Переименуем её.

В разделе Column Styles выбираем в Apply to columns named: Current, меняем Column Header на State. Ну теперь то точно понятно =)

И покрасим рабочие службы зеленым, а нерабочие красным. Для этого есть параметр Threshold, где выставляются критические и приемлемые значения метрик. В нашем случае 0 - не работает, 1 - работает. Поэтому всё, что выше 0 будем считать рабочим и красить зеленым, а все, что ниже 0,1 нерабочим. Пример можно увидеть на картинке.


Должно получиться что-то опхожее на первую картинку в этом посте. Об уведомлениях напишу в следующий раз. Здесь просто скажу, что Grafana сама умеет реагировать на изменения и слать алерты на почту, Telegram, Slack и в другие каналы. Но у grafana это реализовано не очень удобно, поэтому все цивилизованное человечество применяет AlertManager и различные плагины к нему.


Пост написан на коленке в час ночи. Ничего сложного в grafana нет, надеюсь этот пост доказал это вам. Ставьте систему мониторинга, экспериментируйте с отображением даных, изучайте PromQL. Всё это позволит вам создать мощную, удобную и красивую систему мониторинга!

Всем добра, да пребудет с нами АДСМ