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: 16.959 ]

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

Configurando um domínio pelo serviço ipturbo empresarial (Brasil Telecom)

Integrando Nagios com Asterisk

Pequena solução para backup em redes mistas

Jogando pesado na segurança de seu SSH

O software livre na administração pública

Leitura recomendada

Criação de um repositório (mrepo) - Red Hat e CentOS 5 (com atualização na RHN para RedHat)

Usando OpenBSD como desktop

Cover Thumbnailer - Miniaturas de CDs nas pastas de músicas e imagens, miniaturas de vídeos com o Totem

História da informática: Um pouco de datas e especificações

KnowledgeTree - Um Gerenciador Eletrônico de Documentos funcional

  
Comentários
[1] Comentário enviado por erixtech 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
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts