Zabbix — Envio de Alertas ao Telegram pelo Webhook

Emerson Silva
5 min readDec 26, 2020

--

Salveeee pessoal, tudo certo? Espero que esteja :D

Hoje vou falar sobre a nova funcionalidade do Zabbix que são as integrações via Webhook. Vou fazer uma demonstração com o Telegram. Então pegue um café e vamos lá.

O Zabbix 5.0 veio com algumas novidades, além de correções de bugs, trouxe para a comunidade a possibilidade fazer integrações através do Webhook. Primeiro, antes de colocar a mão na massa, vamos entender o que é o Webhook.

Webhook (também conhecido como retorno de chamada web ou HTTP e, ainda, impulso API) é uma maneira prática para um aplicativo ou sistema fornecer outras aplicações com informações em tempo real. O Webhook fornece dados para outros aplicativos. Para saber mais detalhes, exemplos, vou deixar um link no final do artigo.

Vamos colocar a mão na massa, o que vamos precisar:

  • Zabbix 5.0 LTS instalado
  • Uma conta no Telegram

1. Criando bot

Primeiro passo, vamos criar nosso bot no Telegram, pesquise por BotFather:

Adicionar texto alternativo

Digite /newboot

Escolha um nome para o bot, o meu se chamará testewebhook.

Adicionar texto alternativo

Feito isso, será gerado o token do nosso bot:

Adicionar texto alternativo

Agora precisamos conseguir o ID do chat, para isso você pode consegui-lo de duas formas:

A primeira via curl:

$ curl -i "https://api.telegram.org/botTOKEN/getUpdates"

ou acessando pelo navegador pela URL abaixo:

https://api.telegram.org/botTOKEN/getUpdates

Não se esqueça de colocar o token gerado onde está escrito “TOKEN”.

2. Zabbix Setup

Para que possamos configurar o nosso Webhook, vá em Administration > Media types” e vamos criar um tipo de mídia:

Adicionar texto alternativo

Vamos dar um nome a ela, e escolher o tipo “Webhook”.

Em “Paramenters”, vamos definir as seguintes variáveis:

Adicionar texto alternativo

“ParseMode” será o ID do nosso chat, enquanto “Token” nosso token do bot.

Em script, insira:

var Telegram = {
token: null,
to: null,
message: null,
proxy: null,
parse_mode: null,
sendMessage: function() {
var params = {
chat_id: ID_CHAT,
text: Telegram.message,
disable_web_page_preview: true,
disable_notification: false
},
data,
response,
request = new CurlHttpRequest(),
url = 'https://api.telegram.org/bot' + Telegram.token + '/sendMessage';
if (Telegram.parse_mode !== null) {
params['parse_mode'] = Telegram.parse_mode;
}
if (Telegram.proxy) {
request.SetProxy(Telegram.proxy);
}
request.AddHeader('Content-Type: application/json');
data = JSON.stringify(params);
// Remove replace() function if you want to see the exposed token in the log file.
Zabbix.Log(4, '[Telegram Webhook] URL: ' + url.replace(Telegram.token, 'Seu Token'));
Zabbix.Log(4, '[Telegram Webhook] params: ' + data);
response = request.Post(url, data);
Zabbix.Log(4, '[Telegram Webhook] HTTP code: ' + request.Status());
try {
response = JSON.parse(response);
}
catch (error) {
response = null;
}
if (request.Status() !== 200 || typeof response.ok !== 'boolean' || response.ok !== true) {
if (typeof response.description === 'string') {
throw response.description;
}
else {
throw 'Unknown error. Check debug log for more information.'
}
}
}
}
try {
var params = JSON.parse(value);
if (typeof params.Token === 'undefined') {
throw 'Incorrect value is given for parameter "Token": parameter is missing';
}
Telegram.token = params.Token; if (params.HTTPProxy) {
Telegram.proxy = params.HTTPProxy;
}
if (['Markdown', 'HTML', 'MarkdownV2'].indexOf(params.ParseMode) !== -1) {
Telegram.parse_mode = params.ParseMode;
}
Telegram.to = params.To;
Telegram.message = params.Subject + '\n' + params.Message;
Telegram.sendMessage();
return 'OK';
}
catch (error) {
Zabbix.Log(4, '[Telegram Webhook] notification failed: ' + error);
throw 'Sending failed: ' + error + '.';
}

No código do script, em “chat_id” insira o ID do seu chat e em url.replace(Telegram.token, ‘TOKEN’) coloque o token do seu bot.

Pra fazer um teste, você pode usar a opção de teste da própria mídia type:

Adicionar texto alternativo

Se a mensagem for enviada, você tera o seguinte resultado:

Adicionar texto alternativo

Feito esse passo a passo, ative a mídia e salve.

Agora, vamos em Configuration > Action > Create action. Crie da seguinte forma:

Adicionar texto alternativo

Em adicione uma Operação e selecione a mídia criada selecione para quais grupos e usuários serão enviadas as ações e por fim, escolha a sua default media type:

Adicionar texto alternativo

Repita o mesmo passo, com as mesmas informações em “ Recovery operations” e “Update operations”

Por fim, vá em Administration > Users e selecione o usuário que vai enviar os alertas. Dentro do usuário, acesse “Media” e crie uma para o mesmo.

Em “Type”, seleciona a mídia criada e por fim, em “Sent to” coloque o id do chat do bot.

Pronto, agora temos a nossa integração via Webhook configurada

Gatilho disparado:

Adicionar texto alternativo

Ação executada:

Adicionar texto alternativo

Alerta recebido pelo Telegram:

Adicionar texto alternativo

Por hoje é só pessoal, qualquer dúvida ou critica estou a disposição hehe

Abraço

Referências:

https://blog.vindi.com.br/o-que-sao-webhooks/

--

--

Emerson Silva
Emerson Silva

Written by Emerson Silva

Apaixonado por tecnologia, livros e café

No responses yet