O artigo apresenta uma solução para envio de e-mails pelo Zabbix via protocolo SMTPS, ou seja, e-mails com criptografia
na porta 587 (Postfix + Gmail).
Em primeiro lugar gostaria de dizer que estou muito feliz por contribuir com o meu primeiro artigo. Sempre quis contribuir, mas toda vez que descobria algo novo, alguém já o tinha descoberto antes ou já tinha contribuído com algo similar. Desta vez, acredito que minha contribuição será no mínimo inovadora.
Recentemente instalei e configurei o ZABBIX 2.4 no ambiente que trabalho. Desde a versão antiga que trabalhara, versão 2.0, verifiquei que o ZABBIX, mesmo na sua versão mais recente, só envia alertas utilizado o protocolo SMTP (porta 25). O problema é que foi determinado pela CGI no Brasil o bloqueio da porta 25 (SMTP) pelos provedores de internet, e mesmo desconsiderando essa decisão, os grandes provedores de e-mails não mais utilizam esse protocolo, passando utilizar o SMTPS portas 587 ou 465 para envio de e-mails por medidas de segurança e redução de SPAM (Gmail, Hotmail, Yahoo).
Desta forma não temos como fugir, tivemos que fazer a alteração de todos os nossos serviços que utilizavam a porta 25 para a porta 587, porém há aplicativos como o ZABBIX que não possui suporte para isso, pois não se trata simplesmente de alterar a porta. O SMTPS exige autenticação e trabalha com parâmetros diferentes do SMTP, por isso é necessário que a aplicação tenha suporte.
Busquei várias alternativas na internet, mas nenhuma solução funcionou. Existem diversos tutorias do ZABBIX utilizando SendEmail para enviar e-mails, mas não consegui fazê-lo funcionar de jeito nenhum. Até consegui fazê-lo funcionar, mas de uma forma bem rústica. O alerta enviava apenas "SERVIDOR COM PROBLEMA", mas isso não basta. Tenho vários servidores, preciso saber qual deles deu problema e qual o tipo de problema. Então comecei a levantar soluções.
Hipótese 1
Armazenar as variáveis das TRIGGERs do ZABBIX em um arquivo e encaminhar em anexo via SendEmail.
Pareceu a solução mais eficaz no momento, mas não imagino como capturar as variáveis das TRIGGERs do ZABBIX, tentei de diversas formas mas sem sucesso.
Hipótese 2
Alterar o código fonte do ZABBIX para incluir a função de encaminhar e-mails via SMTPS.
Pelo pouco que entendi analisando o código do ZABBIX, ele armazena tudo que é configuração no banco de dados MYSQL, e conforme as funções vão sendo chamadas ele vai montando a informação fazendo consultas nas tabelas do banco e combinando com as variáveis PHP. É um código bem complexo para mim, se eu tivesse muito familiaridade com PHP, talvez seria mais fácil, mas mesmo assim eu levaria muito tempo para entender o código, além disso, alterar o código fonte de uma aplicação tão componenizada como essa é sempre um grande risco de interferir em alguma outra função.
Hipótese 3
Configurar um servidor POSTFIX escutando a porta 25 e que redirecione e-mails para a porta 587. Sem dúvidas a solução mais eficiente que pensei. Tão óbvia, que não sei porque pensei nas outras duas soluções primeiros. As outras duas soluções resolveriam apenas o problema no ZABBIX, já esta terceira solução resolverá o problema de todas as aplicação que não possuem suporte ao SMTPS.
[2] Comentário enviado por hacktheplanet em 30/12/2014 - 13:01h
Obrigado. Eu estava tentando criar uma action para pegar as variáveis {TRIGGER.STATUS} e {TRIGGER.NAME} pra começar, e saber pelo menos qual o servidor parou.
[5] Comentário enviado por thiagosabo em 17/02/2017 - 01:53h
Parabéns pelo post!!!
Considerando um monitoramento de link, onde este passa por oscilações (queda de energia e etc), seria possível inserir uma trigger com um time mínimo de indisponibilidade? Ex: Um link ficou inoperante por 10 min, neste tempo não haveria envio de notificação, apenas à partir de 11 min de indisponibilidade?
[6] Comentário enviado por hacktheplanet em 17/02/2017 - 06:50h
Prezado Thiago,
Sim há essa possibilidade. O amigo terá que montar uma nova trigger para disparar a notificação por meio de desses parâmetros que você informou. E associar a nova trigger ao host, apenas por questõs de organização. Digamos que o nome do Host seja "link". A trigger ficaria da seguinte forma. A expressão quer dizer que se o link testar o ping durante 11 minutos, a resposta de pacotes for igual a zero e essa condição for verdadeira uma vez, será disparada a trigger com a notificação. Boa sorte.