Instalação e configuração do Nagios (versões 3.2.1 e 4.0.8)

Esse artigo propõe-se auxiliar na instalação do serviço de monitoramento de equipamentos de rede Nagios.

[ Hits: 22.009 ]

Por: Vauires Vidal da Silva em 01/06/2015


Instalando o Nagios 4.0.8



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.
Linux: Nagios 3.2.1 - 4.0.8
    Próxima página

Páginas do artigo
   1. Instalando o Nagios 4.0.8
   2. Instalando o Nagios 3.2.1
Outros artigos deste autor

Cliente Nagios no Windows - Instalação e Configuração

Leitura recomendada

Configurando Placa Wireless Broadcom BCM43142 no SlackWare 14.2

Servidor Proxy - Parte I

IPv6 completo Net Virtua

Nagios no Ubuntu 14.04 - Instalação e configuração

Sincronizando Bases OpenLDAP e Active Directory

  
Comentários
[1] Comentário enviado por brunodisilva em 02/06/2015 - 09:54h


Excelente!

[2] Comentário enviado por vauires em 02/06/2015 - 13:11h

Agradeço o comentário.
Espero estar contribuído com um artigo útil, prático e principalmente funcional.
Em breve será publicado aqui no Vol a segunda parte deste artigo que trata da instalação e configuração do cliente Nagios em computadores Windows e também a configuração do recurso de envio de alertas por e-mail.
Solicito a todos a gentileza de relatar através de comentários qualquer falha ou erro cometido.

[3] Comentário enviado por ShellzOS em 03/06/2015 - 08:58h

Muito bom! Estou implantando e descobrindo mais recursos dessa ferramenta. Vou estudar o uso do monitoramento de impressoras.
Obrigado.

[4] Comentário enviado por thiago_sene em 03/06/2015 - 10:44h

Parabéns, Ótimo artigo, no aguardo do artigo referente a configuração do cliente Nagios em terminais Windows.


[5] Comentário enviado por deuz em 06/06/2015 - 21:01h

Excelente artigo, eu fiz um projeto semelhante a esse na faculdade, e tudo funcionou muito bem, depois fiz outro com ganglia, deu certo tambem, agora estou fazendo um com Zabbix, infelizmente estou tendo dificuldades, voce poderia ou tem disponibilidade para umas dicas?
Ocorre que ao selecionar alguns itens, como interface de redes, cpu, nao monitora no cliente, informa "not supported", as outras coisas por exemplo funciona, como http e ssh, ping, mas eu preciso monitorar alem desses, a cpu, discos, memoria, interfaces de rede, e justo esses nao é sportatado pelo agente..

veja as linhas:
CPU system.cpu.load[<cpu>,<mode>] 30 90 365 Zabbix agent (active) CPU, CPU Carga Not supported

esse Zabbix agent (active) eu ja testei varios, e todos com a mesma mensagem..

meu arquivo zabbix_agentd.conf:
Server=192.168.12.10
Hostname=na01
ServerPort=10051
ListenPort=10050
StartAgents=5
RefreshActiveChecks=120
#DisableActive=1
EnableRemoteCommands=1
# Specifies debug level
# 0 debug is not created
# 1 critical information
# 2 error information
# 3 warnings
# 4 information (default)
# 5 for debugging (produces lots of information)
DebugLevel=4
LogFile=/var/log/zabbix_agentd.log
PidFile=/tmp/zabbix_agentd.pid

se tiver alguma dica, agradeço muito..

[6] Comentário enviado por mcfmlt em 10/06/2015 - 11:10h

Aê Díveres! Mandando bem, no artigo! Abraço e sucesso...

[7] Comentário enviado por vauires em 10/06/2015 - 13:26h

Obrigado!!! Abraço...


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts