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

Autor: Vauires Vidal da Silva
Fonte: http://www.vivaolinux.com.br/artigo/Instalacao-e-configuracao-do-Nagios-versoes-321-e-408/
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.