Типы медиа

Обзор

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

Экспортирование

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

  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 'Неверно указан параметр "event_source": "' + params.event_source + '".\nДопустимые значения: 0-3.';
            }

            if (params.event_value !== '0' && params.event_value !== '1'
                && (params.event_source === '0' || params.event_source === '3')) {
                throw 'Неверно указан параметр "event_value": ' + params.event_value + '\nДопустимые значения: 0 или 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" должно быть в диапазоне -2..2';
            }

            if (params.event_source === '0' && isNaN(params.triggerid)) {
                throw 'поле "triggerid" не является числом';
            }

            if (isNaN(params.eventid)) {
                throw 'поле "eventid" не является числом';
            }

            if (typeof params.message !== 'string' || params.message.trim() === '') {
                throw 'поле "message" не может быть пустым';
            }

            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 'поле "retry" должно быть числом со значением не менее 30, если для "priority" задано значение 2';
                }

                if (isNaN(params.expire) || params.expire > 10800) {
                    throw 'поле "expire" должно быть числом со значением не более 10800, если для "priority" задано значение 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 добавьте ключ пользователя в поле "Отправить кому".
      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}

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

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

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

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

Email

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

Element Type Description
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.

Element Type Description
gsm_modem string (required) Имя последовательного устройства GSM-модема.

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

Скрипт

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

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

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

Вебхук

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

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

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

Сноски

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