Всем привет! На связи Ситуационный Центр Московской биржи. Сегодня мы расскажем, как наводили красоту и удобство в процессе интеграции Zabbix с новым корпоративным мессенджером eXpress, и покажем, как сделать так же (или еще лучше).

1. Дано

В конце 2023го года в рамках работ по импортозамещению основным корпоративным мессенджером Московской Биржи вместо MS Teams стал eXpress.

На корпоративный мессенджер завязано множество интеграций и рабочих процессов, в частности - интеграция системы мониторинга Zabbix Ситуационного Центра. С помощью этой интеграции мы имели возможность оповещать инженеров в чатах о возникновении и устранении событий с помощью бота.

Перед командой Ситуационного Центра Московской Биржи встала задача: перенести все настроенные интеграции, рабочие процессы и оповещения Zabbix в eXpress

2. Первый подход

Мы решили не придумывать велосипед и воспользоваться самым простым и очевидным решением:

  • Создали чаты по каждой из систем

  • Добавили в эти чаты заинтересованных инженеров

  • Добавили в чаты бота 

  • Настроили бота писать сообщения по событиям разных систем в разные чаты

 

Выглядело это примерно так (верхнее сообщение - событие произошло, нижнее событие - событие устранено

Пример сообщений в чате eXpress
Пример сообщений в чате eXpress

Технически - задача решена, интеграция работает, инженеры оповещаются. Но что-то было не так..

3. Что было не так

Основная проблема такого подхода - полное отсутствие читаемости и наглядности.

Сложно сходу понять приоритет события.

Сложно понять, какие события уже устранены, а какие нет

Для решения этих проблем мы немного поковырялись в шаблонах и пришли к новому виду оповещений.

4. Как стало

В новом шаблоне оповещений полностью изменился формат сообщений.

  • Появился цветовой индикатор статуса события (зеленый - хорошо, красный - плохо), который меняется при изменении статуса в заббикс.

  • Использована маркдаун маркировка

  • Добавлен цветовой индикатор приоритета события

Получили:

При возникновении события:

Сообщение о возникновении события по новому шаблону
Сообщение о возникновении события по новому шаблону

При решении редактируется сообщение. Меняется цветовой индикатор, добавляется строка с информацией о времени решения

Сообщение об устранении события по новому шаблону
Сообщение об устранении события по новому шаблону

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 для еще большего упрощения процесса и обязательно вернемся к вам с новостями.

Спасибо за внимание!

Комментарии (1)


  1. olku
    07.08.2024 17:18

    А государственной организации можно импортировать софт недружественных стран? @alexvl