Webhook skriptu piemēri

Pārskats

Lai gan Zabbix piedāvā lielu skaitu webhook integrāciju, kas pieejamas uzreiz pēc noklusējuma, iespējams, vēlēsieties izveidot arī savus webhookus. Šajā sadaļā ir sniegti pielāgotu webhook skriptu piemēri (izmantojami parametrā Script). Citu webhook parametru aprakstu skatiet sadaļā webhook.

Preprocessing JavaScript neizmantojiet nedeklarētus piešķīrumus. Lai deklarētu lokālos mainīgos, izmantojiet var.

Atjaunošanas notikumi (neatkarīgi no tā, vai tie tiek ģenerēti automātiski vai pēc manuālas aizvēršanas) ietver atrisināto notikumu tagus (tostarp tagus, kas mantoti no veidnēm, hostiem un trigeriem). Webhook skripti tiek izpildīti pēc brīdinājuma izveides; tādēļ webhook skripta atgrieztie tagi tiek lietoti pēc sākotnējās brīdinājuma izveides un var nebūt klātesoši brīdinājumā, kas izraisīja webhook. Ja integrācijai ir nepieciešams, lai webhook ģenerētie tagi būtu klātesoši sākotnējā paziņojumā, iegūstiet notikuma tagus no servera (piemēram, izmantojot Event API) vai saglabājiet webhook ģenerētos tagus ārējā pastāvīgā krātuvē un veiciet korelāciju tur.

Jira webhook (pielāgots)

Šis skripts izveidos JIRA problēmu un atgriezīs informāciju par izveidoto problēmu.

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 (pielāgots)

Šis webhook pārsūtīs paziņojumus no Zabbix uz Slack kanālu.

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