Pular para o conteúdo principal

Monitoramento de serviço com protocolo UDP no Zabbix

A partir do questionamento de um colega na lista zabbix-brasil do Yahoo Grupos, resolvi fazer este post para demonstrar que é possível fazer o monitoramento de serviços que utilizam o protocolo UDP no Zabbix.

Algumas considerações:

  • O suporte a este tipo de checagem está disponível desde a versão 1.8.4
  • Apenas os SO's GNU/Linux 2.4 e 2.6, FreeBSD, Solaris e Mac OS X são suportados

O monitoramento feito pelo Zabbix de um serviço que utiliza o protocolo UDP é bem simples, pois o servidor irá apenas verificar se a porta do serviço está ou não aberta.


O único detalhe, é que a chave não está listada nos itens padrões para ser selecionado (a galera que desenvolve deu um vacilo, e ainda brigaram com o colega que abriu uma thread desse esquecimento, pois nem bug é). Portanto, ao incluir um item para ser monitorado, deve-se digitar a chave net.udp.listen[porta]. Esta é a única chave relacionada ao protocolo UDP disponível no Zabbix. O UDP é um protocolo é simples na camada de transporte. Não é um protocolo confiável, por isso não há garantias que um pacote chegará ao seu destino. Por esse motivo, o monitoramento feito pelo Zabbix é simplismente verificar se a porta está listada.

Obs.: é possível fazer um monitoramento mais complexo do protocolo UDP, mas é preciso implementar uma série de controles. Mesmo assim, o Zabbix apenas suportaria utilizando scripts externos via UserParameter.

Para esse post foi utilizada as seguintes configurações:

  • CentOS 6.3 i386 kernel 2.6.32
  • Zabbix 2.0.2 (server e agent)

A princípio, utilizei a ferramenta NMAP para verificar quais portas UDP estavam abertas no sistema.

nmap -sU localhost

Não retornou nenhuma porta aberta. Na máquina de teste já tinha o serviço NTP instalado. Iniciei o serviço e verifiquei novamente com o NMAP.

service ntpd start
nmap -sU localhost
PORT    STATE SERVICE
123/udp open  ntp

Agora temos a porta 123 UDP aceitando conexões.

Criamos o item no Zabbix com os seguintes dados (exibindo apenas os essenciais):

Nome: Serviço NTP
Tipo: Agent Zabbix
Chave: net.udp.listen[123] 


Feito isso, já podemos visualizar os dados recentes, confirmando que o serviço está rodando com o valor 1:


Criamos também uma trigger para alertar a ocorrência de queda no serviço:
Nome: Serviço NTP não está em execução
Expressão: {Zabbix server:net.udp.listen[123].last(0)}#1

Na visão geral das triggers:


O monitoramento já está em funcionamento. Se pararmos o serviço, o alerta será acionado:
 service ntpd stop

Comprovando que o monitoramento está funcionando, visualizamos novamente os dados recentes com o serviço parado e gravando o valor 0:



Finalizando. Esse monitoramento é muito simples e seu único mistério está na chave que não é listada nos itens padrões. Porém, uma consulta em https://www.zabbix.com/documentation/2.0/manual/config/items/itemtypes/zabbix_agent, exibe a chave a qual necessitamos.

Alguns detalhes devem ser observados caso o item não seja suportado. Além das considerações citadas no início desse post, um comando simples para verificar se o Zabbix consegue coletar o valor da chave é: 

zabbix_get -s localhost -k 'net.udp.listen[123]'
O valor 1 significa que a porta 123 referente ao serviço NTP está aberta. Isso significa que o serviço está em execução. Se o retorno for 0, o serviço não está em execução e, se o retorno for ZBX_NOTSUPPORTED, você não conseguirá monitorar esse item. Sendo assim, é recomendado que você verifique a versão do seu kernel. Se a versão do seu kernel for suportado, sugiro que mesmo assim, faça um teste em uma máquina virtual com outra versão de kernel (mais atualizado), antes de atualizar no servidor de produção.


Comentários

  1. Meu amigo que excelente publicação!! Agradeço!!

    ResponderExcluir
  2. funfou de primeira... valeu!!! poste mais com certeza iremos agradecer!

    ResponderExcluir
  3. Ola, não consigo coletar os dados usando: net.udp.listen[ip-host,porta] ou net.udp.port[ip-host,porta], da sempre Not Supported. alguma solução? obg.

    ResponderExcluir
    Respostas
    1. O parâmetro e apenas a porta que você deseja monitorar. Lembre-se de verificar se o seu sistema suporta esse tipo de verificação, conforme esta informado no inicio do post.

      Excluir
  4. Top Janssen! aqui funcionou perfeitamente, muito obrigado!

    ResponderExcluir
  5. Top Janssen! aqui funcionou perfeitamente, muito obrigado!

    ResponderExcluir

Postar um comentário

Postagens mais visitadas deste blog

Integração Zabbix + GLPI

Versão atualizada Essa atualização é em consequência de pedidos vindo dos gringos e também a pedido da Zabbix SIA por ser o 4.º conteúdo mais popular no recém criado  https://share.zabbix.com/  e o 1.º entre os brasileiros.   Para conferir a lista dos mais populares, acesse  https://share.zabbix.com/popular Há um tempo que eu queria desenvolver algo para integrar o Zabbix a algum outro sistema. Esse ano surgiu uma oportunidade de implementação de alguns sistemas de inventário e gerenciamento de chamados. Logo pensei em fazer uma integração para abertura e fechamento automático dos tickets quando ocorresse algum problema que o Zabbix identificasse. Porém, o meu entusiasmo foi logo caindo quando eu percebi que não era uma coisa tão trivial de se fazer. Pesquisei várias fontes em busca de informações a respeito dessa integração, porém não passavam de tutoriais ensinando como abrir tickets no GLPI enviando um e-mail. Estudando mais um pouco o GLPI, percebi que não era possível

Primeiros passos com API do Zabbix

Bom galera, Faz tempo que não posto nada sobre Zabbix. Então, quis presentear vocês com um conteúdo mais avançado. Espero que ao menos 1 vez por mês coloco mais assuntos como esse no blog. Vou mostrar para vocês como utilizar a API do Zabbix. Antes vou explicar de forma básica o que API para os que não sabem do que se trata. Programadores tem a obrigação de saber.  :P - API  - Application Programming Interface  - é um conjunto de rotinas e padrões estabelecidos por um software. Isso permite que aplicações de terceiros utilizem as funcionalidades oferecidas pelo software.

Usando LSOF para verificar porta usada por determinado processo

Outro dia fui realizar alguns testes em aplicações rodando no JBoss e verifiquei que nenhuma aplicação estava funcionando. Verifiquei no log do JBoss que o serviço iniciava e ocorria vários erros, informando que não conseguia fazer o deploy das aplicações. Mesmo parando o serviço do JBoss, verifiquei com a ferramenta nmap que a porta 8080 continuava aberta.