Configurando Zabbix para enviar SMS pela Agenda do Google

By | 28 de maio de 2013

   Irei mostrar nesse tutorial como configurar o Zabbix para enviar SMS utilizando a Google Agenda. Para isso, iremos utilizar o GoogleCL (Command line tools for the Google Data APIs) para registrar o evento na agenda, e consequentemente enviar o SMS.

    O tutorial abaixo foi testado em diferentes distribuições e versões do Python,  e a versão do Zabbix utilizada foi a 2.0.6.

    Não irei abortar os aspectos legais sobre esse método. Cada um é responsável pela utilização de sua conta. Não me responsabilizo por eventuais violação de licenças de uso do Google. Muito embora, não achei nada na política de uso do Google que pudesse tornar esse sistema ilegal.

 Requisitos:

  • Zabbix 1.8 ou posterior;
  • Python, versão de 2.5 à 2.9;
  • Conta Google criada (para seguir a risca esse tutorial será necessário duas contas, uma que criará o evento e outra que receberá a notificação);
  • Conhecimento razoável do Zabbix;

Como funciona?

     O sistema consiste na utilização da Google Agenda para enviar SMS gerados pelo Zabbix, sendo o evento criado pelo googlecl. A sequência é basicamente essa:

  1. Zabbix gera o alerta e executa um script;
  2. O script (que contem um comando do googlecl) cria um evento na agenda do Google;
  3. O Google envia SMS informando que um novo evento foi criado.

     Para essa sequência é necessário ter duas contas do Google: Uma que irá adicionar o evento, e outra que será notificada sobre a criação do evento. Algumas pessoas preferem utilizar uma conta só, configurando o evento para alguns minutos posteriores (normalmente 30min.) e utilizando o lembrete. Se você achar que esse método é mais conveniente para seu uso, você pode pesquisar no histórico de mensagens da Comunidade Zabbix Brasil, certamente irá achar bastante coisa lá.

Configurando o GoogleCL

Instalando gdata-python

# wget https://gdata-python-client.googlecode.com/files/gdata-2.0.17.tar.gz
# tar zvfx  gdata-2.0.17.tar.gz
# cd gdata-2.0.17
# python setup.py install

Instalando GoogleCL

# cd ../
# wget https://googlecl.googlecode.com/files/googlecl-0.9.14.tar.gz
# tar zvfx googlecl-0.9.14.tar.gz
# cd googlecl-0.9.14
# python setup.py install

Os passos seguintes precisam ser executados com o usuário “zabbix” (usuário que o serviço do zabbix utiliza). Antes de mais nada, deve ser verificado se o usuário zabbix tem permissão para gravar em seu diretório Home, e se possui shell válida para acessa-lo. Grande parte dos problemas com o GoogleCL são por falta de permissão no diretório home.  O GoogleCL cria um arquivo de configuração em ~/.config/googlecl/config, e caso não tenha permissão para criar esse arquivo ele não conseguirá criar o evento.

Se você instalou o Zabbix por meio de pacotes pré-compilados, certamente terá que rever a permissão na home e validade da shell do usuário, veja:

# cat /etc/passwd | grep zabbix
zabbix:x:498:498:Zabbix Monitoring System:/var/lib/zabbix:/bin/false

Nesse caso, /var/lib/zabbix sequer existia, e esse usuário não tem shell válida, o que tornará a configuração inviável. Um ponto importante é que precisamos de shell válida apenas para configurar o GoogleCL, após isso podemos desabilita-lá normalmente.

Prosseguindo, com o usuário zabbix, crie a pasta de configuração do GoogleCL:

$ mkdir -p ~/.config/googlecl

Agora crie o arquivo config conforme abaixo:

$ vi ~/.config/googlecl/config
[GENERAL]
auth_browser = none

Essa opção auth_browser fará com que, ao invés de ele abrir um navegador para a autorização, ele apenas exiba um link. Isso reduz a quantidade de problemas na instalação, além do fato de ser desagradável usar navegador em modo texto.

 [AdSense-A]

Configurando conta Google

Com o usuário zabbix, vamos criar um evento teste para realizar a autorização do GoogleCL na Agenda. O e-mail a utilizar abaixo é o e-mail que fará a criação do evento.

$ google calendar add “teste” -u email@gmail.com

Caso esteja tudo correto, irá retornar algo semelhante á:

Please log in and/or grant access via your browser at:
https://www.google.com/accounts/OAuthAuthorizeToken?oauth_token=xxxxxyyyyyyyyz=default
Then, in this terminal, hit enter.

Abra o link no navegador (de preferência já logado na conta que irá criar os eventos), irá abrir a seguinte tela:

Clique em “Conceder acesso”

O próximo passo é criar uma nova agenda. Clique na seta para baixo posicionada á esquerda de “Minhas Agendas” e clique em “Criar nova agenda”. Digite o nome da nova agenda (nesse caso utilizei “Alertas”), e na parte de baixo da página compartilhe a agenda com o a conta que irá receber a notificação, conforme abaixo:

Agora entre na conta Google que irá receber a notificação. Na tela principal, clique no ícone parecido com uma engrenagem, na parte superior direita da tela, e vá em Configurações.

 

Em “Configurações do Celular” você cadastra o celular que irá receber a notificação.

Depois clique em “Agendas” e em “Lembretes e notificações” da agenda que foi compartilhada.

E marque a opção “SMS” para Novos eventos.

 

 [AdSense-A]

Criando script

Primeiramente, vamos criar o script que criará o evento. Veja se a opção AlertScriptPath está habilitada e para qual diretório ela está setada. No caso abaixo, ela está habilitada e apontando para /usr/lib/zabbix/alertscripts.

# cat /etc/zabbix/zabbix_server.conf | grep Alert | grep -v “^#”
AlertScriptsPath=/usr/lib/zabbix/alertscripts

Você pode colocar nessa opção o diretório que achar melhor, desde que conceda permissão corretamente para o usuário zabbix. No meu caso, irei utilizar esse diretório mesmo.

Crie o script conforme abaixo:

# vim /usr/lib/zabbix/alertscripts/sms.sh
#!/bin/bash
/usr/bin/google calendar add “$2” –cal “Alertas” -u email@gmail.com

Dê permissão de execução ao script:

# chmod +x /usr/lib/zabbix/alertscripts/sms.sh

 

Configurando o Zabbix

Vá em Administraton – Media types  e clique em “Create media type”

Preencha os campos conforme abaixo e salve.

 

Agora basta atribuir a mídia á um usuário. Vá em Administration-Users, selecione o usuário desejado e clique em Media, e clique em “Add”

Selecione a opção “Google-SMS”, criada á pouco, e salve a configuração. O campo “Send to” é obrigatório, porém você pode colocar qualquer coisa, ele não será utilizado.

E por fim, basta ir na ação desejada e selecionar a opção “Google-SMS” nas operações da ação.

 

E pronto!

 

Contornando Problemas

  • Limite de SMS:  Não existe nenhum pré-determinado. Todavia, por experiência própria, percebo que quando ultrapassa os 10 SMSs/dia o “SLA” da entrega cai bastante. Como alternativa para contornar isso, você pode utilizar várias contas para receber o SMS, fazendo uma espécie de “Balanceamento de Carga”.  Para fazer isso, bastam 2 passos:
      1. Para cada conta que for enviar o SMS criar e compartilhar uma Agenda diferente na conta que cria os eventos. Exemplo: A conta que cria os eventos é zabbix@gmail.com, e as contas que irão enviar o SMS são zabbix-sms1@gmail.com e zabbix-sms2@gmail.com. Na conta zabbix@gmail.com crio a Agenda1 e compartilho com zabbix-sms1@gmail.com, e crio a Agenda2 e compartilho com zabbix-sms2@gmail.com.
      2. Faremos uma modificação no script sms.sh, fazendo com que a cada evento ele crie em uma agenda diferente. No exemplo abaixo possuo 4 agendas:
        #!/bin/bash
        cont=`cat cont.txt`
        case $cont in
        1) agenda=Agenda1
        echo “$(($cont+1))” > cont.txt;;
        2) agenda=Agenda2;
        echo “$(($cont+1))” > cont.txt;;
        3) agenda=Agenda3;
        echo “$(($cont+1))” > cont.txt;;
        4) agenda=Agenda4
        echo “1” > cont.txt;;
        esac
        /usr/bin/google calendar add “$2” –cal “$agenda” -u email@gmail.com
  • Evento não cria nem na mão: Grande parte das vezes o problema está relacionado com a permissão no diretório ~/.config do usuário.
  • Evento cria na mão mais no Zabbix não acontece nada: Verifique se no script tem o caminho completo do comando google (normalmente /usr/bin/google). Uma alternativa para contornar tanto esse problema quanto o anterior é rodar o script como usuário root. Nesse caso, terá que configurar o sudo para o usuário zabbix poder utiliza-lo. Na lista houveram várias threads comentando sobre o assunto (veja aqui).

Referencias: