Monitoramento com o NAGIOS
Autor: Alexandre Boyago | Publicado: 2009-11-24T08:42:00-08:00

Imagine monitorar todos seus servidores, bem como serviços que eles dispõe.  Imagine que você poderá receber por e-mail tudo que ocorre em seus servidores,  informando a hora que um serviço parou e/ou voltou a funcionar. Imagine que você  possa acessar este monitoramento de qualquer parte do mundo, bastando claro o  seu servidor ter acesso a internet.

A grande função do NAGIOS é  essa, monitorar tudo o que puder.

Aqui vai uma breve explicação extraída  da fonte de informação Wikipédia:

"Nagios é uma popular aplicação de  monitoração de rede de código aberto e licenciado pelo sistema GPL. Ele pode  monitorar tanto hosts quanto serviços, alertando-o quando ocorrerem problemas e  também quando os problemas forem resolvidos.

O Nagios foi originalmente  criado sob o nome de Netsaint, foi escrito e é atualmente mantido por Ethan  Galstad, junto com um exército de desenvolvedores que ativamente mantém plugins  oficiais e não-oficiais."

 Instalação do NagiosDesta vez não vou propor uma instalação via RPM ou  APT-GET pois não foi encontrado maiores dificuldades em instalar via fontes. A  dificuldade foi mesmo curiosa, encontrar pacotes rpm para Nagios atualizados.

Requisitos necessários:

Servidor web baseado em Apache2  completo, existem muitos artigos que explicariam melhor que eu agora a instalar  um servidor web.

Continuando o artigo, Primeiramente vamos partir do  ponto que você já tem um sistema operacional Linux totalmente instalado e  funcional.

DICA: Faça uma instalação full do sistema operacional, todos  os componentes. Friso isso pois é muito chato você desejar instalar um novo  servidor e ter problemas com bibliotecas C#, C++, Make, mod_php5, entre outros.  Instale tudo!

1. adicione os usuários e grupos:

#  useradd nagios
# useradd nagcmd
# groupadd nagios
# groupadd  www-data
# mkdir /usr/local/nagios
# usermod -g nagios nagios
# usermod  -g nagcmd nagios
# usermod -g www-data nagcmd

2. Baixe o  pacote do nagios em:

Download  nagios-3.0.4.tar.gz - Sourceforge.net

Caso o link não funcione,  baixe pelo site do desenvolvedor:

Nagios.org download

3. Salve  em uma pasta separada, de preferência /opt/nagios/ e descompacte o pacote do  nagios:

# tar xvfz nagios-3.0.tar.gz
# cd nagios-3.0

4. Instale o nagios:

# ./configure  --with-command-group=www-data
# make all
# make install
# make  install-init
# make install-config
# make install-commandmode

5. Copie todo seu conteúdo da pasta "contrib" para  /usr/local/nagios/libexec:

# cd /opt/nagios-3.0/contrib/
# cp  -Rf * /usr/local/nagios/libexec

6. Vamos instalar os plugins.

Baixe em:

Download  nagios-plugins-1.4.13.tar.gz - Sourceforge.net

Caso o link não  funcione, baixe no site do desenvolvedor em:

Nagios.org download

Salve na  pasta onde foi descompactado o nagios e descompacte o arquivo  nagios-plugins-1.4.11.tar.gz usando o comando:

# tar xvfz  nagios-plugins-1.4.11.tar.gz

Acesse a pasta  nagios-plugins-1.4.11 e:

# ./configure
# make all
# make  install

7. Adicione o Nagios no Apache, o arquivo de  configuração do Apache vai depender da sua instalação, aqui por padrão, que usei  como exemplo em Red Hat 4 AS, é:

# vi  /etc/httpd/conf/httpd.conf

Dentro do arquivo, adicione no  final:

              # PAINEL  NAGIOS

ScriptAlias /nagios/cgi-bin  /usr/local/nagios/sbin


Options ExecCGI
AllowOverride None
Order allow,deny
Allow from  all


Alias /nagios  /usr/local/nagios/share


Allow from all
 
Obs.: Novamente atente as  localizações, pois dependendo de onde você ordenou a instalação do Nagios,  deve-se mudar os parâmetros. FIQUE ATENTO!

8. Teste se os arquivos de  configurações estão corretos:

# /usr/local/nagios/bin/nagios -v  /usr/local/nagios/etc/nagios.cfg

Se receber confirmação de ok,  perfeito, caso contrário verifique os arquivos de configuração localizados em  /usr/local/nagios/etc ou /usr/local/nagios/etc/objects.

9. Altere as  permissões de cgi:

# vi /usr/local/nagios/etc/cgi.cfg

E na linha "use_authentication" altere o valor de "1" para "0".

Obs.: Estou tirando a autenticação apenas para agilizar a implementação,  após isto vamos voltar a autenticação.

10. Inicie o serviço:

# /etc/init.d/nagios start

11. Teste:

http://ipdoservidor/nagios

    Configurações NagiosAs configurações do Nagios são fáceis e intuitivas, mas bem  detalhistas. Dependendo do local da instalação as configurações ficam em:

/usr/local/nagios/nagios.cfg
/usr/local/nagios/cgi.cfg

A  configuração do Nagios é dividida em 2 partes:

1. servidor e serviço em  si.

Peço para que leiam com calma o arquivo nagios.cfg, nele  ficam todas as configurações. Neste artigo vou comentar o essencial:

 # Localização do  log
log_file=/usr/local/nagios/var/nagios.log

# Localização dos arquivos de  configurações a serem  checados:
cfg_file=/usr/local/nagios/etc/objects/commands.cfg
cfg_file=/usr/local/nagios/etc/objects/contacts.cfg
cfg_file=/usr/local/nagios/etc/objects/timeperiods.cfg
cfg_file=/usr/local/nagios/etc/objects/templates.cfg

# Localização do arquivo de configuração para monitorar a  máquina  local
cfg_file=/usr/local/nagios/etc/objects/localhost.cfg

# Localização do arquivo de configuração para monitorar  Windows
cfg_file=/usr/local/nagios/etc/objects/windows.cfg

# Localização do arquivo de configuração para monitorar  roteadores e  switches
cfg_file=/usr/local/nagios/etc/objects/switch.cfg

# Localização do arquivos de configuração para monitorar  impressoras
cfg_file=/usr/local/nagios/etc/objects/printer.cfg

Configurações dos hosts

Agora vamos definir quais máquinas vamos checar, quais serviços, IPs e tudo  mais.

Novamente depende da localização da instalação:

/usr/local/nagios/etc/objects/commands.cfg
/usr/local/nagios/etc/objects/localhost.cfg
/usr/local/nagios/etc/objects/printer.cfg
/usr/local/nagios/etc/objects/switch.cfg
/usr/local/nagios/etc/objects/windows.cfg
/usr/local/nagios/etc/objects/contacts.cfg

Vamos acessar o arquivo  localhost.cfg.

Logo no início do arquivo você vai visualizar  uma seção chamada HOST DEFINITION, na qual vai definir os parâmetros da máquina  local. Altere o ip e o alias de sua preferência.

 # HOST DEFINITION
define  host{
use     linux-server ; Name of host template  to use
; This host definition will inherit  all variables that are defined
; in (or  inherited by) the linux-server host template definition.
host_name  localhost
alias      localhost
address    192.168.10.11
} 
2. Outra seção que merece atenção é:

 # HOST GROUP DEFINITION
# Define an optional hostgroup for Linux  machines

define hostgroup{
hostgroup_name  servidores-linux  ; The name of the hostgroup
alias    Servidores Linux ; Long name of the group
members    localhost,squid,server2,server3,dbserver,server4,samba,saopaulo,newyork ; Comma separated list of hosts that belong to this  group
} 
Nela você define grupos e quem pertence a este  grupo, no caso os servidores.

3. Esta última seção também é muito  importante, pois determina quais serviços serão checados para cada servidor.

 # SERVICE  DEFINITIONS

#####->PING<-#######
define service{
use    local-service ; Name of service template to  use
host_name    localhost
service_description    PING
check_command   check_ping!100.0,20%!500.0,60%
}

define service{
use     local-service ; Name of service template to  use
host_name     squid
service_description    PING
check_command    check_ping!100.0,20%!500.0,60%
} 
Existem dezenas  de serviços, escolha qual lhe atende e copie e cole novos, comente os que não  utilizará.

Detalhe importante: Evite apagar os parâmetros e linhas, de  preferência apenas comente-as, pois vai lhe salvar de muitos problemas futuros.

Arquivo printer.cfgNeste arquivo você configura para monitorar uma impressora de rede, a sintaxe é  idêntica ao arquivo anterior, com suas devidas seções.

 # HOST DEFINITIONS - Definição de host,  ip, grupo
# Define a host for the printer we'll  be monitoring

define host{
use             generic-printer  ; Inherit default values from a template
host_name       Canon iPR Server T1 Ver1.0 ; The name  we're giving to this printer
alias           Canon iPR Server T1  Ver1.0(BOTAFOGO) ; A longer name associated with the  printer
address         192.168.80.50 ; IP  address of the printer
hostgroups      network-printers ; Host groups this printer is associated  with
}

# HOST GROUP DEFINITIONS -  Definição do grupo, nomes.
# A hostgroup for  network printers

define hostgroup{
hostgroup_name  network-printers ; The name of the  hostgroup
alias           Impressoras REDE ;  Long name of the group
}

# SERVICE  DEFINITIONS - Define os serviços a serem checados
define  service{
use                     generic-service
host_name               Canon iPR Server T1 Ver1.0
service_description      PING
check_command           check_ping!3000.0,80%!5000.0,100%
normal_check_interval   10
retry_check_interval    1
}

Arquivo switch.cfg

<!-- google_ad_client = "pub-3535276187000580"; /* 336x280 artigo direita verde */ google_ad_slot = "2913193654"; google_ad_width = 336; google_ad_height = 280; //-->      google_protectAndRun("ads_core.google_render_ad", google_handleError, google_render_ad); Neste arquivo você configura para monitorar roteadores, switches na rede, a  sintaxe é idêntica ao arquivo anterior, com suas devidas seções.

 # HOST DEFINITIONS - Definições de  nome, ip, alias, grupo
# Define the switch that  we'll be monitoring

define host{
use              generic-switch ; Inherit default values from a  template
host_name       roteador_espanha ;  The name we're giving to this switch
alias           Roteador  espanha ; A longer name associated with the  switch
address         192.168.75.5 ; IP  address of the switch
hostgroups      roteadores ; Host groups this switch is associated  with
}

# HOST GROUP DEFINITIONS -  Definições de grupo, nome.
# Create a new  hostgroup for switches

define hostgroup{
hostgroup_name  roteadores ; The name of the  hostgroup
alias           Roteadores ; Long  name of the group
}

# SERVICE  DEFINITIONS - Definição de serviços
# Create a  service to PING to switch

define service{
use                     generic-service ; Inherit values  from a template
host_name               roteador_botafogo ; The name of the host the service is associated  with
service_description     PING ; The  service description
check_command            check_ping!200.0,20%!600.0,60%  ; The command used to  monitor the service
normal_check_interval   5 ; Check the service every 5 minutes under normal  conditions
retry_check_interval    1 ;  Re-check the service every minute until its final/hard state is  determined

Arquivo switch.cfg

  <!-- google_ad_client = "pub-3535276187000580"; /* 336x280 artigo direita verde */ google_ad_slot = "2913193654"; google_ad_width = 336; google_ad_height = 280; //-->      google_protectAndRun("ads_core.google_render_ad", google_handleError, google_render_Neste arquivo você configura para monitorar roteadores, switches na rede, a  sintaxe é idêntica ao arquivo anterior, com suas devidas seções.

 # HOST DEFINITIONS - Definições de  nome, ip, alias, grupo
# Define the switch that  we'll be monitoring

define host{
use              generic-switch ; Inherit default values from a  template
host_name       roteador_espanha ;  The name we're giving to this switch
alias           Roteador  espanha ; A longer name associated with the  switch
address         192.168.75.5 ; IP  address of the switch
hostgroups      roteadores ; Host groups this switch is associated  with
}

# HOST GROUP DEFINITIONS -  Definições de grupo, nome.
# Create a new  hostgroup for switches

define hostgroup{
hostgroup_name  roteadores ; The name of the  hostgroup
alias           Roteadores ; Long  name of the group
}

# SERVICE  DEFINITIONS - Definição de serviços
# Create a  service to PING to switch

define service{
use                     generic-service ; Inherit values  from a template
host_name               roteador_botafogo ; The name of the host the service is associated  with
service_description     PING ; The  service description
check_command            check_ping!200.0,20%!600.0,60%  ; The command used to  monitor the service
normal_check_interval   5 ; Check the service every 5 minutes under normal  conditions
retry_check_interval    1 ;  Re-check the service every minute until its final/hard state is  determined

Arquivo contacts.cfg<!-- google_ad_client = "pub-3535276187000580"; /* 336x280 artigo direita verde */ google_ad_slot = "2913193654"; google_ad_width = 336; google_ad_height = 280; //-->      google_protectAndRun("ads_core.google_render_ad", google_handleError, google_render_ad); Este arquivo é de  extrema importância, pois ele define quem será avisado caso aconteça algo com  alguma máquina, servidor, impressora e  roteadores.

É um arquivo pequeno que contém e-mail do administrador.

 # CONTACTS
# Just one contact defined by default - the Nagios admin  (that's you)
# This contact definition inherits  a lot of default values from the 'generic-contact'
# template which is defined elsewhere.

define  contact{
contact_name    nagiosadmin ; Short name  of user
use             generic-contact ;  Inherit default values from generic-contact template (defined  above)
alias           Administrador do Nagios ; Full name of user

email            email@empresa.gov.br, cemail2@empresa.com.br ;  <<***** CHANGE THIS TO YOUR EMAIL ADDRESS ******
}

# CONTACT GROUPS - Define o nome do grupo bem como seus  contatos do grupo.
# We only have one contact  in this simple configuration file, so there is
# no need to create more than one contact  group.

define contactgroup{
contactgroup_name        admins
alias                   Nagios Administrators
members                 nagiosadmin
}

Extra<!-- google_ad_client = "pub-3535276187000580"; /* 336x280 artigo direita verde */ google_ad_slot = "2913193654"; google_ad_width = 336; google_ad_height = 280; //-->      google_protectAndRun("ads_core.google_render_ad", google_handleError, google_render_ad); Após tudo configurado, como fazer que o Nagios monitore máquinas Windows?  Existem diversos programas e exemplos que permitem esta facilidade, vou  mostrar a que utilizo há 2 anos.

O software que deve ser instalado na  máquina Windows chama-se NSClient++ e pode ser adquirido em:

Download  NSClient++ - Sourceforge.net

Caso o link não funcione, acesse o site  do desenvolvedor em:

NSClient++ - Sourceforge.net

1. Instale o software.

2. Acesse o prompt do MSDOS.

3.  Dentro do prompt do MSDOS entre no diretório C:\NSClient++ (ou na pasta que você  instalou).

4. Digite:

nsclient++ /install

5. Digite:

nsclient++ systray

6. Clicar no menu iniciar  > executar e digitar: services.msc

7. Dentro do  Services localizar o serviço "NSClientpp (Nagios) ", abra-o. Vai abrir uma  janela onde deveremos clicar na aba "logon" e setar o seguinte serviço:  "Permitir que o serviço interaja com a área de trabalho".

8. Aplique e  OK.

9. Antes de iniciar o serviço "NSClientpp (Nagios)" devemos  configurar dois arquivos importantes: NSC.ini e o  counters.defs, que estão dentro da pasta descompactada.

NSC.ini: Descomente as linhas com os módulos dll, deixando comentado  somente o NRPEL, ficando desta forma:

       FileLogger.dll
CheckSystem.dll
CheckDisk.dll
NSClientListener.dll
;NRPEListener.dll
SysTray.dll
CheckEventLog.dll
CheckHelpers.dll  
Encontre a linha "NSCLIENT PORT NUMBER" e descomente a linha onde  mostra o número da porta "port=12489". Lembre-se de descomentar a linha, ficando  desta forma:

 port=12489 
Para finalizar encontre o a linha  "ALLOWED HOST ADDRESSES" e coloque o IP do servidor nagios. Na linha  "allowed_hosts=IP_SERVIDOR_NAGIOS". Lembre-se de descomentar a linha, ficando  desta forma:

 allowed_hosts= 192.168.76.43 ;servidor  nagios 
Agora o counters.defs: localize a linha "Portuguese_BR"  e o substitua pela linha abaixo:

[0x0416]
Description =  "Portuguese_BR"
W2K_SystemTotalProcessorTime = "\Processador(_Total)\% tempo  de processador"
W2K_SystemSystemUpTime = "\Sistema\Tempo de ativação do  sistema"
W2K_MemoryCommitLimit = "\Memória\Limite de confirmação"
W2K_MemoryCommitByte = "\Memória\Bytes confirmados"