Apesar de o Zabbix oferecer um grande número de integrações webhook disponíveis de forma nativa, você pode querer criar seus próprios webhooks. Esta seção provê exemplos de scripts webhook customizados (usados no parâmetro Script). Consulte a seção webhook para descrição de outros parâmetros de webhook.
Este script criará um chamado (issue) no JIRA e retornará informações sobre o chamado criado.
try {
Zabbix.log(4, '[ Jira webhook ] Iniciado com 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://tsupport.zabbix.lan/rest/api/2/issue/',
JSON.stringify({"fields": fields})
);
if (req.getStatus() != 201) {
throw 'Codigo de resposta: ' + 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 ] Criacao de chamado falhou (json) : ' + JSON.stringify({"fields": fields}));
Zabbix.log(3, '[ Jira webhook ] Criacao de chamado falhou : ' + error);
throw 'Falhou com erro: ' + error;
}
Este webhook encaminhará notificações do Zabbix para um canal do 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 ] Requisicao webhook com valor=' + value);
response = req.post(params.hook_url, 'payload=' + encodeURIComponent(value));
Zabbix.log(4, '[ Slack webhook ] Respondido com codigo: ' + req.Status() + '. Resposta: ' + response);
try {
response = JSON.parse(response);
}
catch (error) {
if (req.getStatus() < 200 || req.getStatus() >= 300) {
throw 'Requisicao falhou com codigo de estado ' + req.getStatus();
}
else {
throw 'Requisicao bem-sucedida, mas analise da resposta falhou.';
}
}
if (req.getStatus() !== 200 || !response.ok || response.ok === 'false') {
throw response.error;
}
return 'OK';
}
catch (error) {
Zabbix.log(3, '[ Jira webhook ] Envio falhou. Erro: ' + error);
throw 'Falhou com erro: ' + error;
}