Источники
Установка Grafana описана в данной статье.
Настройка связи с Telegram
К этому моменту предполагается, что вы уже создали бота через @BotFather
Переходим в Alerting
→ Contact points
(http://**grafana_host**/alerting/notifications
)
Создаем новый поинт:
- Contact point type –
Telegram
- BOT API Token – Узнаем у @BotFather
- Chat ID – Узнаем у этого или этого бота
Разворачиваем вкладку Optional Telegram settings
- Message –
{{ template "alert_list" . }}
- Parse Mode –
HTML
Настройка шаблона
Переходим в Alerting
→ Contact points
→ Notification Templates
→ + Add notification template
Далее нужно создать шаблон состоящий из 2 частей. alert_list
, на который сослались в настройках Contact points
. Эта часть будет описывать список (группу) алертов. И alert_template
, отвечающая за внешний вид самого алерта. Я приведу несколько вариантов шаблонов, и покажу какой результат вы получите.
Группировка алертов в списки настраивается в
Notification policies
. Там же можно найти настройки периодичности сообщений. Разные группы будут отправляться отдельными сообщениями.
Вариант 1
Начнем с очень распространенного шаблона, который можно встретить в интернете:
|
|
В некоторых статьях я видел советы разделять данный код на 2 шаблона. Это будет работать, однако при этом не получится полноценно пользоваться вкладкой Preview (Она будет выдавать ошибку при редактировании части alert_template
). Я советую все писать в одном шаблоне.
Стоит учитывать, что Grafana использует названия шаблонов указанное в теге {{ define "name" }}
. А поле Template name
только для пользователя.
Итоговый результат получился настолько крупным, что я решил скрыть его под спойлер:
Пример сообщения от Telegram бота
2 firing:
[firing] Temp
Labels:
alertname: Temp
device: aqara_zigbee_thermostat
devicename: bedroom_thermostat
grafana_folder: climate
host: hspc
sensor: WSDCGQ11LM
topic: pushinfluxdb/bedroom/thermostat
user: hspc
Silence alert: http://192.168.10.192:3000/alerting/silence/new?alertmanager=grafana&matcher=alertname%3DTemp&matcher=device%3Daqara_zigbee_thermostat&matcher=devicename%3Dbedroom_thermostat&matcher=grafana_folder%3Dclimate&matcher=host%3Dhspc&matcher=sensor%3DWSDCGQ11LM&matcher=topic%3Dpushinfluxdb%2Fbedroom%2Fthermostat&matcher=user%3Dhspc&orgId=1
Go to dashboard: http://192.168.10.192:3000/d/3zrU4gU7k?orgId=1
[firing] CO2
Labels:
alertname: CO2
device: esp32
devicename: aircheck
grafana_folder: climate
host: hspc
sensor: senseair
topic: pushinfluxdb/bedroom/co2
user: hspc
Silence alert: http://192.168.10.192:3000/alerting/silence/new?alertmanager=grafana&matcher=alertname%3DCO2&matcher=device%3Desp32&matcher=devicename%3Daircheck&matcher=grafana_folder%3Dclimate&matcher=host%3Dhspc&matcher=sensor%3Dsenseair&matcher=topic%3Dpushinfluxdb%2Fbedroom%2Fco2&matcher=user%3Dhspc&orgId=1
Go to dashboard: http://192.168.10.192:3000/d/3zrU4gU7k?orgId=1
Мне не нравится большое количество пустых строк, длинные ссылки и значения метрик.
Вариант 2
Скорректируем часть alert_template
следующим образом:
|
|
Пример сообщения от Telegram бота:
2 firing:
[firing] Temp
Metric: B: 64.8 C: 1
Labels:
alertname: Temp
device: aqara_zigbee_thermostat
devicename: bedroom_thermostat
grafana_folder: climate
host: hspc
sensor: WSDCGQ11LM
topic: pushinfluxdb/bedroom/thermostat
user: hspc
Annotations:
description: test description
summary: test summary
test_castom_annotation: text_castom_annotation
Silence alert
Go to dashboard
[firing] CO2
Metric: B: 1420 C: 1
Labels:
alertname: CO2
device: esp32
devicename: aircheck
grafana_folder: climate
host: hspc
sensor: senseair
topic: pushinfluxdb/bedroom/co2
user: hspc
Silence alert
Go to dashboard
Silence alert
и Go to dashboard
являются ссылками, и уже не занимают столько места. Нет лишних переносов строк. Labels
и Annotations
будут выделены жирным шрифтом. А так же, теперь видно значения метрик.
Добавление минусов убирает пробелы и пропуски строк. Их можно расположить как вначале {{-
, так и в конце тегов -}}
. Подробнее про оформление можно почитать в этой статье.
Результат уже значительно лучше, однако часть информации может быть лишней. Предлагаю рассмотреть вариант, с адресным обращением к лейблам.
Вариант 3
Снова редактируем лишь часть alert_template
. Выберем для вывода только ту информацию, что нам необходима. Поскольку алерты имеют разные поля данных, будем проверять их наличие. Во время редактирование шаблона советую подгрузить один из ваших алертов в поле Payload data
, нажав на кнопку Select alert instances
. Это отобразит все поля алерта, а так же сразу будет выводить итоговое* сообщение в окно Preview
. К сожалению подгрузить можно лишь сработавшие алерты. При необходимости, временно скорректируйте пороги алерта, чтобы заставить его сработать.
* – Во вкладке
Preview
не применяется html парсинг. Необработанные теги, это норма. Сообщение в telegram должно прийти уже отформатированным.
Дополнительно предлагаю окрасить сообщение с помощью эмодзи. Зеленым выделив Resolved, а красным Firing. А из метрик удалить все, кроме значения B
, так как именно она по умолчанию хранит проверяемое значение.
|
|
Пример сообщения от Telegram бота:
2 firing:
🟥 climate - Temp
Metric: 64.69
Host: hspc
Device name: bedroom_thermostat
Device: aqara_zigbee_thermostat
Annotations:
description: test description
summary: test summary
test_castom_annotation: text_castom_annotation
🟥 service - HDD6 Free Space
Metric: 130.95
Host: hspc
Device: sdc
Path: /media/hdd6
Итоговое сообщение достаточно компактно, для чтения на смартфоне, содержит только выбранную вами информацию и использует цветовые маркеры, которые так кринжово озвучивает Siri. Что еще нужно?
Надеюсь данная статья вам помогла. Всем красивых алертов, и чтоб побольше.