You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

245 lines
7.7 KiB

1 year ago
zabbix_export:
version: '7.0'
media_types:
-
name: iLert
type: WEBHOOK
parameters:
-
name: .ILERT.ALERT.SOURCE.KEY
value: '{ALERT.SENDTO}'
-
name: .ILERT.INCIDENT.SUMMARY
value: ''
-
name: ALERT.MESSAGE
value: '{ALERT.MESSAGE}'
-
name: ALERT.SUBJECT
value: '{ALERT.SUBJECT}'
-
name: EVENT.ACK.STATUS
value: '{EVENT.ACK.STATUS}'
-
name: EVENT.DATE
value: '{EVENT.DATE}'
-
name: EVENT.ID
value: '{EVENT.ID}'
-
name: EVENT.NAME
value: '{EVENT.NAME}'
-
name: EVENT.NSEVERITY
value: '{EVENT.NSEVERITY}'
-
name: EVENT.OPDATA
value: '{EVENT.OPDATA}'
-
name: EVENT.RECOVERY.DATE
value: '{EVENT.RECOVERY.DATE}'
-
name: EVENT.RECOVERY.TIME
value: '{EVENT.RECOVERY.TIME}'
-
name: EVENT.RECOVERY.VALUE
value: '{EVENT.RECOVERY.VALUE}'
-
name: EVENT.SEVERITY
value: '{EVENT.SEVERITY}'
-
name: EVENT.TAGS
value: '{EVENT.TAGS}'
-
name: EVENT.TIME
value: '{EVENT.TIME}'
-
name: EVENT.UPDATE.ACTION
value: '{EVENT.UPDATE.ACTION}'
-
name: EVENT.UPDATE.DATE
value: '{EVENT.UPDATE.DATE}'
-
name: EVENT.UPDATE.MESSAGE
value: '{EVENT.UPDATE.MESSAGE}'
-
name: EVENT.UPDATE.STATUS
value: '{EVENT.UPDATE.STATUS}'
-
name: EVENT.UPDATE.TIME
value: '{EVENT.UPDATE.TIME}'
-
name: EVENT.VALUE
value: '{EVENT.VALUE}'
-
name: HOST.HOST
value: '{HOST.HOST}'
-
name: HOST.IP
value: '{HOST.IP}'
-
name: HOST.NAME
value: '{HOST.NAME}'
-
name: ITEM.ID1
value: '{ITEM.ID1}'
-
name: ITEM.ID2
value: '{ITEM.ID2}'
-
name: ITEM.ID3
value: '{ITEM.ID3}'
-
name: ITEM.ID4
value: '{ITEM.ID4}'
-
name: ITEM.ID5
value: '{ITEM.ID5}'
-
name: ITEM.NAME1
value: '{ITEM.NAME1}'
-
name: ITEM.NAME2
value: '{ITEM.NAME2}'
-
name: ITEM.NAME3
value: '{ITEM.NAME3}'
-
name: ITEM.NAME4
value: '{ITEM.NAME4}'
-
name: ITEM.NAME5
value: '{ITEM.NAME5}'
-
name: TRIGGER.DESCRIPTION
value: '{TRIGGER.DESCRIPTION}'
-
name: TRIGGER.ID
value: '{TRIGGER.ID}'
-
name: TRIGGER.NAME
value: '{TRIGGER.NAME}'
-
name: TRIGGER.SEVERITY
value: '{TRIGGER.SEVERITY}'
-
name: TRIGGER.STATUS
value: '{TRIGGER.STATUS}'
-
name: TRIGGER.URL
value: '{TRIGGER.URL}'
-
name: TRIGGER.VALUE
value: '{TRIGGER.VALUE}'
-
name: USER.FULLNAME
value: '{USER.FULLNAME}'
-
name: ZABBIX.URL
value: '{$ZABBIX.URL}'
script: |
try {
var result = { tags: {} },
params = JSON.parse(value),
req = new HttpRequest(),
resp = '';
if (typeof params.HTTPProxy === 'string' && params.HTTPProxy.trim() !== '') {
req.setProxy(params.HTTPProxy);
}
var alertSourceKey = params['.ILERT.ALERT.SOURCE.KEY'];
if (!alertSourceKey || (typeof alertSourceKey === 'string' && alertSourceKey.trim() === '')) {
throw 'incorrect value for variable "ILERT.ALERT.SOURCE.KEY". The value must be a non-empty string.';
}
delete params['.ILERT.ALERT.SOURCE.KEY'];
var ilertApiBaseURL = "https://api.ilert.com";
var reqURL = encodeURI(ilertApiBaseURL + "/api/v1/events/zabbix-mt/" + alertSourceKey)
var incidentKey = "zabbix-" + params['EVENT.ID'];
var incidentViewURL = ilertApiBaseURL + "/api/v1/incidents/resolve-ik/" + alertSourceKey + "/" + incidentKey;
req.addHeader('Accept: application/json');
req.addHeader('Content-Type: application/json');
Zabbix.log(4, '[iLert Webhook] Sending request:' + JSON.stringify(params));
resp = req.post(reqURL, JSON.stringify(params));
Zabbix.log(4, '[iLert Webhook] Receiving response:' + resp);
try {
resp = JSON.parse(resp);
}
catch (error) {
throw 'incorrect response. iLert returned a non-JSON object.';
}
if (req.getStatus() == 200) {
result.tags.__ilert_incident_url = incidentViewURL;
return JSON.stringify(result);
}
if (req.getStatus() == 400 && typeof resp === 'object' && typeof resp.code === 'string') {
if (resp.code === 'NO_OPEN_INCIDENT_WITH_KEY') {
return JSON.stringify(result);
}
if (resp.code === 'INCIDENT_ALREADY_ACCEPTED') {
result.tags.__ilert_incident_url = incidentViewURL;
return JSON.stringify(result);
}
}
if (typeof resp === 'object' && typeof resp.message === 'string') {
throw resp.message;
}
else {
throw 'Unknown error.';
}
}
catch (error) {
Zabbix.log(3, '[iLert Webhook] Notification failed : ' + error);
throw 'iLert notification failed : ' + error;
}
process_tags: 'YES'
show_event_menu: 'YES'
event_menu_url: '{EVENT.TAGS.__ilert_incident_url}'
event_menu_name: 'iLert incident'
description: |
Please refer to https://docs.ilert.com/integrations/zabbix/native
Set global macro {$ZABBIX.URL} with your Zabbix server URL.
Add a dedicated user with the media type "iLert". You can also rewrite the incident summary via ".ILERT.INCIDENT.SUMMARY" parameter or leave it empty to use the standard pattern.
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: 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: 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}