1 Przykłady skryptów webhooka

Przegląd

Chociaż Zabbix oferuje dużą liczbę integracji webhook dostępnych od razu po instalacji, możesz chcieć zamiast tego utworzyć własne webhooki. Ta sekcja zawiera przykłady niestandardowych skryptów webhook (używanych w parametrze Script). Opis innych parametrów webhook znajduje się w sekcji webhook.

Nie używaj niezadeklarowanych przypisań w JavaScript przetwarzania wstępnego. Używaj var do deklarowania zmiennych lokalnych.

Zdarzenia odzyskania (niezależnie od tego, czy zostały wygenerowane automatycznie, czy po ręcznym zamknięciu) zawierają tagi rozwiązanych zdarzeń (w tym tagi dziedziczone z szablonów, hostów i wyzwalaczy). Skrypty webhook są wykonywane po utworzeniu alertu; tagi zwrócone przez skrypt webhook są zatem stosowane po początkowym utworzeniu alertu i mogą nie być obecne w alercie, który wywołał webhook. Jeśli integracja wymaga, aby tagi utworzone przez webhook były obecne w początkowym powiadomieniu, pobierz tagi zdarzenia z serwera (na przykład za pomocą API Event) albo przechowuj tagi utworzone przez webhook w zewnętrznym trwałym magazynie i tam je koreluj.

Jira webhook (niestandardowy)

Ten skrypt utworzy zgłoszenie JIRA i zwróci pewne informacje o utworzonym zgłoszeniu.

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 (niestandardowy)

Ten webhook będzie przekazywać powiadomienia z Zabbix do kanału Slack.

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;
}