Делаем нотификации графаны снова читаемыми

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Что можно сказать про оповещения о проблемах в графане? Ну разве что то, что они есть. Не могу сказать, что они мне действительно нравились, но они были недостаточно плохими для того, чтобы заняться их кастомизацией.

Но после обновления графаны до девятой версии всё изменилось. Я обнаружил, что сообщения превратились в малочитаемые простыни (на картинке слева):

Потратив некоторое время на поиск в гугле и чтение документации, я узнал, что теперь в графане по умолчанию используется новая подсистема unified alerting (оно же ngalert, оно же с недавних пор просто alerting). Для каждого канала нотификации можно установить свой шаблон сообщений. Для описания шаблонов используется Go Template, в документации описаны доступные из темплейта данные и функции, в исходниках есть стандартный шаблон. В общем, информации для создания своего шаблона вполне достаточно.

После некоторых экспериментов у меня получился вот такой вариант:

{{ define "tgshortbody" }}{{ range . }} <b>{{ or .Annotations.message .Labels.alertname }}</b>
{{ range .Annotations.SortedPairs }}{{ if ne .Name "message" }}{{ .Name }}: {{ .Value }}
{{ end }}{{ end }}
{{ with .ValueString }}{{ reReplaceAll "[[][^]]*metric='{?([^}']*)}?'[^]]*value=([0-9]*([.][0-9]{,3})?)[^]]*](, )?" "$1: <b>$2</b>\n" . }}
{{ end }}{{ with .PanelURL }}<a href="{{ . }}">Chart</a> {{ end }}{{ with .DashboardURL }}@<a href="{{ . }}">Dashboard</a> {{ end }}{{ with .GeneratorURL }} <a href="{{ . }}">Edit</a> {{ end }}{{ with .SilenceURL }} <a href="{{ . }}">Mute</a> {{ end }}
{{ end }}{{ end }}
{{ define "tgshort" }}{{ with .Alerts.Firing }}⚠️{{ template "tgshortbody" . }}{{ end }}{{ with .Alerts.Resolved }}✅{{ template "tgshortbody" . }}{{ end }}{{ end }}

Как видите, всего несколько строчек. Самым сложным оказалось тут переделать ValueString из нечитаемого нечто наподобие [ var='B0' metric='Zombie' labels={} value=10.85 ] в что-то, похожее на выдававшееся старой графаной. Так как это строка, пришлось воспользоваться чёрной магией регулярных выражений. Скажу честно, мне такое решение не нравится, слишком оно ненадёжное, да и нечитаемое, но особого выбора не было. FR на добавление нетекстового представления создал.

Небольшие пояснения по возможной адаптации шаблона: в шаблоне используются понимаемые телеграмом html-теги, возможно, для других каналов оповещения их придётся выкинуть или исправить. Тексты сообщений после обновления графаны у нас оказались в полеmessageаннотаций, поскольку лень — самое главное качество сисадмина, было решено это не менять.

Прописываются шаблоны в веб-интерфейсе графаны в разделе alerting/notifications: нажимаем «New template» и вводим новый шаблон.

Дальше на той же странице нужно для используемых каналов оповещений (contact points) указать, что будет использоваться наш шаблон: заходим в настройки нужного канала и прописываем там в в поле Message:

{{ template "tgshort" . }}

Ну вот и всё. Новый вариант сообщения можете видеть на КПДВ справа. Смайлик, увы, не идёт в комплекте с шаблоном.

P. S. идею использовать юникодные значки для отображения статуса сообщению подсмотрел на @HetznerStatusChannel. Очень удобно, даже не открывая телеграм видишь пришло сообщение о решении проблемы или о новой проблеме.

Источник: https://habr.com/ru/post/675548/


Интересные статьи

Интересные статьи

Привет! Для начала процитирую страницу из Википедии, да будет здоров Джимми Уэйлс и все редакторы, поддерживающие свободную энциклопедию. Согласно ней, индекс бигмака — это неофициальный ...
После десятилетий изменений и решения проблем многомиллиардный наследник телескопа Хаббла планируется запустить уже этой осенью Последние испытания солнечного щита телескопа Джеймса Уэ...
Привет! Вэтой статье я хотел бы расcказать, как можно было бы сделать свой RWMutex, но с возможностью по таймауту или по срабатыванию контекста пропустить блокировку. То есть реализоват...
Дмитрий Пялов — CTO (слева) и Антон Михайлов — сооснователь и креативный директор (справа) В стартовый набор Apple Arcade попала игра и русских разработчиков — первых и пока единственных. Ст...
Современные информационные системы достаточно сложны. Не в последнюю очередь их сложность обусловлена сложностью обрабатываемых в них данных. Сложность же данных зачастую заключается в многообра...