1 Beispiele für webhook-Skripte

Übersicht

Obwohl Zabbix eine große Anzahl sofort verfügbarer webhook-Integrationen bietet, möchten Sie möglicherweise stattdessen eigene webhooks erstellen. Dieser Abschnitt enthält Beispiele für benutzerdefinierte webhook-Skripte (verwendet im Parameter Script). Eine Beschreibung weiterer webhook-Parameter finden Sie im Abschnitt webhook.

Verwenden Sie in der JavaScript-Vorverarbeitung keine nicht deklarierten Zuweisungen. Verwenden Sie var, um lokale Variablen zu deklarieren.

Wiederherstellungsereignisse (unabhängig davon, ob sie automatisch oder nach einem manuellen Schließen erzeugt werden) enthalten Tags des gelösten Ereignisses (einschließlich Tags, die von Vorlagen, Hosts und Auslösern geerbt wurden). Webhook-Skripte werden ausgeführt, nachdem die Warnung erstellt wurde; daher werden von einem webhook-Skript zurückgegebene Tags erst nach der anfänglichen Erstellung der Warnung angewendet und sind möglicherweise in der Warnung, die den webhook ausgelöst hat, nicht vorhanden. Wenn eine Integration erfordert, dass von einem webhook erzeugte Tags in der ursprünglichen Benachrichtigung vorhanden sind, rufen Sie die Ereignis-Tags vom Server ab (zum Beispiel über die Event-API) oder speichern Sie von einem webhook erzeugte Tags in einem externen persistenten Speicher und korrelieren Sie sie dort.

Jira webhook (benutzerdefiniert)

Dieses Skript erstellt ein JIRA-Ticket und gibt einige Informationen zum erstellten Ticket zurück.

try {
    Zabbix.log(4, '[ Jira webhook ] Started with params: ' + value);

    var result = {
            'tags': {
                'endpoint': 'jira'
            }
        },
        params = JSON.parse(value),
        req = new HttpRequest(),
        fields = {},
        resp;

    if (params.HTTPProxy) {
        req.setProxy(params.HTTPProxy);
    }

    req.addHeader('Content-Type: application/json');
    req.addHeader('Authorization: Basic ' + params.authentication);

    fields.summary = params.summary;
    fields.description = params.description;
    fields.project = {key: params.project_key};
    fields.issuetype = {id: params.issue_id};

    resp = req.post('https://jira.example.com/rest/api/2/issue/',
        JSON.stringify({"fields": fields})
    );

    if (req.getStatus() != 201) {
        throw 'Response code: ' + req.getStatus();
    }

    resp = JSON.parse(resp);
    result.tags.issue_id = resp.id;
    result.tags.issue_key = resp.key;

    return JSON.stringify(result);
}
catch (error) {
    Zabbix.log(4, '[ Jira webhook ] Issue creation failed json : ' + JSON.stringify({"fields": fields}));
    Zabbix.log(3, '[ Jira webhook ] issue creation failed : ' + error);

    throw 'Failed with error: ' + error;
}

Slack webhook (benutzerdefiniert)

Dieser webhook leitet Benachrichtigungen von Zabbix an einen Slack-Kanal weiter.

try {
    var params = JSON.parse(value),
        req = new HttpRequest(),
        response;

    if (params.HTTPProxy) {
        req.setProxy(params.HTTPProxy);
    }

    req.addHeader('Content-Type: application/x-www-form-urlencoded');

    Zabbix.log(4, '[ Slack webhook ] Webhook request with value=' + value);

    response = req.post(params.hook_url, 'payload=' + encodeURIComponent(value));
    Zabbix.log(4, '[ Slack webhook ] Responded with code: ' + req.getStatus() + '. Response: ' + response);

    try {
        response = JSON.parse(response);
    }
    catch (error) {
        if (req.getStatus() < 200 || req.getStatus() >= 300) {
            throw 'Request failed with status code ' + req.getStatus();
        }
        else {
            throw 'Request success, but response parsing failed.';
        }
    }

    if (req.getStatus() !== 200 || !response.ok || response.ok === 'false') {
        throw response.error;
    }

    return 'OK';
}
catch (error) {
    Zabbix.log(3, '[ Slack webhook ] Sending failed. Error: ' + error);

    throw 'Failed with error: ' + error;
}