Páginas

quarta-feira, 26 de dezembro de 2012

Nagios - Instalação e Configuração Básica

Abaixo uma documentação que eu fiz (claro que está adaptada para um tutorial) sobre instalação e configuração do Nagios Core utilizando o PNP4Nagios para gerar gráficos de performance. Vamos a ela:


INSTALAÇÃO

Para a instalação do Nagios é necessário primeiro baixar as dependências:

apt-get install wget install build-essential apache2 php5-gd wget libgd2-xpm libgd2-xpm-dev
libapache2-mod-php5 sendmail -y

Em seguida deve-se criar o usuário e o grupo que fará a operação dos serviços:

useradd nagios
groupadd nagios
usermod -a -G nagios nagios

A instalação do sistema foi feita através dos códigos-fontes da versão 3.4.3 do Nagios baixada através do endereço http://prdownloads.sourceforge.net/sourceforge/nagios/nagios-3.4.3.tar.gz . Colocar o arquivo na pasta /opt e descompactar o arquivo com o comando tar xvzf nagios-3.4.3.tar.gz. Dentro da pasta do Nagios, para efetuar a instalação, devemos executar os seguintes comandos:

./configure --with-nagios-group=nagios --with-command-group=nagios --with-mail=/usr/bin/sendmail

make all
make install
make install-init
make install-config
make install-commandmode
make install-webconf

Em seguida criaremos o login padrão para acesso à interface web do Nagios:

htpasswd –c /usr/local/nagios/etc/htpasswd.users nagiosadmin

Para incluir o serviço na inicialização do sistema, execute o seguinte código:

ln -s /etc/init.d/nagios /etc/rcS.d/S99nagios

O início manual do serviço é feito através do comando:

service nagios start

Sua reinicialização é feita através do comando:

service nagios restart

Sua paralização é feita através do comando:

service nagios start

ESTRUTURA

A estrutura padrão de diretórios do Nagios é a seguinte:

/usr/local/nagios – Raíz do sistema
/usr/local/nagios/bin - Binários do sistema, incluindo o plugin NRPE
/usr/local/nagios/etc - Arquivos de configuração básica do sistema
/usr/local/nagios/etc/objects – Arquivos de configuração de comandos, templates, contatos,
 grupos de hosts, e modelos de configurações para monitoramento de diferentes tipos de 
hosts.
/usr/local/nagios/include – Arquivos a serem incluídos na configuração do sistema (vazio 
por padrão)
/usr/local/nagios/libexec – Binários dos plugins de checagem de hosts
/usr/local/nagios/sbin – Binários de execução do CGI
/usr/local/nagios/share – Arquivos utilizados para o web front-end do Nagios
/usr/local/nagios/var – Arquivos de log, de bloqueio de inicialização quando o sistema já 
está executando, etc.
 
CONFIGURAÇÕES
 
Todos os arquivos de configuração do Nagios deve conter por padrão a extensão “.cfg”, 
e devem ser discriminados (ou apenas os seus diretórios) no arquivo de configuração 
principal /usr/local/nagios/etc/nagios.cfg.

As configurações principais devem ser feitas no arquivo /usr/local/nagios/etc/nagios.cfg alterando-se 
apenas algumas linhas conforme demonstrado abaixo:

  28 cfg_file=/usr/local/nagios/etc/objects/commands.cfg 
  29 cfg_file=/usr/local/nagios/etc/objects/hostgroups.cfg 
  30 cfg_file=/usr/local/nagios/etc/objects/contacts.cfg 
  31 cfg_file=/usr/local/nagios/etc/objects/timeperiods.cfg 
  32 cfg_file=/usr/local/nagios/etc/objects/templates.cfg 
  33 cfg_file=/usr/local/nagios/etc/hosts/servers/localhost.cfg

As linhas acima definem quais arquivos de configurções específicos serão utilizados

  39 cfg_dir=/usr/local/nagios/etc/hosts/
  
Essas linhas informam quais diretórios de arquivos de configurações de monitoramento serão utilizados. 
Note a diferença entre as linhas dos arquivos de configurações que começam com “cfg_file=”, essas 
linhas começam com “cfg_dir=”.

117 check_external_commands=1

A linha acima define se o Nagios vai utilizar comandos externos, definidos no arquivo 
“/usr/local/nagios/etc/objects/commands.cfg”. Por padrão o Nagios não verifica comandos externos, o 
número “1” indica que ele passa a verificar.

PLUGINS

Os plugins são os responsáveis por coletar informações de monitoramento dos hosts incluindo o localhost. Eles devem ser baixados na pasta /opt através do endereço http://sourceforge.net/projects/nagiosplug/files/nagiosplug/1.4.16/nagios-plugins-1.4.16.tar.gz/download?use_mirror=ufpr , e descompactado da mesma forma que o Nagios. Em seguida, dentro da pasta descompactada nagios-plugins-1.4.16 executar os comandos abaixo para realizar a instalação:

./configure --with-nagios-user=nagios --with-nagios-group=nagios
make
make install

Cada plugin tem a sua configuração específica, e os argumentos de cada um podem ser visualizados apenas executando-os sem nenhum parâmetro, exemplo:

./plugin
NRPE

O plugin NRPE é o mais importante plugin do Nagios. Ele consegue trabalhar com a arquitetura 
cliente-servidor, e é totalmente customizável nos hosts. 

O plugin NRPE pode ser adquirido através do endereço:

http://prdownloads.sourceforge.net/sourceforge/nagios/nrpe-2.13.tar.gz

Deve ser salvo no diretório /opt e então descompactado com o comando:

tar xvzf nrpe-2.13.tar.gz

Dentro do diretório que foi descompactado, deve-se executar os seguintes comandos para compilação e 
instalação do plugin:

./configure
make
make install


Para a utilização do NRPE devemos adicionar as seguintes linhas ao arquivo 
/usr/local/nagios/etc/objects/commands.cfg:

# 'check_nrpe' command definition 
define command{ 
        command_name  check_nrpe 
        command_line     $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$ 
}

Essas linhas permitem ao Nagios executar os comandos do plugin NRPE. 

Para clientes Linux, a instalação é muito similar, o download é o mesmo e deve ser salvo no diretório /opt.
Depois de descompactado, deve-se entrar no diretório descompactado e executar os seguintes comandos:

./configure --with-ssl=/usr/bin/openssl --with-ssl-lib=/usr/lib/x86_64-linux-gnu
make
make install

Em seguida deve-se copiar o arquivo de configuração que está em sample-config/nrpe.cfg para o diretório 
do plugin /usr/local/nagios/bin/. As linha abaixo devem ser alterada colocando-se os hosts que tem 
permissão para coletar os dados do plugin:

 81 allowed_hosts=127.0.0.1, ip.do.servidor.nagios
A partir da linha 201 deve-se configurar os comandos utilizados pelo NRPE, por exemplo:

201 command[check_users]=/usr/local/nagios/libexec/check_users -w 5 -c 10 
202 command[check_load]=/usr/local/nagios/libexec/check_load -w 15,10,5 -c 30,25,20 
203 command[check_hda1]=/usr/local/nagios/libexec/check_disk -w 20% -c 10% -p /dev/hda1 
204 command[check_zombie_procs]=/usr/local/nagios/libexec/check_procs -w 5 -c 10 -s Z 
205 command[check_total_procs]=/usr/local/nagios/libexec/check_procs -w 150 -c 200

O NRPE utiliza os plugins locais para coletar os dados do host, então basta adicionar a linha de comando 
seguindo o padrão acima e utilizando os plugins locais.

No servidor, para se utilizar o NRPE deve-se criar as linhas (exemplo):

define service{ 
        use                       generic-service 
        host_name                host
        service_description      Processos em Execucao 
        check_command            check_nrpe!check_total_procs 
}

NSCLIENT++

O NSClient++ é um plugin para monitoramento de hosts Windows.

O download do plugin deve ser feito em http://files.nsclient.org/stable/NSCP-0.4.1.73-x64.msi
A instalação no Windows é bem simples, basta avançar até pedir o endereço IP do servidor Nagios, na 
senha deixe em branco, vamos configurá-la mais tarde. Após a instalação, o arquivo c:\Arquivos de 
Programas\NSclient\NSC.ini , as seguintes linhas devem ser descomentadas: 


[modules] 
FileLogger.dll 
CheckSystem.dll 
CheckDisk.dll 
NSClientListener.dll 
SysTray.dll 
CheckEventLog.dll 
CheckHelpers.dll 
CheckWMI.dll 
[Settings] 
use_file=1 
allowed_hosts= 
[NSClient] 
allowed_hosts= 
port=1248 9

E na linha da Password você escolherá uma senha para que o Nagios se conecte ao Nsclient++.

A configuração no Nagios é feita no arquivo /usr/local/nagios/etc/objects/commands.cfg adicionando-se as
seguintes linhas:

define command{ 
        command_name    check_nt 
        command_line     $USER1$/check_nt -H $HOSTADDRESS$ -p 12489 -s nagios -v $ARG1$ $ARG2$ 
        }

No arquivo de configurações dos hosts os serviços são definidos seguindo os seguintes padrões:

define service{ 
        use                       generic-service 
        host_name                host
        service_description      CPU Load 
        check_command            check_nt!CPULOAD!-l 5,80,90
}

PNP4NAGIOS

O pnp4nagios é um utilitário que gera gráficos através dos dados de performance gerados pelo Nagios.

O utilitário pode ser adquirido através do endereço 
http://downloads.sourceforge.net/project/pnp4nagios/PNP-0.6/pnp4nagios-0.6.19.tar.gz e salvo no 
diretório /opt do servidor Nagios.

Sua instalação é feita através de códigos-fontes descompactando-se o arquivo baixado e entrando no 
diretório descompactado. Em seguida executar os seguintes comandos:

./configure --with-nagios-user=nagios –with-nagios-group=nagios
make all
make install
make install-webconf
make install-config
make install-init
make fullinstall

Deve-se instalar também o pacote rrdtool:

apt-get install rrdtool

O primeiro passo para a configuração do pnp4nagios é a configuração do arquivo nagios.cfg. Deve-se 
alterar as seguintes linhas:

711 process_performance_data=1

 736 service_perfdata_file=/usr/local/pnp4nagios/var/service-perfdata 
 737 service_perfdata_file_template=DATATYPE::SERVICEPERFDATA\tTIMET::$TIMET$\t
HOSTNAME::$HOSTNAME$\tSERVICEDESC::$SERVICEDESC$\tSERVICEPERFDATA::
$SERVICEPERFDATA$\tSERVICECHECKCOMMAND::$SERVICECHECKCOMMAND$ 
\tHOSTSTATE::$HOSTSTATE$\tHOSTSTATETYPE::$HOSTSTATETYPE$\tSERVICESTATE::
$SERVICESTATE$\tSERVICESTATETYPE::$SERVICESTATETYPE$ 
 738 service_perfdata_file_mode=a 
 739 service_perfdata_file_processing_interval=15 
 740 service_perfdata_file_processing_command=process-service-perfdata-file

 744 host_perfdata_file=/usr/local/pnp4nagios/var/host-perfdata 
 745 host_perfdata_file_template=DATATYPE::HOSTPERFDATA\tTIMET::$TIMET$\tHOSTNAME::
$HOSTNAME$\tHOSTPERFDATA::$HOSTPERFDATA$\tHOSTCHECKCOMMAND::
$HOSTCHECKCOMMAND$\tHOSTSTATE::$HOSTSTATE$\tHOSTSTATETYPE::$HOST 
STATETYPE$ 
 746 host_perfdata_file_mode=a 
 747 host_perfdata_file_processing_interval=15 
 748 host_perfdata_file_processing_command=process-host-perfdata-file

Em seguida deve-se alterar o arquivo commands.cfg nas seguintes linhas:
285 define command{ 
286         command_name            process-service-perfdata-file 
287         command_line            /bin/mv /usr/local/pnp4nagios/var/service-perfdata /usr/local/pnp4nagios/
var/spool/service-perfdata.$TIMET$ 
288 } 
289 
290 define command{ 
291         command_name            process-host-perfdata-file 
292         command_line            /bin/mv /usr/local/pnp4nagios/var/host-perfdata /usr/local/pnp4nagios/
var/spool/host-perfdata.$TIMET$ 
293 }

Salve o arquivo, reinicie o nagios e no navegador visite o endereço:

http://nagios/pnp4nagios para que a instalação seja finalizada.

Para que os gráficos sejam gerados, a seguinte linha deve ser adicionada aos serviços configurados nos 
arquivos dos hosts:

action_url              /pnp4nagios/index.php/graph?host=$HOSTNAME$&srv=$SERVICEDESC$

E a partir de agora os gráficos serão gerados para cada serviço em que a linha acima foi adicionada.


TEMPLATES

Os templates do Nagios definem o modelo de monitoramento do hosts. Esses modelos estão armazenados 
em /usr/local/nagios/etc/objects/templates.cfg e são definidos da seguinte forma:

define host{ 
name                               generic-host     ; Nome do template 
notifications_enabled             1                       ; Notificações de host estão habilitadas 
event_handler_enabled          1                       ; Manipulação de eventos estão habilitadas
flap_detection_enabled           1                       ; Detecção de flaps está habilitada 
failure_prediction_enabled 1                       ; Predição de falhas está habilitada
process_perf_data                 1                       ; Processar dados de performance 
retain_status_information        1                       ; Retém informações de status se o programa reiniciar
retain_nonstatus_information 1                       ; Retém informações non-status se reiniciar 
notification_period   24x7                  ; Envia notificações todo o tempo 
register                          0                        ; Não registrar porque é apenas um template
} 

Os templates específicos herdam várias características dos templates genéricos, mas pode ser totalmente 
customizáveis.

define host{ 
name   linux-server   ; Template de host Linux
use   generic-host   ; Utiliza o template de host genérico
check_period  24x7    ; Checa os hosts todo o tempo
check_interval  5    ; Intervalo de 5 minutos entre as checagens
retry_interval  1    ; Intervalo de 1 minuto caso a checagem dê errado
max_check_attempts 10   ; Máximo de 10 checagens caso dê errado
check_command check-host-alive  ; Comando que verifica se o host está online
notification_period 24x7    ; Notifica todo o tempo
notification_interval 30   ; Intervalo de notificação de um mesmo evento
notification_options d,u,r    ; Eventos notificados (down,unknow,recovery)
contact_groups admins   ; Grupo de contatos a ser notificado
register                       0 
}

define host{ 
name   windows-server
use                              generic-host 
check_period              24x7 
check_interval            5 
retry_interval  1
max_check_attempts 10 
check_command check-host-alive
notification_period 24x7
notification_interval 30 
notification_options d,u,r 
contact_groups admins
hostgroups  windows-servers 
register                        0 
}

define host{ 
name   database-server 
use   generic-host
check_period  24x7 
check_interval  5
retry_interval  1
max_check_attempts 10 
check_command check-host-alive
notification_period 24x7 
notification_interval 30
notification_options d,u,r
contact_groups admins
register  0
}

define host{ 
name   generic-printer 
use   generic-host 
check_period  24x7 
check_interval  5 
retry_interval  1
max_check_attempts 10
check_command check-host-alive 
notification_period workhours 
notification_interval 30
notification_options d,r 
contact_groups admins
register  0 
} 
define host{ 
name   generic-switch
use   generic-host 
check_period  24x7
check_interval  5
retry_interval  1
max_check_attempts 10
check_command check-host-alive
notification_period 24x7
notification_interval 30 
notification_options d,r 
contact_groups admins
register                       0
}

define service{ 
name     generic-service
active_checks_enabled  1 
passive_checks_enabled  1
parallelize_check   1
obsess_over_service   1
check_freshness   0 
notifications_enabled   1
event_handler_enabled  1
flap_detection_enabled  1 
failure_prediction_enabled  1
process_perf_data   1
retain_status_information  1 
retain_nonstatus_information  1 
is_volatile    0 
check_period    24x7
max_check_attempts   3 
normal_check_interval  10 
retry_check_interval   2
contact_groups   admins 
notification_options   w,u,c,r 
notification_interval   60 
notification_period   24x7 
register     0 
}

define service{ 
name     local-service           ; The name of this service template 
use     generic-service         ; Inherit default values from the generic-service definition 
max_check_attempts   4 
normal_check_interval  5 
retry_check_interval   1
register     0 
} 


define contact{ 
name     generic-contact 
service_notification_period  24x7
host_notification_period  24x7
service_notification_options  w,u,c,r,f,s 
host_notification_options  d,u,r,f,s 
service_notification_commands notify-service-by-email
host_notification_commands  notify-host-by-email
register    0 
}

Os contatos e grupos de contatos são definidos no arquivo contacts.cfg.

Os contatos estão definidos da seguinte forma:

define contact{ 
        contact_name  nagiosadmin 
        use   generic-contact 
        alias   Nagios Admin 
        e-mail   nagios@nagios.com.br 
} 

Os grupos estão definidos da seguinte forma:

define contactgroup{ 
        contactgroup_name admins 
        alias   Nagios Administrators 
        members   nagiosadmin 
        } 

EXEMPLO DE HOST

Este é um exemplo básico de um arquivo de configuração de um host, que deve ser salvo como 
hostname.cfg

Ele monitorará apenas o número de usuários logados:

define host{

        use  linux-server
        host_name          hostname
        alias  Server Linux

        icon_image         redhat.jpg

        address  192.168.x.x
}



define hostgroup{

        hostgroup_name redhat-servers
        alias  RedHat Servers

        }



define service{

        use   generic-service

        host_name            hostname

        service_description      Usuarios Logados

        check_command            check_nrpe!check_users

        action_url               /pnp4nagios/index.php/graph?host=$HOSTNAME$&srv=$SERVICEDESC$

}