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.


Share this:

COMENTÁRIOS

4 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