quarta-feira, 21 de junho de 2017

Zabbix Monitorando SIP no Asterisk

Neste post vamos apresentar como monitorar uma linha SIP com o zabbix usando o “UserParameter”, para isso será necessário o zabbix_agent no servidor asterisk, após configurar a ponta do cliente, vamos usar o zabbix_get e assim validar antes de configurar o item e a trigger para alertar no e-mail quando a linha estiver off-line. Lembrando que todos os procedimentos postados são testados em máquinas (VMs) de laboratório e muitas vezes pode sim mudar o caminho de alguns arquivos binários ou confs, não interferindo no resultado final, sempre positivo.

O primeiro passo é entrar no arquivo de configuração "sudoers" para dar permissão ao usuário zabbix,desta forma ele consegue fazer a consulta no asterisk, sem isso o zabbix_server não consegue fazer a consulta.

[root@srvzabbix ~]# vim /etc/sudoers
Defaults:zabbix !requiretty
Cmnd_Alias ZABBIX_CMD = /usr/sbin/asterisk
zabbix   ALL = (other_user)  NOPASSWD: ALL
zabbix   ALL = (root)        NOPASSWD: ZABBIX_CMD

Agora vamos entrar no arquivo “zabbix_agentd.conf” e adicionar o parâmetro que vai consultar no asterisk o status da linha sip, complementando também adicionaremos a linha “EnableRemoteCommands=1” que assim conseguimos do zabbix server executar comandos remoto no zabbix_agent.

# vim /usr/local/etc/zabbix_agentd.conf
ListenPort=10050
StartAgents=3
ServerActive=192.168.1.10
LogFile=/tmp/zabbix_agentd.log
Hostname=ZabbixCliente
Timeout=3
UnsafeUserParameters=1
EnableRemoteCommands=1
UserParameter=coletasip[*],sudo asterisk -rx 'sip show registry'|grep "$1"|cut -c 71-91

Simplificando, o comando “sudo asterisk -rx 'sip show registry' | grep "$1" | cut -c 71-91” nada mais que você executar o comando abaixo no asterisk.

Asterisk -rx ‘sip show registry’ | grep “1121990999” | cut -c 71-91

Resultado será “Registered” ou “unreachable” etc... A ideia é que a coleta seja feita e se caso o valor for diferente que “registered”, alertar no e-mail.

[root@srvzabbix ~]# zabbix_get -s 192.168.1.X -k coletasip[1121990999]
Registered
Acima validamos que o servidor zabbix está apto a fazer a coleta no cliente, agora partimos para o Item que vai fazer a coleta com o tempo determinarmos.

Criando Item:


Analisando a coleta dos dados:


Obserse que o ultimo valor coletado foi "registered".

Histórico de coletas:


Assim que o zabbix receber um valor que for diferente que registrado ele vai tomar uma ação, que é o que vamos fazer a seguir, criar a trigger.

Criando Trigger:


No meu caso eu utilizo a trigger para analisar as ultimas 3 coletas se são diferentes que "registered" ele me envia um alerta.

Agora que a Trigger foi criada, vamos simular a falha na linha SIP, eu mudei o gateway da maquina somente para simular uma queda de link.

Linha Fora:


Zabbix coletando os valores:


Observe que em seguida a linha já fica online, neste período eu já voltei o gateway e normalizou.

Zabbix identificando os Eventos:


E-mail de alerta recebido:


Bom pessoal acredito que finalizamos esse post por aqui, e lembre-se com Zabbix o "Shell" é o limite. Abraços!

Abaixo o Link do site Udemy, aonde encontra treinamentos Zabbix ministrado pelo nosso amigo Janssem, vale apena conferir. Acesse Já com desconto!

Faça parte também da nossa comunidade Zabbix Brasil.

4 comentários:

  1. Fala Juquinha, beleza?

    Preciso de uma ajuda sua em relação a monitorar o asterisk com o zabbix.

    Aqui na empresa temos uma (URA) e preciso monitorar as ligações dela, quantas ligações são feitas por dia por exemplo, será que pode me ajudar nesse quesito ou se existe algum template. Obrigado

    ResponderExcluir
  2. Olá Neto, boa noite.
    Precisa desenvolver isso, é possível. Segue meu contato(janduyeuclides@gmail.com) chame que falamos.

    ResponderExcluir
  3. Boa tarde

    Estou tentando utilizar o seguinte comando

    UserParameter=user.asterisk.active.calls,sudo /usr/sbin/asterisk -rvvvvvx "core show calls" | grep "active calls" | awk '{print }'

    Sempre retorna "ZBX_NOTSUPPORTED"

    ResponderExcluir
    Respostas
    1. Bom dia,

      Seu comando awk '{print }' está incorreto.

      Tente:
      awk '{print $1}'

      Tente dar uma estudada o comando AWK é muito util, porem requer um pouco de conhecimento para saber o que quer coletar.

      Segue um link que pode te auxiliar.
      https://www.gnu.org/software/gawk/manual/gawk.html

      Boa sorte!

      Excluir