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

Обзор

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

Экспорт

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

  1. Перейдите в ОповещенияТипы медиа.
  2. Установите флажки у типов медиа, которые нужно экспортировать.
  3. Нажмите Экспорт под списком.

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

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

Импорт

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

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

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

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

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

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

Экспорт в YAML:

zabbix_export:
  version: '8.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: |
        Пожалуйста, обратитесь к руководству по настройке здесь: https://git.zabbix.com/projects/ZBX/repos/zabbix/browse/templates/media/pushover

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

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

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-узла для SMTP.
Возможные значения:1 NO (0, по умолчанию), YES (1).
smtp_verify_peer string Проверка SSL-пира для 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, по умолчанию).

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

SMS

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

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

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

Скрипт

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

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

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

Вебхук

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

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

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

Сноски

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