Ad Widget

Collapse

Zabbix 5.2 erro ao enviar alertas para o Telegram

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • terule
    Junior Member
    • May 2021
    • 4

    #1

    Zabbix 5.2 erro ao enviar alertas para o Telegram

    Sou novo tanto no mundo Zabbix quanto aqui no forum. utilizei a pesquisa e não encontrou nada relacionado ao meu problema.

    Configurei o Telegram em tipos de mídia e fiz um teste mandando uma mensagem genérica e recebi no telegram sem nenhum problema, mas percebi não estava recenbendo mensagens sobre os incidentes que estavam ocorrendo.

    Foi aí que me deparei com a seguinte mensagem na dashboard:
    Code:
    zabbix telegram Sending failed: Bad Request: can't parse entities: Unsupported start tag "" at byte offset 76.
    Meu parse está configurado como HTML e fazendo alguns testes percebi que o problema ocorre com as tags HTML ("<" e ">" que estão na minha mensagem mesmo eu tendo marcado para que o zabbix interprete as tags.

    Click image for larger version  Name:	Screenshot 2021-05-04 074401.png Views:	0 Size:	47.4 KB ID:	424123

    Esse é o script em JS

    Code:
    var Telegram = {
    token: null,
    to: null,
    message: null,
    proxy: null,
    parse_mode: null,
    
    sendMessage: function() {
    var params = {
    chat_id: Telegram.to,
    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, '<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 + '.';
    }
    E esta é a mensagem que estou tentando enviar

    Code:
    ❌ Problema: <b>{HOST.NAME}</b>
    
    {EVENT.NAME}
    <b>{ITEM.NAME1}</b> <i>{ITEM.VALUE1}</i>
    
    <a href={HOST.IP}>{HOST.IP}</a>
    <i>{EVENT.SEVERITY}</i>
    Alguem sabe o que eu posso fazer para resolver o problema?
  • mfortes
    Senior Member
    • Oct 2019
    • 415

    #2
    Ola amigo,

    Tenta alterar o parse mode de HTML para markdown... e ve se rola...


    Michael R. Fortes

    Linkedin: Mike Fortes
    Medium: mromeiro-f

    Comment

    • markfree
      Senior Member
      • Apr 2019
      • 868

      #3
      terule , eu também tive esse problema.

      No "Action Log" você pode ver como as mensagens estão sendo formatadas e enviadas.

      No meu caso, os alarmes de reinício de algum host falham por causa do sinal "<" (menor que) existente na mensagem.

      Por exemplo:
      Subject:
      ❌ <b>Problem: <i> HOST has been restarted (uptime < 10m) </i></b>

      Message:
      <b>
      Problem started at <i>13:20:08 on 2021.05.11</i>
      Problem name: <b>HOST has been restarted (uptime < 10m)</b>
      Host: <b>HOST</b>
      Severity: <i>Warning</i>
      </b>
      Você pode notar que a mensagem do alarme contém o símblo "<" logo após "uptime".
      Se eu remover esse símbolo da mensagem, o Zabbix consegue enviar normalmente.

      Neste caso, não há erro das Tags HTML. A falha ocorre porque o Zabbix pensa que o sinal "<" está abrindo uma nova Tag.

      Veja se os seus alarmes possuem algum sinal como este.

      Como solução de contorno, você pode utilizar o Markdown, já sugerido pelo mfortes, ou ainda, mudar as mensagens dos alarmes.

      Se eu alterar o símbolo da mensagem original, ela vai tranquilamente.
      De:
      Problem: <i> HOST has been restarted (uptime < 10m)
      Para:
      Problem: <i> HOST has been restarted (uptime ➖ 10m)

      Imagino que a solução definitiva seria o Zabbix permitir o uso literal de alguns caracteres através de um "\" (contrabarra), por exemplo, mas parece que ainda não é suportado.
      Last edited by markfree; 11-05-2021, 23:14.

      Comment

      • avmagrini
        Junior Member
        • Jun 2021
        • 2

        #4
        Bom dia!
        Implantei um servidor Zabbix 5.2 e configurei as notificações por Telegram com sucesso, porém, estou com o mesmo problema relatado pelo terule e markfree. Conseguiram resolver o problema de alguma outra forma que não seja renomear todas as triggers com os caracteres <, > e &?
        Obrigado!

        Comment

        • mfortes
          Senior Member
          • Oct 2019
          • 415

          #5
          avmagrini como falei la encima, ao inves de HTML vc tentou usar markdown?


          Michael R. Fortes

          Linkedin: Mike Fortes
          Medium: mromeiro-f

          Comment

          • Alxndr3
            Junior Member
            • Nov 2021
            • 2

            #6
            Fala pessoal.
            Estou com um problema similar, conseguem ajudar?

            Versão: Zabbix 5.4.1

            O parse mode está como markdown.

            00:00:00.000 [Debug] [Telegram Webhook] URL: https://api.telegram.org/bot<TOKEN>/sendMessage
            00:00:00.000 [Debug] [Telegram Webhook] params: {"chat_id":"2118471036","text":"{ALERT.SUBJECT} \n{ ALERT.MESSAGE}","disable_web_page_preview":true,"d isable_notification":false}
            00:00:00.736 [Debug] [Telegram Webhook] HTTP code: 403
            00:00:00.736 [Debug] [Telegram Webhook] notification failed: TypeError: cannot read property 'description' of null

            Script:

            var Telegram = {
            token: null,
            to: null,
            message: null,
            proxy: null,
            parse_mode: null,

            sendMessage: function() {
            var params = {
            chat_id: Telegram.to,
            text: Telegram.message,
            disable_web_page_preview: true,
            disable_notification: false
            },
            data,
            response,
            request = new HttpRequest(),
            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, '<TOKEN>'));
            Zabbix.log(4, '[Telegram Webhook] params: ' + data);
            response = request.post(url, data);
            Zabbix.log(4, '[Telegram Webhook] HTTP code: ' + request.getStatus());

            try {
            response = JSON.parse(response);
            }
            catch (error) {
            response = null;
            }

            if (request.getStatus() !== 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 + '.';
            }

            Comment


            • mfortes
              mfortes commented
              Editing a comment
              No seu caso, tentou usar HTML no lugar de Markdown ?
          • edsonwolf
            Junior Member
            • Dec 2021
            • 4

            #7
            Também estou com o mesmo problema na versão, zabbix-5.4.7-r0, já mudei pra Markdow, HTML e não acha o chat. Fiz um novo bot e nada, no log do zabbix aparece assim:
            Media type test log
            00:00:00.000 [Debug] [Telegram Webhook] URL: https://api.telegram.org/bot<TOKEN>/sendMessage
            00:00:00.000 [Debug] [Telegram Webhook] params: {"chat_id":"{ALERT.TO}","text":"{ALERT.SUBJECT} \n{ ALERT.MESSAGE}","disable_web_page_preview":true,"d isable_notification":false}
            00:00:00.772 [Debug] [Telegram Webhook] HTTP code: 400
            00:00:00.772 [Debug] [Telegram Webhook] notification failed: Bad Request: chat not found
            No lugar do <TOKEN>, não teria que aparecer o meu?

            Desde já agradeço.

            Comment

            • jpereirasilva
              Junior Member
              • Mar 2022
              • 5

              #8
              Olá pessoal, consegui resolver da seguinte forma:

              Click image for larger version

Name:	Untitled-1.png
Views:	4828
Size:	50.7 KB
ID:	442358


              Depois na edição do arquivo fiz a seguinte alteração:

              Click image for larger version

Name:	Untitled-2.png
Views:	4799
Size:	64.3 KB
ID:	442359

              Comment


              • Vinicius Souza
                Vinicius Souza commented
                Editing a comment
                A sua solução funcionou perfeitamente
            • paccojp
              Junior Member
              • Oct 2022
              • 1

              #9
              Eu estava com o mesmo problema, fiz a alteração e funcinou, muito obrigado!

              Comment

              Working...