ZABBIX - Alertas de Ligações Via Asterisk
ZABBIX - Alertas de Ligações Via Asterisk
ZABBIX - Alertas de Ligações Via Asterisk
Alertas de ligações
via Asterisk
Introdução 2
Requisitos 3
Instalação Script AGI Googletts 3
Instalação Script de chamadas via Asterisk 4
Configurações Asterisk 6
Configuração Front-End 9
Observações Gerais 11
Conclusões 12
1
Introdução
A proposta deste projeto foi desenvolver um script, onde em caso de alguns alertas
específicos do Zabbix, recebemos uma ligação via celular/ramal.
Este recurso mostrou ser útil devido a facilidade de comunicar certos tipos de
incidentes críticos, onde as equipes respinsáveis são comunicadas mais rapidamente,
reduzindo o tempo de uma possível indisponibilidade.
Também podemos usar este recurso para escalonar algum assunto para um
supervisor/coordenador/gerente.
2
Requisitos
Para que essa integração funcione, devemos utilizar um script AGI do Google TTS para
Asterisk desenvolvido por Lefteris Zafiris, onde pode ser acessado pelo endereço abaixo:
https://github.com/zaf/asterisk-googletts
Exemplo no CentOS 7:
Copiar o arquivo googletts.agi do Git acima, para o diretório agi-bin do seu asterisk.
- Normalmente este diretório fica em /var/lib/asterisk/agi-bin, porém caso você tenha
uma instalação customizada, você pode conferir o diretório AGI acessando os
detalhes em /etc/asterisk/asterisk.conf
agi(googletts.agi,"text",[language],[intkey],[speed])
3
Instalação Script de chamadas via Asterisk
Copiar o arquivo asterisk_call.sh do script de chamadas para o diretório de alertas
do seu Zabbix, usualmente: /usr/lib/zabbix/alertscripts/
Dar permissão de execução para o arquivo (# chmod 755 asterisk_call.sh)
#!/bin/bash
# **************************************************************************
#
# Script de ligação via asterisk para alertas enviados pelo Zabbix
#
# Ligação realizada pelo canal KHOMP, caso utilize outro canal, necessário
# alterar no Script abaixo no item CANAL.
#
# Autor: Fabricio Guimarães
#
# **************************************************************************
4
Configurações Zabbix Server
Primeiramente devemos instalar o SCP caso não tenha instalado. Utilizaremos este sistema
para copiar os arquivos para o servidor asterisk com segurança automaticamente.Pegando
o exemplo do CentOS, basta executar o comando abaixo:
Para que o script funcione adequadamente, devemos criar uma chave SSH, para que o
servidor do Zabbix consiga enviar o arquivo criado para o servidor do Asterisk sem a
necessidade de autenticação e confirmação de usuário/senha. Para isso, acessamos a
pasta onde fica a chave SSH, normalmente:
#cd /root/.ssh/
Executamos o comando para criar a chave SSH que queremos. Este comando cria uma
chave RSA de 2048 bits, o que normalmente é segura para a maioria dos casos. Você pode
opcionalmente passar o flag (-b 4096) para criar uma chave mais extensa de 4096 bits.
#ssh-keygen -t rsa
Será solicitado o local onde deseja salvar a chave, basta deixar em branco e dar um Enter,
Se você tiver gerado um par de chaves SSH anteriormente, você pode ver o seguinte
prompt:
Se você escolher sobrepor a chave no disco, você não poderá autenticar usando a chave
anterior mais. Seja bastante cuidadoso quando selecionar yes, uma vez que esse é um
processo destrutivo e que não pode ser revertido.
Digite uma frase de segurança caso queira. Ou basta dar um Enter e deixar em branco.
Agora você tem uma chave pública e uma privda que você poderá utilizar para autenticar. O
próximo passo é colocar a chave pública no seu servidor Asterisk.
Rode o comando abaixo para copiar o arquivo .pub para o servidor asterisk.
5
Configurações Asterisk
Após realizar os ajustes necessários no servidor do Zabbix, que será o responsável por
executar o Script de ligação, devemos fazer alguns ajustes no servidor do Asterisk para que
as ligações saiam sem problemas.
No inicio deste tutorial, um dos requisitos para o funcionamento desta funcionalidade, foi a
instalação do script AGi de ligações utilizando o Google TTS.
Devemos agora validar se a chave pública gerada no servidor do Zabbix, está no local
correto no servidor do Asterisk.Basta acessar o diretório padrão:
#cd /root/.ssh/
Para mostrar o conteúdo da sua chave id_rsa.pub, digite isto em seu computador local:
Agora você pode criar ou modificar o arquivo authorized_keys dentro desse diretório. Você
pode adicionar o conteúdo do seu arquivo id_rsa.pub ao final do arquivo authorized_keys,
criando-o se necessário, utilizando este comando:
6
chmod -R go= ~/.ssh
Isto remove recursivamente todas as permissões “group” e “other” para o diretório ~/.ssh/.
Se você estiver utilizando a conta root para configurar chaves para uma conta de usuário, é
importante também que o diretório ~/.ssh pertença ao usuário e não ao root:
Com essa configuração, o servidor do Zabbix irá conseguir copiar o arquivo de ligação .call
para o servidor do Asterisk sem a necessidade de autenticação.
Agora devemos criar no crontab, um job para mover os arquivos da pasta temporária para
para a pasta Outgoing do Asterisk, para que o mesmo faça a ligação para nós.
Temos a necessidade de realizar essa movimentação, pois o Asterisk pode ler o arquivo a
qualquer momento na pasta Outgoing (Normalmente é instantâneo). Caso utilizemos o
comando CP, corre o risco de o Asterisk ler o arquivo quanto ele está 50% escrito, o que
fará com que a ligação falhe.
O comando MV, move o inode do arquivo, fazendo com que ele apareça por completo na
pasta.
Agora que os scripts estão ajustados, devemos criar um contexto no plano de discagem do
Asterisk para que a ligação seja feita da maneira que queremos.
Abaixo podemos ver que há um contexto criado com o nome zabbix (nome este que
definimos no script no servidor do Zabbix Server)
Ele irá:
- Atender a ligação
- Converter a mensagem de texto para voz, utilizando o Google TTS
- Perguntar se deseja repetir a mensagem ou não.
- Caso digite 1, a mensagem será repetida e depois encerrada.
- Caso digite 2, irá retornar outra mensagem que pode ser customizada.
7
[zabbix]
;Simple speech recognition
exten => zabbix,1,Answer()
exten => zabbix,n,agi(googletts.agi,${MESSAGE},pt-br)
exten => zabbix,n,Wait(2)
exten => zabbix,n,agi(googletts.agi,"Para repetir a mensagem, digite 1. Para mandar o
cara do zabbix ir para a esquina, digite 2",pt-br)
exten => zabbix,n,WaitExten(5)
exten => zabbix,n,Hangup()
8
Configuração Front-End
Com a parte de scripts configuraad, devemos agora configurar nosso Front End para que os
alertas sejam enviados para os scripts e feitas as ligações.
No User, definimos o número para onde será feita a ligação. (Pode ser que precise
adicionar ou não a operadora, depende do seu plano de ligações)
9
Agora vamos para a criação da Action que irá disparar o envio da ligação.
Colocamos as condições que foram de sua preferência.
10
Observações Gerais
- Deverá instalar o script AGI para converter texto para voz utilizando o Google TTS
- Deverá criar o script no servidor do Zabbix
- Deverá criar a chave SSH para a copia de arquivos sem pedir senha
- Deverá aplicar a chave publica no servidor do PABX
- Deverá configurar o Dialplan do Asterisk
- Deverá configurar uma nova Media Type no Front End do Zabbix
- Deverá configurar o telefone em um usuário
- Deverá criar a Action com o alarme
Este Script não deve ser executado em ambiente produtivo sem os devidos testes,
não me responsabilizo pela utilização incorreta deste material.
11
Conclusões
Este script foi criado devido a uma necessidade específica na empresa onde trabalho, para
comunicar o plantonista caso algum alarme de alta criticidade seja acionado, e não
tenhamos tempo de aguardar a abertura de um chamado e que a nossa Central de
atendimento N1 faça a primeira análise e posterior acionamento.
Este foi o primeiro modelo do Script, pode ser que seja necessário melhorar para que fique
mais genérico, atendendo a todos.
Caso tenha algum problema ou sugestão de melhoria, pode enviar um Telegram para
@theguima para conversarmos e melhorar a solução.
Obrigado
12