Monitoramento de Sistemas Nagios 4.0.8
Esse artigo se propõe a auxiliar na instalação do serviço de monitoramento de equipamentos de rede
Nagios.
O Nagios é uma aplicação de monitoração de rede de código aberto.
Foi desenvolvido e é mantido pela
Nagios para monitoração de ativos de rede, computadores, impressoras, switches, câmeras IP, servidores, roteadores etc. Como também, os serviços executados nesses e outros ativos de rede, auxiliando na solução de problemas, disparando alertas que podem ser encaminhados por e-mail e até mesmo por mensagem SMS ao administrador da rede.
Ao contrário de muitos artigos publicados na Internet, que apresentam conceitos e métodos de instalação distintos, dando a impressão que o sistema operacional
Linux é uma baderna, visto que a maioria dos artigos publicados não passam de lixo eletrônico induzindo muitos a perderem tempo, posso garantir que o passo a passo deste artigo foi realizado num ambiente de rede doméstico e devidamente testado antes de ser publicado.
Os testes realizados garantem o perfeito funcionamento em computadores com a distribuição
Debian 6, abrangendo apenas os conceitos básicos desta ferramenta, podendo ser adaptado e melhorado para um ambiente de produção.
No entanto, aqueles que se consideram capacitados a por em prática o conteúdo deste artigo, devem estar cientes que para um resultado satisfatório é necessário ter um conhecimento pelo menos básico do Linux, além de seguir à risca o passo a passo apresentado.
Para os interessados, segue duas maneiras de instalação da ferramenta de monitoramento Nagios.
A primeira, é a mais indicada. Por oferecer versões mais atualizadas, através dos pacotes fonte que exige a compilação do sistema e a segunda forma menos indicada através dos repositórios de pacotes do Debian que, infelizmente, ainda disponibiliza pacotes de uma versão desatualizada (3.2.1).
1. A primeira providencia a ser tomada, é adicionar as linhas abaixo no arquivo
"/etc/apt/sources.list". Edite o arquivo com
vi ou
vim. Copie e cole as linhas baixo no final do arquivo.
Dica: para quem não sabe, é possível copiar o texto e colar no terminal do Linux acessado via Putty, pressionando o botão direito do mouse ou pressionando as teclas "Shift+Insert" do teclado.
# vim /etc/apt/sources.list
deb-src http://ftp.br.debian.org/debian whezzy main
deb http://security.br.debian.org/ whezzy/updates main
deb-src http://security.br.debian.org/ whezzy/updates main
deb http://ftp.br.debian.org/debian whezzy-updates main
deb-src http://ftp.br.debian.org/debian whezzy-updates main
2. Execute os seguintes comandos, obedecendo a ordem:
# apt-get update
# apt-get upgrade
3. Adicione o usuário "nagios" no sistema, com o seguinte comando:
# useradd -s /sbin/nologin nagios
4. Instale os seguintes pacotes, com comando abaixo:
# apt-get install build-essential libgd2-xpm-dev snmp snmpd libnet-snmp-perl libgd-tools xinetd rcconf apache2 php5 -y
5. Acesso o diretório "/usr/src"/ com o comando abaixo:
# cd /usr/src/
6. Baixe para dentro da pasta "/usr/src/" o tarball do Nagios, com o comando abaixo:
Obs.: os pacotes de instalação devem ser rigorosamente nas versões apresentadas.
# wget http://sourceforge.net/projects/nagios/files/nagios-4.x/nagios-4.0.8/nagios-4.0.8.tar.gz/download?use_mirror=ufpr&r=&use_mirror=ufpr
Obs.: talvez, por uma falha do sistema, o arquivo foi baixado com o seguinte nome: "download\?use_mirror\=ufpr", sendo renomeado para: "nagios-4.0.8.tar.gz", com o comando abaixo:
Dica: ao digitar as primeiras letras do arquivo abaixo e pressionando a tecla Tab, o nome do arquivo é completado automaticamente.
# mv download\?use_mirror\=ufpr nagios-4.0.8.tar.gz
7. Após renomear o aquivo, caso seja necessário, descompacte com o seguinte comando:
# tar -zxvf nagios-4.0.8.tar.gz
8. Acesse a pasta criada que contém os arquivos binários para compilação, com o seguinte comando:
# cd nagios-4.0.8/
9. Inicie a compilação e instalação do Nagios, obedecendo a ordem dos seguintes comandos:
# ./configure --with-nagios-user=nagios --with-nagios-group=nagios --with-snmp --with-nsmpd --with-snmpwalk
# make all
# make install
# make install-init
# make install-commandmode
# make install-config
# make install-webconf
# make install-classicui
Obs.: caso o processo de compilação e instalação apresentar algum erro, revise o passo a passo apresentado até aqui. Caso tenha cometido alguma erro, execute o comando:
# make clean
... e inicie o processo novamente.
Caso surgir algum erro relacionado a alguma dependência de pacote, será necessário identificar essa dependência, proceder com a instalação e em seguida com a reinstalação do Nagios, começando com o comando
make clean.
10. Após a instalação do Nagios, é necessário baixar os plugins de monitoramento, que são instalados separadamente. Acesse o site abaixo, proceda com o download, copie e cole o arquivo baixado na pasta "/usr/src".
11. Inicie a instalação seguindo a ordem dos comandos abaixo:
# cd /usr/src
# tar -zxvf nagios-plugins-2.0.3.tar.gz
# cd nagios-plugins-2.0.3/
# ./configure
# make
# make install
12. Inicie o Nagios com o comando:
# service nagios start
Ou:
# /etc/init.d/nagios start
13. Para que o Nagios inicie automaticamente na inicialização do sistema, insira um dos comandos acima no final do arquivo
"/etc/init.d/bootmisc.sh".
# vim /etc/init.d/bootmisc.sh
14. Por padrão, na instalação do Nagios, é criado automaticamente o usuário "nagiosadmin", com acesso total às funcionalidades do serviço. Porém, neste método de instalação, é necessário criar a senha do usuário "nagiosadmin".
Os comandos abaixo criam a senha do usuário "nagiosadmin" e um usuário adicional para acessar e administrar o sistema. Com este comando, é possível cadastrar quantos usuários forem necessários no sistema:
# htpasswd /usr/local/nagios/etc/htpasswd.users nagiosadmin
# htpasswd /usr/local/nagios/etc/htpasswd.users usuario
15. Caso tenha cadastrado um usuário adicional no sistema, será necessário atribuir as permissões de acesso do usuário cadastrado, para isso, entre na pasta "/usr/local/nagios/etc" faça um backup do arquivo "cgi.cfg", com o comando abaixo:
# cp /usr/local/nagios/etc/cgi.cfg /usr/local/nagios/etc/cgi.cfg.orig
Em seguida, abra o arquivo "cgi.cfg", localize as seguintes linhas e acrescente no final de cada linha, o nome do usuário cadastrado.
A configuração abaixo concede permissão total ao usuário "usuario":
# vim /usr/local/nagios/etc/cgi.cfg
authorized_for_system_information=nagiosadmin,usuario
authorized_for_configuration_information=nagiosadmin,usuario
authorized_for_system_commands=nagiosadmin,usuario
authorized_for_all_services=nagiosadmin,usuario
authorized_for_all_hosts=nagiosadmin,usuario
authorized_for_all_service_commands=nagiosadmin,usuario
authorized_for_all_host_commands=nagiosadmin,usuario
16. Reinicie o Nagios e o Apache com os seguintes comandos:
# service nagios restart
# service apache2 restart
17. No seu navegador de Internet, digite no campo de endereço, o endereço IP do servidor onde o Nagios foi instalado, conforme apresentado abaixo.
Obviamente, "ip_do_servidor" deve ser substituído pelo endereço IP do servidor:
→
http://ip_do_servidor/nagios
Surgirá uma tela solicitando usuário e senha. No campo usuário, digite: "nagiosadmin" (ou, caso tenha cadastrado outro usuário, informe o usuário cadastrado) e no campo senha, informe a senha cadastrada.
Neste ponto, é possível visualizar o monitoramento de alguns serviços do localhost configurado por padrão, como exemplo.
18. Os arquivos padrão de configuração do Nagios possuem uma estrutura um tanto redundante. Seguindo a estrutura padrão, seria necessário criar arquivos para cada ativo de rede e seus respectivos serviços.
Adaptei os arquivos de configuração seguindo a dica apresentada no vídeo do Prof. Marcelo Daibert. Segue o vídeo:
Seguindo essa estrutura, as configurações foram feitas em apenas dois arquivos, um deles contendo os ativos de rede (hardwares) e o segundo arquivo contendo os serviços monitorados, permitindo uma atualização centralizada e mais simplificada.
Inicie renomeando e fazendo uma cópia de backup dos principais arquivos com os seguintes comandos:
# cd =/usr/local/nagios/etc/
19. Faça uma cópia de backup do arquivo "nagio.cfg" com o seguinte comando:
# cp nagios.cfg nagios.cfg.orig
20. Edite o arquivo seguindo os comandos abaixo, localize e comente a linha:
cfg_file=/usr/local/nagios/etc/objects/localhost.cfg
E inclua as linhas abaixo desta, conforme apresentado abaixo:
# vim nagios.cfg
#cfg_file=/usr/local/nagios/etc/objects/localhost.cfg
cfg_file=/usr/local/nagios/etc/objects/ativos.cfg
cfg_file=/usr/local/nagios/etc/objects/servicos.cfg
# cd /objects
# mv localhost.cfg localhost.cfg.orig
# mv templates.cfg templates.cfg.orig
21. Com o seguinte comando, crie um novo arquivo "templates.cfg", copiando e colando o conteúdo abaixo nesse arquivo:
# vim templates.cfg
###############################################################################
# TEMPLATES.CFG - SAMPLE OBJECT TEMPLATES
#
#
# NOTES: This config file provides you with some example object definition
# templates that are refered by other host, service, contact, etc.
# definitions in other config files.
#
# You don't need to keep these definitions in a separate file from your
# other object definitions. This has been done just to make things
# easier to understand.
#
###############################################################################
###############################################################################
###############################################################################
#
# CONTACT TEMPLATES
#
###############################################################################
###############################################################################
# Generic contact definition template - This is NOT a real contact, just a template!
define contact{
name generic-contact ; The name of this contact template
service_notification_period 24x7 ; service notifications can be sent anytime
host_notification_period 24x7 ; host notifications can be sent anytime
service_notification_options w,u,c,r,f,s ; send notifications for all service states, flapping events, and scheduled downtime events
host_notification_options d,u,r,f,s ; send notifications for all host states, flapping events, and scheduled downtime events
service_notification_commands notify-service-by-email ; send service notifications via email
host_notification_commands notify-host-by-email ; send host notifications via email
register 0 ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL CONTACT, JUST A TEMPLATE!
}
###############################################################################
###############################################################################
#
# HOST TEMPLATES
#
###############################################################################
###############################################################################
# Generic host definition template - This is NOT a real host, just a template!
define host{
name generic-host ; The name of this host template
notifications_enabled 1 ; Host notifications are enabled
event_handler_enabled 1 ; Host event handler is enabled
flap_detection_enabled 1 ; Flap detection is enabled
process_perf_data 1 ; Process performance data
retain_status_information 1 ; Retain status information across program restarts
retain_nonstatus_information 1 ; Retain non-status information across program restarts
notification_period 24x7 ; Send host notifications at any time
register 0 ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL HOST, JUST A TEMPLATE!
max_check_attempts 4 ; Notification get sent out to everyone in the 'admins' group
}
###############################################################################
###############################################################################
#
# SERVICE TEMPLATES
#
###############################################################################
###############################################################################
# Generic service definition template - This is NOT a real service, just a template!
define service{
name generic-service ; The 'name' of this service template
active_checks_enabled 1 ; Active service checks are enabled
passive_checks_enabled 1 ; Passive service checks are enabled/accepted
parallelize_check 1 ; Active service checks should be parallelized (disabling this can lead to major performance problems)
obsess_over_service 1 ; We should obsess over this service (if necessary)
check_freshness 0 ; Default is to NOT check service 'freshness'
notifications_enabled 1 ; Service notifications are enabled
event_handler_enabled 1 ; Service event handler is enabled
flap_detection_enabled 1 ; Flap detection is enabled
process_perf_data 1 ; Process performance data
retain_status_information 1 ; Retain status information across program restarts
retain_nonstatus_information 1 ; Retain non-status information across program restarts
is_volatile 0 ; The service is not volatile
check_period 24x7 ; The service can be checked at any time of the day
max_check_attempts 3 ; Re-check the service up to 3 times in order to determine its final (hard) state
normal_check_interval 10 ; Check the service every 10 minutes under normal conditions
retry_check_interval 2 ; Re-check the service every two minutes until a hard state can be determined
contact_groups admins ; Notifications get sent out to everyone in the 'admins' group
notification_options w,u,c,r ; Send notifications about warning, unknown, critical, and recovery events
notification_interval 60 ; Re-notify about service problems every hour
notification_period 24x7 ; Notifications can be sent out at any time
register 0 ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL SERVICE, JUST A TEMPLATE!
}
22. Com o seguinte comando, crie o arquivo "ativos.cfg" copiando e colando o conteúdo abaixo:
Obs.: no arquivo abaixo, apresento o conteúdo do meu arquivo de configuração. Evidentemente, esse arquivo deve ser adaptado à realidade de cada um.
As linhas "host_name", se referem ao nome do ativo de rede. E a linha "address", deve conter o endereço IP. Alterei o nome de alguns ativos e substituí o endereço por "ip_address", porém, mantive alguns como exemplo.
Este arquivo contém a lista de ativos de rede a serem monitorados, nesta estrutura é possível adicionar ou remover um equipamento facilmente.
Para excluir um equipamento, será necessário apenas editar este arquivo e deletar a configuração relacionada ao mesmo, em seguida, editar o arquivo serviços e deletar o nome do host que conste em cada linha dos serviços sendo monitorados no arquivo "servicos.cfg".
Para adicionar um novo equipamento, será necessário apenas copiar e colar a configuração de um host qualquer e fazer as devidas alterações referentes ao "host_name":
# alias
# ip_address
E, em seguida, incluir o novo host nas linhas dos serviços a serem monitorados no arquivo "servicos.cfg".
Obs.: a definição de host serve para qualquer equipamento: computador, servidor, switch, câmera IP, roteador etc;
define host{
use generic-host
host_name server-nagios
alias Remote Linux Host
address ip_address
check_command check-host-alive
contact_groups admins
}
define host{
use generic-host
host_name server-email
alias Remote Linux Host
address ip_address
check_command check-host-alive
contact_groups admins
}
define host{
use generic-host
host_name win7
alias Remote Windows Host
address ip_address
check_command check-host-alive
contact_groups admins
}
define host{
use generic-host
host_name server-http
alias Remote Linux Host
address ip_address
check_command check-host-alive
contact_groups admins
}
define host{
use generic-host
host_name wrt54g
alias Roteador Linksys
address 192.168.1.1
check_command check-host-alive
contact_groups admins
}
define host{
use generic-host
host_name dir-600
alias Roteador Dlink
address 192.168.1.2
check_command check-host-alive
contact_groups admins
}
define host{
use generic-host
host_name winxp
alias Windows XP
address 192.168.1.110
check_command check-host-alive
contact_groups admins
}
define host{
use generic-host
host_name camera_ip
alias Camera
address ip_address
check_command check-host-alive
contact_groups admins
}
define host{
use generic-host
host_name hp2605
alias HP LaserJet 2605dn
check_command check-host-alive
address 192.168.1.30
contact_groups admins
23. Com o seguinte comando, crie o arquivo "servicos.cfg", copiando e colando o conteúdo abaixo:
Obs.: no arquivo abaixo, apresento o conteúdo do meu arquivo de configuração. Esse arquivo também deve ser adaptado à realidade de cada um.
define service{
use generic-service
host_name server-mail,win7,server-http,server-nagios,winxp
service_description Current Users
check_command check_users!20!50
}
define service{
use generic-service
host_name server-mail,win7,server-http,server-nagios,camera_ip,winxp,dir-600,wrt54g,hp2605
service_description Ping
check_command check_ping!100.0,20%!500.0,60%
}
define service{
use generic-service
host_name server-http
service_description Http
check_command check_http
}
define service{
use generic-service
host_name win7
service_description TCP
check_command check_tcp!3389
}
define service{
use generic-service
host_name server-nagios,win7,server-mail,server-http
service_description Memory Usage
check_command check_nt!MEMUSE!-w 80 -c 90
}
define service{
use generic-service
host_name server-nagios,server-mail,server-http
service_description CPU Load
check_command check_nt!CPULOAD!-l 5,80,90
}
define service{
use generic-service
host_name server-nagios,win7,server-mail,server-http
service_description C:\ Drive Space
check_command check_nt!USEDDISKSPACE!-l c -w 80 -c 90
}
define service{
use generic-service
host_name hp2605
service_description Printer Status
check_command check_hpjd!-C public
}
define service{
use generic-service
host_name hp2605
service_description Check Toner
check_command check_tonner!1.3.6.1.2.1.43.11.1.1.9.1.1
}
Obs.: o último serviço Check Toner, definido no arquivo de serviços acima, trata-se também de uma adaptação extraída do vídeo do Prof. Marcelo Daibert (acima).
Para verificar sua funcionalidade, além de ser necessário ter uma impressora em rede devidamente configurada, é necessário. Verificar na documentação da mesma, se existe algum parâmetro de configuração para gerenciamento e inserir as linhas abaixo:
- No arquivo: /usr/local/nagios/etc/objects/commands.cfg (Nagios 4.0.8)
- No Nagios 3.2.1, no arquivo: /etc/nagios3/conf.d/commands.cfg
define command{
command_name check_tonner
command_line $USER1$/check_snmp -H $HOSTADDRESS$ -o $ARG1$ -w 20:109 -c $:100
}
24. Reinicie o servidor Nagios, com o seguinte comando:
# service nagios restart
25. Do navegador, acesse o servidor digitando o endereço IP do servidor, no campo endereço, conforme abaixo:
→
http://ip_do_servidor/nagios
Com esses procedimentos, caso tenham seguido conforme apresentado sem nenhum problema, será possível visualizar os ativos de rede e serviços monitorados.
Conforme exemplo apresentado na figura abaixo, essa configuração pode ser melhorada e aperfeiçoada de acordo com as necessidades de cada um.