ASTNAGIOS 2.0 + FAN - Solução completa para monitoramento

gnu

Apresento minhas experiências com o FAN, assim como a segunda versão do script de integração Asterisk + Nagios, o qual já apresentei em artigo anterior.

[ Hits: 22.280 ]

Por: Sidney Alexandre Pagel em 06/04/2015


O Asterisk



O arquivo gerado pela aplicação PHP terá sete linhas, com o seguinte formato:

1. Channel: OOH323/XXXXXXXX@Avaya
2. WaitTime: 60
3. set: host=SERVIDOR_BANCO_POSTGRES
4. Extension: 10
5. set: id=2
6. set: id_evento=338
7. Context: astnagios

Onde:
  • Linha 1 - canal e telefone
  • Linha 2 - tempo que ficará chamando antes de considerar não atendido
  • Linha 3 - variável que será utilizada pelo contexto, que no caso contém o nome do host que se encontra indisponível
  • Linha 4 - extensão responsável pela ligação
  • Linha 5 - id do colaborador para quem a ligação está sendo efetuada. Também será utilizada pelo contexto no Asterisk
  • Linha 6 - id do evento. Também será utilizada pelo contexto no Asterisk
  • Linha 7 - nome do contexto em que a ligação deverá ocorrer.

Quando o Asterisk receber o arquivo, automaticamente procederá seu processamento. Assim que o destinatário atender o telefone, o fluxo obedecerá o seguinte contexto:

[astnagios]

;ERROS DE CHAMADA
* as razões são parte da aplicação Asterisk. Cada razão de falha de ligação é relacionado a um código
exten => failed,1,NoOp(A ligacao falhou)
exten => failed,n,GotoIf($[${REASON}=1]?1)
* Se falhar devido à razão 1, execute a linha 1
exten => failed,n,GotoIf($[${REASON}=3]?3)
* Se falhar devido à razão 3, execute a linha 3
exten => failed,n,GotoIf($[${REASON}=5]?5)
* Se falhar devido à razão 5, execute a linha 5
exten => failed,n,GotoIf($[${REASON}=8]?7)
* Se falhar devido à razão 8, execute a linha 7

;[reason4]
exten => failed,1,NoOp(OCUPADO OU NUMERO INVALIDO)
* Imprime na tela de command line do asterisk a mensagem entre parênteses
exten => failed,2,Goto(hang_astnagios,10,1)
* vai para o contexto hang_astnagios, na linha 10

;[reason5]
exten => failed,3,NoOp(NAO ATENDE)
* Imprime na tela de command line do asterisk a mensagem entre parênteses
exten => failed,4,Goto(hang_astnagios,10,1)
* vai para o contexto hang_astnagios, na linha 10

[reason3]
exten => failed,5,NoOp(OUTRAS RAZOES)
* Imprime na tela de command line do asteris a mensagem entre parênteses
exten => failed,6,Goto(hang_astnagios,10,1)
* vai para o contexto hang_astnagios, na linha 10

[reason6]
exten => failed,7,NoOp(CONGESTIONAMENTO)
* Imprime na tela de command line do asteris a mensagem entre parênteses
exten => failed,8,Goto(hang_astnagios,10,1)
* vai para o contexto hang_astnagios, na linha 10

;LIGACAO ATENDIDA
exten => s,1,Answer
* Atende
exten => s,n,WaitExten(2)//
* Aguarda dois segundos
exten => s,n,MP3Player(/opt/php/servidores/audios/${host}.mp3)
* toca o arquivo $host.mp3. A variável $host foi recebida do arquivo .call, na linha 3 (set:host=SERVIDOR_BANCO_POSTGRES)

Explicação: na pasta /opt/php/servidores/audios, foram criados vários áudios MP3, um para cada host crítico que foi selecionado (no caso foram 21 hosts). Nesse áudio, gravei uma mensagem simples, tal como:

"O servidor de banco Postgres deixou de responder."
Os nomes dos arquivos de áudio devem ser idênticos aos nomes que os hosts têm no Nagios Core, para que possamos receber o nome via variável. Meu arquivo de áudio do Postgres, por exemplo, tem o nome "SERVIDOR_BANCO_POSTGRES.mp3".

exten => s,n,WaitExten(2)
* Aguarda mais dois segundos
exten => s,n,Playback(/opt/php/servidores/audios/mensagem)
* Executa um áudio que diz "Se você entendeu a mensagem, tecle 3.
exten => s,n,WaitExten(10)
* Aguarda 10 segundos. Se o usuário não teclar 3 nesse tempo, ele repete as mensagens.
exten => s,n,MP3Player(/opt/php/servidores/audios/${host}.mp3)
* toca o arquivo $host.mp3. A variável $host foi recebida do arquivo .call, na linha 3 (set:host=SERVIDOR_BANCO_POSTGRES)
exten => s,n,WaitExten(2)
* Aguarda dois segundos
exten => s,n,Playback(/opt/php/servidores/audios/mensagem)
* Executa um áudio que diz "Se você entendeu a mensagem, tecle 3.
exten => s,n,WaitExten(10)
* Aguarda 10 segundos.
exten => h,n,Goto(hang_astnagios,10,1)
* Nada aconteceu. Provavelmente caiu em caixa postal. Será executada a linha 10 do contexto hang_astnagios
exten => 3,1,Goto(teclou3,3,1)
* Se o usuário teclou 3, o fluxo é direcionado para o contexto "teclou3", na linha 3.

[teclou3]
exten => 3,1,NoOp(Teclou 3)
* Imprime na tela do command line do asterisk a mensagem entre parênteses.
exten => 3,2,System(/usr/bin/php /opt/php/servidores/insert.php ${id} ${id_evento})
* Executa a aplicação php chamada "insert.php", com dois parâmetros, id e id_evento, que foram recebidos do arquivo call ( set: id e set_id_evento), com id sendo a identificação do responsável, e id_evento a identificação do evento na tabela do banco;
exten => 3,3,PlayBack(/opt/php/servidores/audios/responsavel)
* Executa um áudio que diz "Você foi registrado como responsável".
exten => 3,4,System(/usr/bin/php /opt/php/servidores/hangup.php)
* Executa a aplicação "hangup.php", cujo código fonte será exibido logo adiante.

[hang_astnagios]
* Contexto de desligamento
exten => 10,1,NoOp( HANGUP ASTNAGIOS )
* Imprime na tela do command line do asterisk a mensagem entre parênteses.
exten => 10,2,Hangup()
* Executa o hangup da ligação.

Página anterior     Próxima página

Páginas do artigo
   1. A descoberta
   2. Mãos à obra
   3. Cadastrando... cadastrando...
   4. Os serviços
   5. Passando tudo para o Nagios
   6. Os hosts críticos - Algo a mais
   7. A definição
   8. Fazendo acontecer
   9. A configuração dos hosts críticos
   10. O banco de dados e a aplicação
   11. Os fontes...
   12. O Asterisk
   13. Mais fontes...
Outros artigos deste autor

NagVis - Gestor de mapas pra lá de especial

O software livre na administração pública

Pequena solução para backup em redes mistas

Integrando Nagios com Asterisk

Jogando pesado na segurança de seu SSH

Leitura recomendada

LaTeX - um poderoso diagramador de textos (parte 1)

I Encontro da Comunidade Viva o Linux

Elastix - Instalando, criando ramais e realizando ligações SIP Trunk Vono e FaleViper

Multiterminais em um PC

UltraSurf - Bloqueio definitivo

  
Comentários
[1] Comentário enviado por removido em 06/04/2015 - 12:55h

Artigo com bastante informação, muito legal mesmo.
------------------------------------------------------
Keep it Simple, Stupid - UNIX Principle.

[2] Comentário enviado por danniel-lara em 07/04/2015 - 08:34h


Parabéns ótimo artigo

[3] Comentário enviado por Donizetti em 12/04/2015 - 13:01h

Isso sim é o tipo de informação que faz diferença.

[4] Comentário enviado por gnu em 13/04/2015 - 11:53h


Muito obrigado a todos.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts