webhook-Skriptbeispiele

Übersicht

Obwohl Zabbix eine große Anzahl von webhook-Integrationen direkt einsatzbereit anbietet, möchten Sie möglicherweise stattdessen Ihre eigenen webhooks erstellen. Dieser Abschnitt enthält Beispiele für benutzerdefinierte webhook-Skripte (verwendet im Parameter Script). Siehe den Abschnitt webhook für eine Beschreibung weiterer webhook-Parameter.

Verwenden Sie in JavaScript für die 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 aufgelöste Ereignistags (einschließlich von Vorlagen, Hosts und Auslösern geerbter Tags). Webhook-Skripte werden nach der Erstellung des Alarms ausgeführt; von einem webhook-Skript zurückgegebene Tags werden daher erst nach der anfänglichen Alarm-Erstellung angewendet und sind möglicherweise im Alarm, der 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 Ereignistags vom Server ab (zum Beispiel über die Event-API) oder speichern Sie von webhooks 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;
}