Всем привет! На связи Ситуационный Центр Московской биржи. Сегодня мы расскажем, как наводили красоту и удобство в процессе интеграции Zabbix с новым корпоративным мессенджером eXpress, и покажем, как сделать так же (или еще лучше).
1. Дано
В конце 2023го года в рамках работ по импортозамещению основным корпоративным мессенджером Московской Биржи вместо MS Teams стал eXpress.
На корпоративный мессенджер завязано множество интеграций и рабочих процессов, в частности - интеграция системы мониторинга Zabbix Ситуационного Центра. С помощью этой интеграции мы имели возможность оповещать инженеров в чатах о возникновении и устранении событий с помощью бота.
Перед командой Ситуационного Центра Московской Биржи встала задача: перенести все настроенные интеграции, рабочие процессы и оповещения Zabbix в eXpress
2. Первый подход
Мы решили не придумывать велосипед и воспользоваться самым простым и очевидным решением:
Создали чаты по каждой из систем
Добавили в эти чаты заинтересованных инженеров
Добавили в чаты бота
Настроили бота писать сообщения по событиям разных систем в разные чаты
Выглядело это примерно так (верхнее сообщение - событие произошло, нижнее событие - событие устранено
![Пример сообщений в чате eXpress Пример сообщений в чате eXpress](https://habrastorage.org/getpro/habr/upload_files/f4f/d6a/991/f4fd6a991fc1d764ef5bd5ad028f543c.png)
Технически - задача решена, интеграция работает, инженеры оповещаются. Но что-то было не так..
3. Что было не так
Основная проблема такого подхода - полное отсутствие читаемости и наглядности.
Сложно сходу понять приоритет события.
Сложно понять, какие события уже устранены, а какие нет
Для решения этих проблем мы немного поковырялись в шаблонах и пришли к новому виду оповещений.
4. Как стало
В новом шаблоне оповещений полностью изменился формат сообщений.
Появился цветовой индикатор статуса события (зеленый - хорошо, красный - плохо), который меняется при изменении статуса в заббикс.
Использована маркдаун маркировка
Добавлен цветовой индикатор приоритета события
Получили:
При возникновении события:
![Сообщение о возникновении события по новому шаблону Сообщение о возникновении события по новому шаблону](https://habrastorage.org/getpro/habr/upload_files/72d/8d1/22f/72d8d122fe534eed0af8c99d7259125e.png)
При решении редактируется сообщение. Меняется цветовой индикатор, добавляется строка с информацией о времени решения
![Сообщение об устранении события по новому шаблону Сообщение об устранении события по новому шаблону](https://habrastorage.org/getpro/habr/upload_files/e05/13d/1bb/e0513d1bb1a24f8f5076c51c42af49d4.png)
5. Почему это хорошо
Плюсы такого шаблона сообщений понятны:
Повышена читаемость - сразу виден статус события, его описание, приоритет
меньше спама - вместо повторного сообщения о восстановлении редактируется исходное сообщение и меняется статус с красного на зеленый
6. Как сделать так же
6.1. Изменить скрипт отправки
· Изменить метод с reply на edit
Метод отправки уже добавляет тег с ключом сообщения для того, чтобы отправлять ответное сообщение при восстановлении проблемы. Все, что нужно для того, чтобы менять текст оригинального сообщения - endpoint для ответного сообщения
//Было
url = 'api/v3/botx/events/reply_event';
//Стало
url = 'api/v3/botx/events/edit_event';
· Добавить цветовые индикаторы в тело скрипта
Добавление цветовых индикаторов несколько неочевидно. Если попробовать добавить их в шаблон сообщения, то получим ошибку. Zabbix не может сохранить эмоджи в шаблон сообщения. Однако может сохранить их в скрипте отправки. Для добавления индикатора состояния достаточно просто отправлять его вместе с сообщением
if (is_problem) {
data = {
group_chat_id: Express.params.send_to,
notification: {
status: 'ok',
body: "?"+message //Отправится при возникновении проблемы
}
};
url = 'api/v4/botx/notifications/direct';
}
else {
data = {
payload:{
body: "?"+message //Отправится при решении проблемы
}
};
url = 'api/v3/botx/events/edit_event';
Для добавления маркировки статусов потребуется немного больше изменений. Нам необходимо создать свой макрос в шаблоне сообщения и заменять его на соответствующий статус перед отправкой. Для этого сперва добавляем приоритет события в параметры скрипта макросом {EVENT.NSEVERITY}, а в шаблоне сообщения заменяем приоритет уникальной строкой Severity: {event_sever}. После чего мы можем подставить нужное нам значение в скрипте
postMessage: function (is_problem,event_sever) {
var message = Express.params.message
var sever = ["◻Not classified","?Information","?Warning","?Average","?High","?Disaster"]
message = message.replace("{event_sever}",sever[event_sever])
6.2. Собрать новый шаблон сообщения
Шаблон сообщения с маркировкой
Событие произошло:
**{EVENT.NAME}**
* Started at {EVENT.TIME}
* Host: {HOST.NAME}
* Severity: {event_sever}
* Operational data: {EVENT.OPDATA}
* Description:
{TRIGGER.DESCRIPTION}
* Event info: [Zabbix](http://zabbix.com/zabbix/tr_events.php?triggerid={TRIGGER.ID}&eventid={EVENT.ID})
Событие устранено:
**{EVENT.NAME}**
* Started at {EVENT.TIME}
* Host: {HOST.NAME}
* Severity: {event_sever}
* Operational data: {EVENT.OPDATA}
* Description:
{TRIGGER.DESCRIPTION}
* Event info: [Zabbix](http://zabbix.com/zabbix/tr_events.php?triggerid={TRIGGER.ID}&eventid={EVENT.ID})
7. Заключение / Выводы
Новый вид оповещений помогает нашим инженерам быстрее и точнее обрабатывать события. Мы продолжаем изучать возможности интеграции между Zabbix и eXpress для еще большего упрощения процесса и обязательно вернемся к вам с новостями.
Спасибо за внимание!
olku
А государственной организации можно импортировать софт недружественных стран? @alexvl