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) в правом нижнем углу диалога настроек

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

Правило Описание
Обновить существующее
(Update existing)
Существующие элементы будут обновлены, используя данные из файла импорта. В противном случае они не будут обновлены.
Создать новое
(Create new)
Новые элементы будут созданы, используя данные из файла импорта. В противном случае они не будут созданы.

В веб-интерфейсе отобразится сообщение об успехе или об ошибке импорта.

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

Экспорт в YAML:

zabbix_export:
  version: '7.0'
  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: |
        Please refer to setup guide here: https://git.zabbix.com/projects/ZBX/repos/zabbix/browse/templates/media/pushover

        Set token parameter with to your Pushover application key.
        When assigning Pushover media to the Zabbix user - add user key into send to field.
      message_templates:
        - event_source: TRIGGERS
          operation_mode: PROBLEM
          subject: 'Problem: {EVENT.NAME}'
          message: |
            Problem started at {EVENT.TIME} on {EVENT.DATE}
            Problem name: {EVENT.NAME}
            Host: {HOST.NAME}
            Severity: {EVENT.SEVERITY}
            Operational data: {EVENT.OPDATA}
            Original problem ID: {EVENT.ID}
            {TRIGGER.URL}
        - event_source: TRIGGERS
          operation_mode: RECOVERY
          subject: 'Resolved in {EVENT.DURATION}: {EVENT.NAME}'
          message: |
            Problem has been resolved at {EVENT.RECOVERY.TIME} on {EVENT.RECOVERY.DATE}
            Problem name: {EVENT.NAME}
            Problem duration: {EVENT.DURATION}
            Host: {HOST.NAME}
            Severity: {EVENT.SEVERITY}
            Original problem ID: {EVENT.ID}
            {TRIGGER.URL}
        - event_source: TRIGGERS
          operation_mode: UPDATE
          subject: 'Updated problem in {EVENT.AGE}: {EVENT.NAME}'
          message: |
            {USER.FULLNAME} {EVENT.UPDATE.ACTION} problem at {EVENT.UPDATE.DATE} {EVENT.UPDATE.TIME}.
            {EVENT.UPDATE.MESSAGE}

            Current problem status is {EVENT.STATUS}, age is {EVENT.AGE}, acknowledged: {EVENT.ACK.STATUS}.
        - event_source: DISCOVERY
          operation_mode: PROBLEM
          subject: 'Discovery: {DISCOVERY.DEVICE.STATUS} {DISCOVERY.DEVICE.IPADDRESS}'
          message: |
            Discovery rule: {DISCOVERY.RULE.NAME}

            Device IP: {DISCOVERY.DEVICE.IPADDRESS}
            Device DNS: {DISCOVERY.DEVICE.DNS}
            Device status: {DISCOVERY.DEVICE.STATUS}
            Device uptime: {DISCOVERY.DEVICE.UPTIME}

            Device service name: {DISCOVERY.SERVICE.NAME}
            Device service port: {DISCOVERY.SERVICE.PORT}
            Device service status: {DISCOVERY.SERVICE.STATUS}
            Device service uptime: {DISCOVERY.SERVICE.UPTIME}
        - event_source: AUTOREGISTRATION
          operation_mode: PROBLEM
          subject: 'Autoregistration: {HOST.HOST}'
          message: |
            Host name: {HOST.HOST}
            Host IP: {HOST.IP}
            Agent port: {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 строка Поставщик почты (Email provider).
smtp_server строка SMTP сервер.
smtp_port целое число Порт SMTP сервера для подключения.
По умолчанию: 25.
smtp_helo строка SMTP helo.
smtp_email строка Email адрес, от имени которого отсылаются оповещения.
smtp_security строка Уровень безопасности, который надо использовать для SMTP соединения.
Возможные значения:1 NONE (0, по умолчанию), STARTTLS (1), SSL_OR_TLS (2).
smtp_verify_host строка SSL проверка хоста для SMTP.
Возможные значения:1 NO (0, по умолчанию), YES (1).
smtp_verify_peer строка SSL проверка сервера для SMTP.
Возможные значения:1 NO (0, по умолчанию), YES (1).
smtp_authentication строка Метод аутентификации, который следует использовать для SMTP.
Возможные значения:1 NONE (0, по умолчанию), PASSWORD (1).
username строка Имя пользователя.
password строка Пароль аутентификации.
message_format строка Формат сообщения.
Возможные значения:1 TEXT (0), HTML (1, по умолчанию).

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

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 в записи таблицы или в конце каждого раздела.