APIs e Microsserviços

16 set, 2011

Integrando Nagios e Google Maps

Publicidade

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 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 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.

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 esse fim).

O mapa, por padrão, está configurado para utilizar 800×500 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 site www.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.