1 Webhook skriptu piemēri

Pārskats

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

Neizmantojiet neizdeklarētus piešķīrumus priekšapstrādes JavaScript kodā. Lietojiet var, lai deklarētu lokālos mainīgos.

Atkopšanas notikumi (neatkarīgi no tā, vai tie ģenerēti automātiski vai pēc manuālas aizvēršanas) ietver atrisinātā notikuma birkas (tostarp birkas, kas mantotas no veidnēm, hosts un trigeriem). Webhook skripti tiek izpildīti pēc brīdinājuma izveides; tādēļ birkas, ko atgriež webhook skripts, tiek piemērotas pēc sākotnējās brīdinājuma izveides un var nebūt ietvertas brīdinājumā, kas izraisīja webhook. Ja integrācijai ir nepieciešams, lai webhook izveidotās birkas būtu pieejamas sākotnējā paziņojumā, iegūstiet notikuma birkas no servera (piemēram, izmantojot Event API) vai saglabājiet webhook izveidotās birkas ā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;
}