6. Способы оповещений

Обзор

Способы оповещений экспортируются вместе со всеми связанными объектами и со связями между объектами.

Экспорт

Для экспорта способов оповещений сделайте следующее:

  1. Перейдите к: ОповещенияСпособы оповещений (AlertsMedia types)
  2. Отметьте способы оповещений, которые нужно экспортировать
  3. Нажмите на Экспорт (Export) ниже списка

В зависимости от выбранного формата, способы оповещений экспортируются в локальный файл с именем по умолчанию:

  • zabbix_export_mediatypes.yaml — при экспорте в YAML (опция по умолчанию для экспорта);
  • zabbix_export_mediatypes.xml — при экспорте в XML;
  • zabbix_export_mediatypes.json — при экспорте в JSON.

Импорт

Чтобы импортировать типы медиа, выполните следующие действия:

  1. Перейдите в AlertsMedia types.
  2. Нажмите Import в правом верхнем углу.
  3. Выберите файл импорта.
  4. Отметьте необходимые параметры в правилах импорта.
  5. Нажмите Import в правом нижнем углу формы настройки.

Правила импорта:

Rule Description
Update existing Существующие элементы будут обновлены с использованием данных из файла импорта. В противном случае они не будут обновлены.
Create new Новые элементы будут созданы с использованием данных из файла импорта. В противном случае они не будут созданы.

Сообщение об успешном или неудачном импорте будет отображено в веб-интерфейсе.

Формат экспорта

Экспорт в YAML:

zabbix_export:
  version: '7.4'
  media_types:
    - name: Pushover
      type: WEBHOOK
      parameters:
        - name: endpoint
          value: 'https://api.pushover.net/1/messages.json'
        - name: eventid
          value: '{EVENT.ID}'
        - name: event_nseverity
          value: '{EVENT.NSEVERITY}'
        - name: event_source
          value: '{EVENT.SOURCE}'
        - name: event_value
          value: '{EVENT.VALUE}'
        - name: expire
          value: '1200'
        - name: message
          value: '{ALERT.MESSAGE}'
        - name: priority_average
          value: '0'
        - name: priority_default
          value: '0'
        - name: priority_disaster
          value: '0'
        - name: priority_high
          value: '0'
        - name: priority_information
          value: '0'
        - name: priority_not_classified
          value: '0'
        - name: priority_warning
          value: '0'
        - name: retry
          value: '60'
        - name: title
          value: '{ALERT.SUBJECT}'
        - name: token
          value: '<PUSHOVER TOKEN HERE>'
        - name: triggerid
          value: '{TRIGGER.ID}'
        - name: url
          value: '{$ZABBIX.URL}'
        - name: url_title
          value: Zabbix
        - name: user
          value: '{ALERT.SENDTO}'
      status: DISABLED
      max_sessions: '0'
      script: |
        try {
            var params = JSON.parse(value),
                request = new HttpRequest(),
                data,
                response,
                severities = [
                    {name: 'not_classified', color: '#97AAB3'},
                    {name: 'information', color: '#7499FF'},
                    {name: 'warning', color: '#FFC859'},
                    {name: 'average', color: '#FFA059'},
                    {name: 'high', color: '#E97659'},
                    {name: 'disaster', color: '#E45959'},
                    {name: 'resolved', color: '#009900'},
                    {name: 'default', color: '#000000'}
                ],
                priority;

            if (typeof params.HTTPProxy === 'string' && params.HTTPProxy.trim() !== '') {
                request.setProxy(params.HTTPProxy);
            }

            if ([0, 1, 2, 3].indexOf(parseInt(params.event_source)) === -1) {
                throw 'Incorrect "event_source" parameter given: "' + params.event_source + '".\nMust be 0-3.';
            }

            if (params.event_value !== '0' && params.event_value !== '1'
                && (params.event_source === '0' || params.event_source === '3')) {
                throw 'Incorrect "event_value" parameter given: ' + params.event_value + '\nMust be 0 or 1.';
            }

            if ([0, 1, 2, 3, 4, 5].indexOf(parseInt(params.event_nseverity)) === -1) {
                params.event_nseverity = '7';
            }

            if (params.event_value === '0') {
                params.event_nseverity = '6';
            }

            priority = params['priority_' + severities[params.event_nseverity].name] || params.priority_default;

            if (isNaN(priority) || priority < -2 || priority > 2) {
                throw '"priority" should be -2..2';
            }

            if (params.event_source === '0' && isNaN(params.triggerid)) {
                throw 'field "triggerid" is not a number';
            }

            if (isNaN(params.eventid)) {
                throw 'field "eventid" is not a number';
            }

            if (typeof params.message !== 'string' || params.message.trim() === '') {
                throw 'field "message" cannot be empty';
            }

            data = {
                token: params.token,
                user: params.user,
                title: params.title,
                message: params.message,
                url: (params.event_source === '0') 
                    ? params.url + '/tr_events.php?triggerid=' + params.triggerid + '&eventid=' + params.eventid
                    : params.url,
                url_title: params.url_title,
                priority: priority
            };

            if (priority == 2) {
                if (isNaN(params.retry) || params.retry < 30) {
                    throw 'field "retry" should be a number with value of at least 30 if "priority" is set to 2';
                }

                if (isNaN(params.expire) || params.expire > 10800) {
                    throw 'field "expire" should be a number with value of at most 10800 if "priority" is set to 2';
                }

                data.retry = params.retry;
                data.expire = params.expire;
            }

            data = JSON.stringify(data);
            Zabbix.log(4, '[ Pushover Webhook ] Sending request: ' + params.endpoint + '\n' + data);

            request.addHeader('Content-Type: application/json');
            response = request.post(params.endpoint, data);

            Zabbix.log(4, '[ Pushover Webhook ] Received response with status code ' + request.getStatus() + '\n' + response);

            if (response !== null) {
                try {
                    response = JSON.parse(response);
                }
                catch (error) {
                    Zabbix.log(4, '[ Pushover Webhook ] Failed to parse response received from Pushover');
                    response = null;
                }
            }

            if (request.getStatus() != 200 || response === null || typeof response !== 'object' || response.status !== 1) {
                if (response !== null && typeof response === 'object' && typeof response.errors === 'object'
                        && typeof response.errors[0] === 'string') {
                    throw response.errors[0];
                }
                else {
                    throw 'Unknown error. Check debug log for more information.';
                }
            }

            return 'OK';
        }
        catch (error) {
            Zabbix.log(4, '[ Pushover Webhook ] Pushover notification failed: ' + error);
            throw 'Pushover notification failed: ' + error;
        }
      description: |
        См. руководство по настройке здесь: https://git.zabbix.com/projects/ZBX/repos/zabbix/browse/templates/media/pushover?at=refs%2Fheads%2Frelease%2F7.4

        Укажите параметр token, используя ключ приложения Pushover.
        При назначении медиа Pushover пользователю Zabbix - добавьте ключ пользователя в поле "send to".
      message_templates:
        - event_source: TRIGGERS
          operation_mode: PROBLEM
          subject: 'Проблема: {EVENT.NAME}'
          message: |
            Проблема началась в {EVENT.TIME} {EVENT.DATE}
            Имя проблемы: {EVENT.NAME}
            Узел сети: {HOST.NAME}
            Серьезность: {EVENT.SEVERITY}
            Оперативные данные: {EVENT.OPDATA}
            Исходный ID проблемы: {EVENT.ID}
            {TRIGGER.URL}
        - event_source: TRIGGERS
          operation_mode: RECOVERY
          subject: 'Решено за {EVENT.DURATION}: {EVENT.NAME}'
          message: |
            Проблема была решена в {EVENT.RECOVERY.TIME} {EVENT.RECOVERY.DATE}
            Имя проблемы: {EVENT.NAME}
            Длительность проблемы: {EVENT.DURATION}
            Узел сети: {HOST.NAME}
            Серьезность: {EVENT.SEVERITY}
            Исходный ID проблемы: {EVENT.ID}
            {TRIGGER.URL}
        - event_source: TRIGGERS
          operation_mode: UPDATE
          subject: 'Обновленная проблема за {EVENT.AGE}: {EVENT.NAME}'
          message: |
            {USER.FULLNAME} {EVENT.UPDATE.ACTION} проблему в {EVENT.UPDATE.DATE} {EVENT.UPDATE.TIME}.
            {EVENT.UPDATE.MESSAGE}

            Текущий статус проблемы: {EVENT.STATUS}, возраст: {EVENT.AGE}, подтверждена: {EVENT.ACK.STATUS}.
        - event_source: DISCOVERY
          operation_mode: PROBLEM
          subject: 'Обнаружение: {DISCOVERY.DEVICE.STATUS} {DISCOVERY.DEVICE.IPADDRESS}'
          message: |
            Правило обнаружения: {DISCOVERY.RULE.NAME}

            IP устройства: {DISCOVERY.DEVICE.IPADDRESS}
            DNS устройства: {DISCOVERY.DEVICE.DNS}
            Статус устройства: {DISCOVERY.DEVICE.STATUS}
            Время работы устройства: {DISCOVERY.DEVICE.UPTIME}

            Имя службы устройства: {DISCOVERY.SERVICE.NAME}
            Порт службы устройства: {DISCOVERY.SERVICE.PORT}
            Статус службы устройства: {DISCOVERY.SERVICE.STATUS}
            Время работы службы устройства: {DISCOVERY.SERVICE.UPTIME}
        - event_source: AUTOREGISTRATION
          operation_mode: PROBLEM
          subject: 'Автоматическая регистрация: {HOST.HOST}'
          message: |
            Имя узла сети: {HOST.HOST}
            IP узла сети: {HOST.IP}
            Порт агента: {HOST.PORT}

Экспортируемые элементы

Экспортируемые элементы описаны в таблицах ниже.

Элемент Тип Описание
name строка (обязательный) Имя способа оповещения.
type строка (обязательный) Транспорт, используемый способом оповещения.
Возможные значения:1 EMAIL (0), SMS (1), SCRIPT (2), WEBHOOK (4).
status строка Активирован ли способ оповещения.
Возможные значения:1 ENABLED (0, по умолчанию), DISABLED (1)
max_sessions целое число Максимальное количество уведомлений, которые могут обрабатываться параллельно.
Возможные значения для SMS:1 1 (по умолчанию).
Возможные значения для остальных способов оповещения:1 0-100 где 0 — без ограничений).
attempts целое число Максимальное количество попыток отослать уведомление.
Возможные значения:1 1-10 (по умолчанию: 3).
attempt_interval строка Интервал (используя секунды или единицы времени с суффиксом) между повторными попытками.
Возможные значения:1 0-60s (по умолчанию: 10s).
description строка Описание способа оповещения.
message_templates Корневой элемент для шаблонов сообщения способа оповещения.
event_source строка (обязательный) Источник события.
Возможные значения:1 TRIGGERS (0), DISCOVERY (1), AUTOREGISTRATION (2), INTERNAL (3), SERVICE (4).
operation_mode строка Режим работы.
Возможные значения:1 PROBLEM (0), RECOVERY (1), UPDATE (2).
subject строка Тема сообщения.
message строка Текст сообщения.

Смотрите также: Объект способа оповещения (смотрите соответствующее свойство с совпадающим именем).

Email

Следующие дополнительные элементы экспортируются только для типа медиа Email.

Элемент Тип Описание
provider string Поставщик электронной почты.
smtp_server string SMTP-сервер.
smtp_port integer Порт SMTP-сервера для подключения.
По умолчанию: 25.
smtp_helo string SMTP helo.
smtp_email string Адрес электронной почты, с которого будут отправляться уведомления.
smtp_security string Уровень безопасности SMTP-соединения для использования.
Возможные значения:1 NONE (0, по умолчанию), STARTTLS (1), SSL_OR_TLS (2).
smtp_verify_host string Проверка SSL host для SMTP.
Возможные значения:1 NO (0, по умолчанию), YES (1).
smtp_verify_peer string Проверка SSL peer для SMTP.
Возможные значения:1 NO (0, по умолчанию), YES (1).
smtp_authentication string Метод SMTP-аутентификации для использования.
Возможные значения:1 NONE (0, по умолчанию), PASSWORD (1), OAUTH (2).
username string Имя пользователя.
password string Пароль аутентификации.
redirection_url string URL веб-интерфейса Zabbix для возврата после авторизации OAuth.
client_id string Идентификатор клиента, зарегистрированный на сервере авторизации OAuth.
authorization_url string URL OAuth с параметрами для получения токенов доступа и обновления.
token_url string URL OAuth для обмена токена авторизации на токены доступа и обновления.
message_format string Формат сообщения.
Возможные значения:1 TEXT (0), HTML (1, по умолчанию).

См. также: Объект Media type (обратитесь к соответствующему свойству с совпадающим именем).

SMS

Следующие дополнительные элементы экспортируются только для способа оповещения SMS.

Элемент Тип Описание
gsm_modem строка (обязательный) Имя последовательного устройства модема GSM.

Смотрите также: Объект способа оповещения (смотрите соответствующее свойство с совпадающим именем).

Скрипт

Следующие дополнительные элементы экспортируются только для способа оповещения Скрипт (Script).

Element Type Description
script name строка (обязательный) Имя скрипта.
parameters Корневой элемент для параметров скрипта.
sortorder строка (обязательный) Порядок параметров скрипта, передаваемых скрипту в качестве аргументов командной строки.
value строка Значение параметра скрипта.

Смотрите также: Объект способа оповещения (смотрите соответствующее свойство с совпадающим именем).

Вебхук

Следующие дополнительные элементы экспортируются только для способа оповещения Вебхук (Webhook).

Элемент Тип Описание
script строка Скрипт.
timeout строка Время ожидания запроса HTTP при выполнении скрипта JavaScript.
Possible values:1 1-60s (по умолчанию: 30s).
process_tags строка Следует ли обрабатывать возвращаемые теги.
Возможные значения:1 NO (0, по умолчанию), YES (1).
show_event_menu строка Если {EVENT.TAGS.*} были успешно раскрыты в полях event_menu_url и event_menu_name, это поле означает присутствие пункта в меню события.
Возможные значения:1 NO (0, по умолчанию), YES (1).
event_menu_url строка URL пункта меню события. Поддерживаются макросы {EVENT.TAGS.*}.
event_menu_name строка Имя пункта меню события. Поддерживаются макросы {EVENT.TAGS.*}.
parameters Корневой элемент для параметров способа оповещений Вебхук.
name строка (обязательный) Имя параметра вебхука.
value строка Значение параметра вебхука.

Смотрите также: Объект способа оповещения (смотрите соответствующее свойство с совпадающим именем).

Примечания

1 Целочисленные значения API в скобках, например, ENABLED (0), упоминаются только для справки. Для получения дополнительной информации смотрите связанную страницу объекта API в записи таблицы или в конце каждого раздела.