quarta-feira, 21 de setembro de 2011

Integrando Nagios e Google Maps

Neste artigo vou relatar um case real que surgiu de uma necessidade real. Serei o mais claro possível e tentarei detalhar ao máximo as informações, justificando a implantação desta integração.
Não vou me ater a descrição, apresentação e instalação do Nagios e do Google Maps, pois são aplicações consagradas pela comunidade e dispensam apresentações. E também pelo fato de não serem o foco principal do artigo. Vou apenas descrever 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 muitos hosts estão sendo monitorados, fica difícil visualizar todos sem ser obrigado a correr a tela manualmente. Sendo assim, pensei: "Seria ótimo se pudesse visualizar toda a rede VPN e seus status em um mapa". Dessa forma, teria uma visão completa, saberia quais VPN's estão desconectadas, teria como agir pro-ativamente e com agilidade e, em caso de queda generalizada em uma determinada área, essa forma de visualização me daria condições de acionar a operadora de internet (que nos atende de forma diferenciada, pela quantidade de links que temos contratados) e passar as informações precisas sobre a área atingida de forma muito mais rápida. Antes fazia esse trabalho manualmente, o que me fazia gastar 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 nessas situações. Então fui à luta e descobri que é possível criar um arquivo kml que pode ser importado para o Google Maps e para o Google Earth, e os pontos são visíveis no mapa terrestre. Mas isso ainda não supria a nossa necessidade, pois teria apenas uma visão simples com a localização geográfica dos pontos sobre o mapa.
Fui novamente à luta e, depois de muito navegar por dezenas de páginas internacionais, já que 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 esse fim). O código-fonte pode ser baixado emhttp://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 My Geo Position;
  • 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, ela 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":
Essa chave que informada será utilizada mais adiante.
Descompacte-o em qualquer diretório de sua preferência (também utilizei o /downloads para esse 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.
Mas essa 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 os 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.
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 os 2 passos acima, pois o arquivo compilado já será instalado por padrão.
A integração com o Google Maps está pronta, resta indicar os pontos no mapa.

Indicando os hosts no mapa

Para indicar os hosts no mapa, utilizaremos as coordenadas obtidas pelo sitewww.mygeoposition.com e a chave da API que foi gerada para o servidor, como mencionei no início deste artigo e como mostra a imagem abaixo:
Crie o arquivo /usr/local/nagios/etc/location.cfg e insira as informações como no modelo abaixo:

## Arquivo /usr/local/nagios/etc/location.cfg ##

# Esta definição é única no arquivo
define default {
     key         chave_gerada_para_o_servidor
     zoom         13
     lat         38.706932
     long         -9.135632
}

# Cada host deve possuir esta definição
define location {
     host_name      nome_do_host_cadastrado
     notes         informação_adicional
     lat         51.500152
     long         -0.126236
}
Definições do arquivo location.cfg.
Seção define default:
  • key: Chave gerada pelo Google Maps para utilização da API;
  • zoom: Nível de zoom que o mapa será apresentado (altitude);
  •  lat e long: Posicionamento geográfico que será o centro do mapa (latitude e longitude).
Seção define location:
  • host_name: Nome do host (esse hostname deve existir nas configurações do Nagios);
  • notes: Informações que serão apresentadas no balão quando o marcador for clicado e pode interpretar tags html;
  • lat e long: Posicionamento geográfico do host (latitude e longitude).
Agora dê permissões aos arquivos com os comandos:
# chown nagios.nagios /usr/local/nagios/sbin/statusmap.cgi
# chown nagios.nagios /usr/local/nagios/etc/location.cfg
E por fim recarregue o Nagios.
Se o Nagios já estiver executando:

# service nagios reload
 
Se o Nagios estiver parado:

# service nagios start

Visualizando os hosts no mapa

Acesse a interface do Nagios utilizando o nome registrado para a API (lembre-se de que não funcionará se for acessado por IP), no nosso exemplo: http://nagiosserver/nagios 
No menu lateral, clique em Map, e os hosts serão apresentados no mapa com seus devidos status.

Dica

Para ter uma melhor visualização do mapa, customizei-o para abrir em uma janela separada da interface do Nagios, assim:
Edite o arquivo /usr/local/nagios/share/side.php e altere a linha 41 para que fique assim:

<li><a href="<?php echo $cfg["cgi_base_url"];?>/statusmap.cgi?host=all"target="target="_blank<?php  echo $link_target;?>">Map</a></li>
Também configurei para que o status map padrão seja o Google Maps editando o arquivo/usr/local/nagios/etc/cgi.cfg e alterando a diretiva default_statusmap_layout de 5 para 7.

Concluindo

Pronto, já pode aproveitar mais esta excelente funcionalidade do Nagios: alertas de status dos hosts no Google Maps.
Espero que seja de utilidade para a comunidade e agregue valor à TI como agregou para a empresa em que trabalho, proporcionando mais agilidade nesse tipo de ocorrência.

Nenhum comentário :

Postar um comentário

Total de visualizações de página