Introdução
O que passo á relatar é um case real que surgiu de uma necessidade real. Procurei ser o mais claro e detalhar ao máximo as informações, justificando a
implantação desta integração.
Não vou me ater á descrição, apresentação e instalação do Nagios (
http://www.nagios.org) e do Google Maps
(
http://maps.google.com) pois são aplicações consagradas pela comunidade e dispensam apresentações, além
de não ser o foco principal do artigo.
Apenas descreverei o case que agregou agilidade e pró-atividade no monitoramento de uma rede VPN espalhada por 3 cidades.
Na empresa em que trabalho temos centenas de pontos conectados via VPN site-to-site interligados por roteadores CISCO e que são monitorados pelo
Nagios.
Porém, quando se tem muitos hosts sendo monitorados, fica difícil visualizar todos os hosts sem ser obrigado á correr a tela manualmente.
Sendo assim pensei: "Seria ótimo se pudesse visualizar toda a rede VPN e seus status em um mapa". Teria visão completa e saberia quais VPN's estão
desconectadas, teria como agir pro-ativamente e com agilidade, e que, em caso de queda generalizada em uma determinada área, daria condições de
acionar a operadora de internet (que nos atende de forma diferenciada, pela quantidade de links que temos contratados) e passar informações precisas
sobre a área atingida de forma muito mais rápida. Antes fazia esse trabalho manualmente e, quer queira, quer não, precisava dedicar vários minutos
para levantar todas as informações necessárias para só então repassá-las á operadora.
Uma unidade parada significa transtorno, prejuízo e clientes insatisfeitos e cada minuto é muito significativo nestas situações.
Então fui á luta e descobri que é possível criar um arquivo
kml que pode ser importado para o Google Maps e Google Earth, e os pontos são
visíveis no mapa terrestre.
Ótimo. Mas não supria nossa necessidade. Teria apenas uma visão simples com a localização geográfica dos pontos sobre o mapa.
Fui novamente a luta, e depois de muito, muito, muito navegar por dezenas (e por quê não dizer centenas) de páginas internacionais (não encontrei
nenhum material em páginas nacionais), encontrei uma forma interessante de fazer essa integração e que nos dava a visão dos pontos exatamente
como precisávamos, apresentando os hosts como pontos geográficos no mapa em seus estados UP e DOWN em verde e vermelho, respectivamente.
Sem mais delongas, mãos á obra.
Requisitos
- Nagios 3.2.3 instalado e funcional (não testei em outras versões), com seu código fonte descompactado em um diretório de sua preferência (criei o
/downloads para este fim). O código fonte pode ser baixado em http://prdownloads.sourceforge.net/sourceforge/nagios/nagios-3.2.3.tar.gz;
- Localização geográfica de cada ponto a ser monitorado, utilizando para conseguir essas informações o site www.mygeoposition.com;
- Chave da API gerada para o servidor a partir do site http://code.google.com/intl/pt-BR/apis/maps/signup.html (atenção ao gerar a chave da API, a chave deve ser gerada
para o nome do servidor e este deve ter resolução de nomes por DNS ou inserido no arquivo hosts, não funcionará se o servidor Nagios for acessado via
IP, aconselho utilizar DNS). Neste artigo utilizei o nome fictício "http://nagiosserver" para o servidor Nagios;
- Acesso á internet para o servidor Nagios (para apresentação do mapa).
Instalação
Acesse a URL do Google Maps citada acima para gerar a chave da API:
Concorde com os termos, informe o nome do servidor como na imagem e clique em "Gerar chave da API".
Esta chave informada será utilizada mais adiante.
Baixe o arquivo
statusmap.c.gz a partir do link
https://www.monitoringexchange.org/attachment/download/Utilities/AddOn-
Projects/Frontends/Google-Map-statusmap-for-Nagios-III/statusmap.c.gz.
Descompacte-o em qualquer diretório de sua preferência (também utilizei o /downloads para este fim).
O mapa, por padrão, está configurado para utilizar 800x500 pixels. Altere como desejar e melhor lhe convir.
Particularmente, preferi utilizar toda a extensão da tela, apenas adequando a área vertical para se encaixar na resolução do meu monitor, a área
horizontal ocupará sempre toda extensão do monitor.
Esta alteração é opcional, ignore se quiser manter o padrão citado acima.
Abra o arquivo
statusmap.c e edite a linha 1582 para que fique como abaixo:
printf("<div id='map' style='width: 100%; xunits: fraction; height: 500px'></div>");
Correção de bug:
Edite as linhas 2353 e 2355 para fiquem da seguinte forma:
Linha 2353:
rc = sscanf(buf, "%*[ \t]%[^ \t]%*[ \t]%[^\r\n]", key, value);
Linha 2355:
rc = sscanf(buf, "%[^ \t]%*[ \t]%[^\r\n]", key, value);
Salve e saia.
Copie o arquivo editado para o diretório
/downloads/nagios-3.2.3/cgi/ e em seguida execute como root:
# make statusmap.cgi
Copie o arquivo
statusmap.cgi que foi gerado para o diretório da instalação do Nagios com o comando:
# cp statusmap.cgi /usr/local/nagios/sbin/
Obs.: Se ainda não estiver com o Nagios instalado, apenas copie o arquivo statusmap.c para o local indicado acima e siga com a instalação padrão do
Nagios, não sendo necessário executar estes 2 passos acima, pois o arquivo compilado já será instalado por padrão.
Baixe as imagens dos links abaixo dentro do diretório /usr/local/nagios/share/images:
# wget http://www.masterservers.com.br/extras/shadow.png
# wget http://www.masterservers.com.br/extras/green.png
A integração com o Google Maps está pronta, resta indicar os pontos no mapa.