Avaliação da Ferramenta Nagios Diego Graciano Damacena Pós Graduação em Redes e Segurança de Sistemas Pontifícia Universidade Católica do Paraná Curitiba, Fevereiro de 2013 1 Introdução Este artigo o objetivo de demonstrar o uso da ferramenta Nagios. Aplicativo é OpenSource que essencialmente monitora ativos e serviços de rede. Buscando auxiliar o administrador de rede no processo de configuração para a utilização desta ferramenta. Alcançar a consciência imediata de problemas de infraestrutura de TI, assim o tempo de inatividade não prejudicar o seu negócio. Nagios oferece monitoramento completo e alertando para os servidores, switches, aplicações e serviços. Algumas das características do Nagios são: o monitoramento de serviços de rede; monitoramento de recursos de servidores e outros recursos; capacidade de definir hierarquia da rede; notificações imediatas sobre problemas na rede, via e-mail e pager; capacidade de tomar outras medidas de acordo com o problema na rede; interface web com mapa da rede em 2D e 3D, relatórios, gráficos e históricos. É versátil, flexível e verifica constantemente a disponibilidade dos serviços e hosts. Nesta apresentação trataremos apenas dos aspectos básicos da ferramenta, não entraremos em maiores detalhes sobre configurações específicas ou aplicações em ambientes. Todavia, reforçaremos peculiaridades da instalação, com as principais dificuldades encontradas. Descrição do Contexto – Mostrar a necessidade de se usar essa ferramenta para monitoramento de rede e suas principais funcionalidades. Descrição do Projeto – Informações sobre a ferramenta, incluindo descrição, passos da instalação, configuração e funcionalidade, desenvolvido em ambiente virtual simulando um real. Procedimento de Teste e Avaliação – Abordar as principais configurações testadas e os principais recursos de monitoramento. Conclusão – Resumo das informações importantes em todo o artigo desde, instalação, configuração, teste e experiências adquiridas. Referências – Reúne as fontes utilizadas para o desenvolvimento desse artigo. 2 Descrição do Contexto O monitoramento de redes é de suma importância para identificar possíveis falhas em um ambiente. Em mundo corporativo então, exerce um papel fundamental para a administração. Com esta identificação ou alerta gerado previamente, podemos assegurar que haverá um trabalho pró-ativo executado pelas equipes de suporte, que buscam controle e desempenho aceitável. O Nagios, por sua vez, a quem já o conhece, pode deduzir que é uma ferramenta de altíssimo nível quando se trata de monitoramento. Ele coleta as informações dos ativos da rede através do protocolo SNMP que possuem “agentes” configurados para repassar estas informações ao servidor Nagios. Após esta primeira tratativa o Nagios gera arquivos com a referência das MIBs previamente configuradas, e começa então a gerar logs dessa comunicação. Com assas informações obtidas é possível ter uma visão em tempo real de toda a rede, antecipando – se a possíveis falhas através de logs gerados, SMS ou e-mails enviados, visando traçar planos de contingência e auxiliando em projetos de T.I. Entre diversas ferramentas foi escolhido o Nagios pelas seguintes informações: - Age prontamente e executa ações de resolução sobre os problemas, notificando quando é detectado um problema e quando o mesmo é considerado resolvido, reduzindo o tempo de resposta em caso de problemas; - Manutenção preventiva, já que o programa também pode emitir alerta sobre condições anteriores à falha dos serviços; - Monitora toda sua infraestrutura de rede. Capacidade de monitorar vários servidores, agregando posteriormente numa única interface todos os parâmetros monitorados; - Aumento da produtividade dos administradores e analistas, visto que monitora os ativos autonomamente, permitindo também adicionar novos plug-ins; - Integração com plug-ins, que o próprio usuário pode escrever para facilitar e automatizar ainda mais a monitoração de elementos dentro da rede. Estes plug-ins podem ser desenvolvidos nas mais diversas linguagens de programação. - Monitoramento de rede e serviços (SMTP, POP3, HTTP, NNTP, PING, SNMP, etc.); - Monitoramento dos recursos de clientes (carga de processador uso de disco, etc.); - Organização simples de plugins que permite aos usuários desenvolverem seus próprios serviços de checagem; - Checagem paralela de serviços; - Habilidade para definir hierarquia de redes de clientes usando clientes pais (parent hosts), permitindo a detecção e distinção entre clientes que estão desativados e aqueles que estão inalcançáveis; - Notificação de contatos quando problemas em serviços e clientes ocorrerem ou forem resolvidos (via e-mail, pager, ou métodos definidos pelo usuário); - Habilidade para definir tratadores de eventos (event handlers) que serão executados durante eventos de serviços ou clientes na tentativa de resolução de problemas; - Rotatividade automática de arquivos de logs; - Suporte para implementação de clientes de monitoramento redundantes; - Interface web para visualização do status atual da rede, histórico de notificações e problemas, arquivos de log, etc. 3 Descrição do Projeto O projeto do Nagio foi desenvolvido em um ambiente virtual utilizando o VirtualBox sun, simulando um ambiente real com possível expansão. O intuito é criar a instalação e a partir dela expandir para uma aplicabilidade real, em outro ambiente. Para que tudo possa funcionar perfeitamente, se faz necessário a instalação de alguns programas que serão posteriormente detalhados. O Manual do Nagios pode ser baixado do endereço www.nagios.org/docs. O Sistema Operacional utilizado como base para a elaboração desse guia foi o Ubuntu 11.10 com kernel linux 3.0.0-30. 3.1 Pré – Requisitos A única exigência para rodar o Nagios é ter um computador rodando Linux (ou variantes do UNIX) e um compilador C. Você provavelmente necessitará ter o TCP/IP configurado já que a maioria das checagens de serviços serão feitas através da rede. Você não é obrigado a usar os CGIs incluídos com o Nagios. No entanto, se você optar por usá-los, você precisará dos seguintes programas instalados: 1) Um servidor Web (de preferência Apache); 2) Biblioteca GD (gd library) de Thomas Boutell versão 1.6.3 ou superior (exigida pelas CGIs statusmap e trends). 3.2 Instalação 3.2.1 Adição do usuário/grupo 'nagios' ao Sistema #adduser nagios 3.2.2 Download, Descompactação e Instalação do Nagios e dos plugins #mkdir /home/nagios/tmp Fazer o download do Nagios e dos plugins (www.nagios.org/download) para o diretório acima. #cd /home/nagios/tmp #ls -a . .. nagios-3.4.4.tar nagios-plugins-1.4.16.tar.gz Descompactar os arquivos: #tar xvfz <nome_do_arquivo_do_Nagios> (ex.: #tar xvfz nagios-3.4.4.tar.gz) #tar xvfz <nome_do_arquivo_dos_plugins> (ex.: #tar xvfz nagios-plugins-1.4.16.tar.gz) Entrar no diretório do Nagios criado (ex.: #cd /home/nagios/tmp/ nagios3.4.4). Rodar o script de configuração do Nagios (Para ver as opções: #./configure -help): --prefix: diretório de instalação do Nagios; --with-nagios-user: usuário padrão; --with-nagios-group: grupo padrão; --with-htmurl: endereço web de acesso ao Nagios (padrão: http://<endereço_local>/nagios); --with-cgiurl: endereço web dos CGIs (padrão: http://<endereço_local>/nagios/cgi-bin). #./configure --prefix=/usr/local/nagios --with-nagios-user=nagios --with-nagios-group=nagios -with-htmurl=/nagios --with-cgiurl=/nagios/cgi-bin -----------------------------------------------------------------------General Options: ------------------------Nagios executable: nagios Nagios user/group: nagios,nagios Command user/group: nagios,nagios Embedded Perl: no Event Broker: yes Install ${prefix}: /usr/local/nagios Lock file: ${prefix}/var/nagios.lock Init directory: /etc/rc.d/init.d Host OS: linux-gnu Web Interface Options: -----------------------HTML URL: http://localhost/nagios/ CGI URL: http://localhost/nagios/cgi-bin/ Traceroute (used by WAP): /usr/sbin/traceroute ------------------------------------------------------------------------#make all (Compila os fontes) #make install (Instala o programa principal, as CGIs e os arquivos HTML) #make install-init (Instala o script de inicialização em /etc/rc.d/init.d) #make install-commandmode (Instala e configura permissões para o diretório que conterá o arquivo de comandos externos) #make install-config (Instala arquivos de configuração de exemplo [*SAMPLE*] em /usr/local/nagios/etc) Ir para o diretório onde foram baixados os plugins: (ex.: #cd /home/nagios/tmp/nagios-plugins-1.4.16) OBS.: Para poderem ser usados, alguns dos plugins precisam que se tenha instalados no computador certos programas e/ou bibliotecas específicos. No caso da inexistência desses últimos na máquina, os plugins deles dependentes geralmente não são compilados. Destarte, antes de se iniciar a instalação dos plugins é recomendável a leitura do arquivo REQUIREMENTS. Rodar o script de configuração dos plugins (Para ver as opções: #./configure --help): # ./configure --prefix=/usr/local/nagios --with-nagios-user=nagios --with-nagios-grp=nagios -- with-cgiurl=/nagios/cgi-bin --withhtmurl=/nagios #make all #make install OBS.: Caso se experimente algum problema relativo a acesso, pode ser necessário alterar algumas permissões. Diretório de instalação do Nagios (/usr/local/nagios): #chown nagios:nagios /usr/local/nagios Diretório de instalação dos plugins (/usr/local/nagios/libexec): #chown nagios:nagios /usr/local/nagios/libexec Arquivos dos plugins: #chown nagios:nagios /usr/local/nagios/libexec/* Após a instalação serão criados os diretórios abaixo: 3.2.2.1 /usr/local/nagios – bin/ ( Arquivos binários do Nagios ) – etc/ ( Diretório de Configuração ) – sbin/ ( CGI's ) – share/ ( Arquivos HTML ) – var/ ( Diretório de logs ) Erro durante a compilação do nagios-plugins Durante a compilação e instalação dos plugns deparei-me com o seguinte erro. .... check_http.c: erro:: 312:9 (primeiro uso nessa função) não declarado 'ssl_version' .... make [2]: *** [check_http.o] Erro 1 make [2]: Saindo do diretório `/ home/nicadmin/nagios-plugins-1.4.16/plugins ' make [1]: *** [all-recursive] Erro 1 make [1]: Saindo do diretório `/ home/nicadmin/nagios-plugins-1.4.16 ' make: *** [all] Erro 2 A solução é instalar o libssl-dev pacote e a reconfiguração. # apt-get install-dev libssl # ./configure - with-nagios-user = nagios - with-nagios-group = nagios # make # make install 3.2.3 Visão geral dos Diretórios e Arquivos do Nagios /usr/local/nagios/ bin/ etc/ include/ libexec/ sbin/ share/ var/ /usr/local/nagios/bin/nagios nagios nagiostats /usr/local/nagios/etc/ cgi.cfg nagios.cfg resource.cfg htpasswd.users objects/ /usr/local/nagios/etc/objects/ commands.cfg localhost.cfg switch.cfg templates.cfg windows.cfg /usr/local/nagios/sbin/ avail.cgi history.cgi statuswml.cgi config.cgi summary.cgi timeperiods.cfg contacts.cfg status.cgi tac.cgi cmd.cgi outages.cgi statuswrl.cgi extinfo.cgi printer.cfg notifications.cgi showlog.cgi /usr/local/nagios/share/ config.inc.php includes/ media/ side.php contexthelp/ robots.txt ssi/ docs/ js/ rss-corefeed.php stylesheets/ images/ main.php rss-newsfeed.php /usr/local/nagios/var/ archives/ nagios.log retention.dat spool/ nagios.lock status.dat objects.cache index.php rw/ 3.2.4 Configuração da Interface Web – Apache Localizar o arquivo httpd.conf: #find / -name httpd.conf (ex.: /etc/httpd/conf/httpd.conf) # vi /.../httpd.conf (colocar o caminho correto) Editar o arquivo, adicionando as linhas abaixo: ############################################################################# # HTML (http://localhost/nagios) AND CGI APACHE AUTHENTICATION ############################################################################# ScriptAlias /nagios/cgi-bin "/usr/local/nagios/sbin" <Directory "/usr/local/nagios/sbin"> AllowOverride AuthConfig Options ExecCGI Order allow,deny Allow from all AuthName "Nagios Access" AuthType Basic AuthUserFile /usr/local/nagios/etc/htpasswd.users require valid-user </Directory> Alias /nagios "/usr/local/nagios/share" <Directory "/usr/local/nagios/share"> AllowOverride AuthConfig Options None Order allow,deny Allow from all AuthName "Nagios Access" AuthType Basic AuthUserFile /usr/local/nagios/etc/htpasswd.users require valid-user </Directory> ############################################################################# Criar o arquivo com o usuário e senha de acesso ao Nagios: #htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin Reiniciar o Apache: #/usr/sbin/httpd -k restart --> Após isso, já deve ser possível visualizar a interface web do Nagios a partir do endereço http://localhost/nagios no navegador. Entretanto, as CGIs não fornecerão informação alguma (ainda é necessário configurar corretamente o Nagios). OBS.: Caso se experimente algum problema relativo a acesso, pode ser necessário alterar as permissões do arquivo htpasswd.users: #chown apache:apache /usr/local/nagios/etc/htpasswd.users (verificar o usuário e grupo do Apache). Ou #chown nagios.nagios /usr/local/nagios/etc/htpasswd.users 3.2.5 Configurando o Nagios Após a instalação do Nagios e seus Plugins, é necessário configurar conforme a rede. Serão mostrados os principais passos de como é possível e um exemplo de configuração completo. --> Fazer backup dos arquivos dos arquivos principais: #mkdir /usr/local/nagios/etc/original #cp /usr/local/nagios/etc/*.cfg /usr/local/nagios/etc/original 3.2.5.1 NAGIOS.CFG Configurações padrão do Nagios. Precisamos alterar apenas a definição para busca de comandos externos e o formato da data: check_external_commands=0 -> check_external_commands=1 date_format=us -> date_format=euro 3.2.5.2 CGI.CFG Nele ficam as configurações de utilização de arquivos cgi pelo Nagios. Devem ser configurados os parâmetros de autorização de utilização da interface Web. Altere os campos para o nome do usuário cadastros no arquivo /usr/local/nagios/etc/htpasswd.users e assim terão acesso ao sistema, os parâmetros são: authorized_for_system_information=nagiosadmin authorized_for_configuration_information=nagiosadmin authorized_for_system_commands=nagiosadmin authorized_for_all_services=nagiosadmin authorized_for_all_hosts=nagiosadmin authorized_for_all_service_commands=nagiosadmin authorized_for_all_host_commands=nagiosadmin 3.2.5.3 RESOURCE.CGI Configuração de parâmetros de recursos. Por padrão vem definido qual o caminho dos plugins. 3.2.5.4 CONTACTS.CGI define contact{ contact_name login alias Nome do Usuario service_notification_period Periodos definidos em TIMEPERIODS.CFG host_notification_period Periodos definidos em TIMEPERIODS.CFG service_notification_options w,u,c,r ( w=warning / u=unknown / c=critical / r=recoveries / n=none) host_notification_options d,u,r ( d=down / u=notify / r=recoveries / n=none ) service_notification_commands notify-by-email host_notification_commands host-notify-by-email email [email protected] } 3.3 Iniciando o Nagios Após as configurações é necessário iniciar o Nagios. Utilize o comando abaixo para verificar se está correto os arquivos: /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg Se tudo estiver certo, inicie o Nagios com o comando: /etc/init.d/nagios start 4 Procedimento de Teste e Avalição Visão geral do cenário de testes, Objetos a serem monitorados, o Nagios faz a coleta dos dados e resulta em um status de como esta os objetos monitorados. 4.1 Monitorando Hosts Linux É necessária a instalação do addon NRPE para que o Nagios possa executar plugins em hosts remotos. Caso o NRPE não seja instalado, o Nagios não tem acesso a recursos internos do sistema como uso de processador, espaço em disco, uso de memória RAM etc. A figura abaixo demonstra a lógica de funcionamento do NRPE. O servidor Nagios executa o plugin check_nrpe, que solicita os dados ao addon NRPE instalado no host remoto. O addon, por sua vez, obtém dados sobre uso de disco, processador etc e os envia para o servidor. O processo de instalação do NRPE não é tratado neste trabalho, porém pode ser encontrado no site oficial do Nagios. /usr/local/nagios/etc/objects/localhost.cfg define host{ use host_name alias address } linux-server Firewall01 Firewall01 127.0.0.1 define hostgroup{ hostgroup_name linux-servers alias Linux Servers members Firewall01 } } define service{ use local-service host_name Firewall01 service_description PING check_command check_ping!100.0,20%!500.0,60% } define service{ use local-service host_name Firewall01 service_description Root Partition check_command check_local_disk!20%!10%!/ } define service{ use local-service host_name Firewall01 service_description Current Load check_command check_local_load!5.0,4.0,3.0!10.0,6.0,4.0 } define service{ use local-service host_name Firewall01 service_description Swap Usage check_command check_local_swap!20!10 } define service{ use local-service host_name Firewall01 service_description Current Users check_command check_local_users!20!50 } define service{ use local-service host_name Firewall01 service_description SSH check_command check_ssh notifications_enabled 0 } define service{ use local-service host_name Firewall01 service_description Total Processes check_command check_local_procs!250!400!RSZDT define service{ use local-service host_name Firewall01 service_description HTTP check_command check_http notifications_enabled 0 } Abaixo a visualização dos recursos configurados para monitoramento, via interface do Nagios. 4.2 Monitorando Hosts Windows Utilizamos o agente NSClient++ é necessária. Este pequeno software envia as informações ao servidor Nagios que as processa através do plugin check_nt. Existem outras alternativas, porém a documentação oferecida não é clara. A figura abaixo representa o funcionamento do agente. O plugin check_nt consulta o agente NSClient++ em busca de informações sobre uso de Cpu, memória Ram, espaço em disco, processos em execução e serviços. O processo de instalação do NSClient++ não é tratado neste trabalho, porém pode ser encontrado no site oficial do Nagios. /usr/local/nagios/etc/objects/windows.cfg define host { use host_name alias address } windows-server winserver Windows Server 192.168.1.6 define hostgroup{ hostgroup_name windows-servers alias Windows Server } define service{ use generic-service host_name winserver service_description NSClient++ Version check_command check_nt!CLIENTVERSION } check_command check_nt!CPULOAD!-l 5,80,90 } define service{ use generic-service host_name winserver service_description Memory Usage check_command check_nt!MEMUSE!-w 80 -c 90 } define service{ use generic-service host_name winserver service_description C:\ Drive Space check_command check_nt!USEDDISKSPACE!-l c -w 80 -c 90 } define service{ use generic-service host_name winserver service_description Uptime check_command check_nt!UPTIME } define service{ use generic-service host_name winserver service_description W3SVC check_command check_nt!SERVICESTATE!-d SHOWALL W3SVC } define service{ use generic-service host_name winserver service_description CPU Load define service{ use generic-service host_name winserver service_description Explorer -l check_command check_nt!PROCSTATE!-d SHOWALL -l Explorer.exe } Abaixo a visualização dos recursos configurados para monitoramento, via interface do Nagios. 4.3 Outros recursos de Rede Este recurso não requer a utilização de addons ou agentes no equipamento. O plugin check_snmp pode utilizar o protocolo ICMP (Internet Control Message Protocol) para testar a conectividade entre os dispositivos finais e o roteador utilizado na rede de testes, assim como um endereço externo para a comprovação de acesso à Internet. Caso haja necessidade de informações sobre status de porta e estatísticas de tráfego como a perda de pacotes, por exemplo, o equipamento deve suportar a função SNMP, que deve ser ativada e configurada. A lógica de funcionamento do check_snmp pode ser observada na figura abaixo. Observa-se que o check_snmp consulta informações da base de dados SNMP contida no Roteador ou Switch. /usr/local/nagios/etc/objects/switch.cfg define host{ use generic-switch host_name linksys-srw224p alias Linksys SRW224P Switch address 192.168.1.253 hostgroups switches } define hostgroup{ hostgroup_name switches alias Network Switches } define service{ use generic-service host_name linksys-srw224p service_description PING check_command check_ping!200.0,20%!600.0,60% service normal_check_interval conditions retry_check_interval 1 is determined } the 5 state define service{ use generic-service host_name linksys-srw224p service_description Uptime check_command check_snmp!-C public -o sysUpTime.0 } define service{ use host_name linksys-srw224p service_description Port 1 Link Status check_command check_snmp!-C public -o ifOperStatus.1 -r 1 -m RFC1213MIB } define service{ use generic-service host_name linksys-srw224p service_description Port 1 Bandwidth Usage check_command check_local_mrtgtraf!/var/lib/mrtg/192.16 8.1.253_1.log!AVG!1000000,1000000!5000 000,5000000!10 } generic-service Abaixo a visualização dos recursos configurados para monitoramento, via interface do Nagios. /usr/local/nagios/etc/objects/printer.cfg define host{ use generic-printer host_name hplj2605dn alias HP LaserJet 2605dn address 192.168.1.30 hostgroups networkprinters } define hostgroup{ hostgroup_name network- printers alias } define service{ use Network Printers generic-service host_name hplj2605dn service_description Printer Status check_command check_hpjd!-C public normal_check_interval 10 retry_check_interval 1 } define service{ use generic-service host_name hplj2605dn service_description PING check_command check_ping!3000.0,80%!5000.0,100% normal_check_interval 10 retry_check_interval 1 } Abaixo a visualização dos recursos configurados para monitoramento, via interface do Nagios. 5 Conclusão Percebe-se que a ferramenta e bem flexível de possível adaptação para qualquer ambiente, seja ele, pequeno, médio ou grande, embora um pouco complexa sua configuração. Todavia, se tornou de suma importância para o ambiente corporativo, e a partir desta experiência, possibilitou o aprofundamento de seus recursos em busca do melhor aproveitamento, com uma visão de prever a indisponibilidade de um serviço e poder tratá-lo da forma antecipada e adequada. A interface web do Nagios é muito simples, eu diria até que é pobre, mas como esse não é objetivo do core, foram desenvolvidas interfaces mais robustas e elegantes por terceiros, algumas open-source e outras comerciais, para suprir esta deficiência. Da mesma forma, as checagens do Nagios são efetuadas por plugins externos a plataforma e são construídos de forma aberta de tal maneira que cada usuário ou membro da comunidade pode desenvolver seus próprios plugins para resolver seus problemas de monitoramento específicos. Diante dessas facilidades de customização podemos ajustar o Nagios para atender diversos ambientes, sem falar, na disponibilidade de integração com varias outras ferramentas de gerenciamento. 6 Referências http://www.artigonal.com/seguranca-artigos/monitoramento-com-a-ferramenta-nagios1006005.html http://www.nagios.org http://www.agiosumsoftwarepratico.blogspot.com.br http://pt.scribd.com/doc/68766833/Nagios-Passo-a-Passo http://www.vivaolinux.com.br/artigo/Monitorando-redes-e-servidores-com-Nagios/?pagina=3 http://sourceforge.net/projects/nagios/files/