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