Zabbix — Envio de Alertas ao Telegram pelo Webhook
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: