Instalação e Configuração do Nagios e de Cliente Nagios com NRPE + CentOS 6

E ai galera, aqui vou abordar a instalação e a configuração de um Servidor Nagios e a instalação e configuração do cliente Nagios com o NRPE, abaixo um pouco sobre nagios.

Nagios é uma popular aplicação de monitoração de rede de código aberto distribuída sob a licença 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 uma equipe de desenvolvedores que ativamente mantém plugins oficiais e não-oficiais.

Nagios primeiramente foi escrito para o sistema operacional Linux, mas pode rodar em outros Unixes também.

Visão Geral

  • Monitora serviços de rede (SMTP, POP3, HTTP, NNTP, ICMP, SNMP)
  • Monitora recursos de computadores ou equipamentos de rede (carga do processador, uso de disco, logs do sistema) na maioria dos sistemas operacionais com suporte a rede, mesmo o Microsoft Windows com o plugin NRPE_NT.
  • Monitoração remota suportada através de túneis criptografados SSH ou SSL.
  • Desenvolvimento simples de plugins que permite aos usuários facilmente criar seus próprios modos de monitoração dependendo de suas necessidades, usando a ferramenta de desenvolvimento da sua escolha (Bash, C, Perl, Python, PHP, C#, etc.)
  • Checagem dos serviços paralelizadas, ou seja, se você tiver muitos itens monitorados não há risco de alguns deles não serem checados por falta de tempo.
  • Capacidade de definir a rede hierarquicamente definindo equipamentos “pai”, permitindo distinção dos equipamentos que estão indisponíveis daqueles que estão inalcançáveis.
  • Capacidade de notificar quando um serviço ou equipamento apresenta problemas e quando o problema é resolvido (via email, pager, SMS, ou qualquer outro meio definido pelo usuário por plugin).
  • Capacidade de definir tratadores de eventos que executam tarefas em situações pré-determinadas ou para a resolução pró-ativas de problemas.
  • Rotação automática de log.
  • Suporte para implementação de monitoração redundante.
  • Excelente interface web para visualização do atual status da rede, notificações, histórico de problemas, arquivos de log, etc…
  • Versão atual, estável core: 3.4.1

O que vou utilizar de máquinas

  • Nome Nagios Server: nagios
  • Ip: 192.168.1.40
  • Nome Nagios Cliente: centos6
  • Ip: 192.168.1.41

Prepare o seu sistema com o seguinte script http://wiki.douglasqsantos.com.br/doku.php/confinicialcentos6_en para que não falte nenhum pacote ou configuração.

Vamos atualizar os repositórios e fazer um upgrade do servidor Nagios

yum check-update && yum update -y

Agora vamos instalar as dependências

yum install httpd php php-snmp php-xml php-pear net-snmp net-snmp-utils libxml2-devel -y
yum install libpng-devel make autoconf automake gcc gcc-c++ glibc glibc-common -y
yum install gd gd-devel freetype freetype-devel openssl-devel xinetd -y

Agora vamos criar o usuário para o Nagios

useradd nagios -s /bin/bash -m -r

Agora precisamos criar um grupo para o nagios

/usr/sbin/groupadd nagcmd

Agora vamos atribuir os usuários nagios e apache ao grupo nagcmd

/usr/sbin/usermod -a -G nagcmd nagios
/usr/sbin/usermod -a -G nagcmd apache

Agora vamos criar um diretório em /usr/src para armazenarmos os fontes do nagios

mkdir -p /usr/src/downloads

Agora vamos obter os fontes, vamos acessar o diretório aonde vai ficar armazenado os fontes

cd /usr/src/downloads

Vamos obter o nagios core

wget -c http://wiki.douglasqsantos.com.br/Downloads/monitoring/nagios-3.4.1.tar.gz

Agora vamos obter os plugins

wget -c http://wiki.douglasqsantos.com.br/Downloads/monitoring/nagios-plugins-1.4.16.tar.gz

Agora vamos obter o nrpe que é o plugins que vai se conectar nos clientes para obter as informações para o nagios

wget -c http://wiki.douglasqsantos.com.br/Downloads/monitoring/nrpe-2.13.tar.gz

Agora vamos obter um thema para o nagios

wget -c http://wiki.douglasqsantos.com.br/Downloads/monitoring/vautour_style.zip

Agora vamos desempacotar o nagios

tar -xzvf nagios-3.4.1.tar.gz

Agora vamos acessar o diretório do nagios para podermos configurar e compilar ele

cd nagios

Agora vamos preparar ele para a compilação

./configure --with-command-group=nagcmd

Agora vamos compilar o nagios e os cgis

make all

Agora vamos instalar o nagios, cgis e os arquivos html

make install

Vamos mandar instalar o script de controle do daemon

make install-init

Vamos inserir o nagios na inicialização do sistema

chkconfig --add nagios 

Agora precisamos ativar ele

chkconfig nagios on 

Agora vamos mandar instalar os arquivos de configuração de exemplo

make install-config

Agora vamos mandar instalar e configurar as permissões dos diretórios para os comandos externos

make install-commandmode

Agora vamos mandar instalar a parte web

make install-webconf

Vamos mandar instalar o tema classico

make install-classicui

Agora vamos acessar o diretório com os fontes novamente

cd /usr/src/downloads

Agora vamos extrair o novo tema

unzip vautour_style.zip -d ./vautour

Agora vamos fazer um backup do tema classico

cp -Rfa /usr/local/nagios/share /usr/local/nagios/share_OLD

Agora vamos instalar o novo tema

cp -Rfa vautour/* /usr/local/nagios/share/

Agora vamos cadastrar o usuário para o acesso ao frontend do nagios

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

Agora vamos criar um virtualhost para o nagios deixe o arquivo como abaixo

vim /etc/httpd/conf.d/nagios.conf
<VirtualHost  *:80>
ServerName nagios.douglasqsantos.com.br
ServerAdmin douglas@douglasqsantos.com.br
DocumentRoot "/usr/local/nagios/share"
ScriptAlias /nagios/cgi-bin "/usr/local/nagios/sbin"
ScriptAlias /cgi-bin "/usr/local/nagios/sbin"

<Directory "/usr/local/nagios/sbin">
   Options ExecCGI
   AllowOverride None
   Order allow,deny
   Allow from all
   AuthName "Nagios Access"
   AuthType Basic
   AuthUserFile /usr/local/nagios/etc/htpasswd.users
   Require valid-user
</Directory>

Alias /nagios "/usr/local/nagios/share"

<Directory "/usr/local/nagios/share">
   Options None
   AllowOverride None
   Order allow,deny
   Allow from all
   AuthName "Nagios Access"
   AuthType Basic
   AuthUserFile /usr/local/nagios/etc/htpasswd.users
   Require valid-user
</Directory>
ServerSignature Off
ErrorLog ${APACHE_LOG_DIR}/nagios-error.log
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/nagios-access.log combined
</VirtualHost>

Vamos inserir o apache na inicialização do sistema

chkconfig --add httpd

Agora vamos ativar ele

chkconfig httpd on

Vamos acessar o diretório dos fontes

cd /usr/src/downloads

Agora vamos instalar os plugins

tar -xzvf nagios-plugins-1.4.16.tar.gz

Agora vamos acessar o diretório dos plugins

cd nagios-plugins-1.4.16/

Agora vamos preparar ele para a compilação

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

Agora vamos mandar compilar ele

make

Agora vamos mandar instalar os plugins

make install

Agora vamos testar a configuração do nagios

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

Nagios Core 3.4.1
Copyright (c) 2009-2011 Nagios Core Development Team and Community Contributors
Copyright (c) 1999-2009 Ethan Galstad
Last Modified: 05-11-2012
License: GPL

Website: http://www.nagios.org
Reading configuration data...
   Read main config file okay...
Processing object config file '/usr/local/nagios/etc/objects/commands.cfg'...
Processing object config file '/usr/local/nagios/etc/objects/contacts.cfg'...
Processing object config file '/usr/local/nagios/etc/objects/timeperiods.cfg'...
Processing object config file '/usr/local/nagios/etc/objects/templates.cfg'...
Processing object config file '/usr/local/nagios/etc/objects/localhost.cfg'...
   Read object config files okay...

Running pre-flight check on configuration data...

Checking services...
  Checked 8 services.
Checking hosts...
  Checked 1 hosts.
Checking host groups...
  Checked 1 host groups.
Checking service groups...
  Checked 0 service groups.
Checking contacts...
  Checked 1 contacts.
Checking contact groups...
  Checked 1 contact groups.
Checking service escalations...
  Checked 0 service escalations.
Checking service dependencies...
  Checked 0 service dependencies.
Checking host escalations...
  Checked 0 host escalations.
Checking host dependencies...
  Checked 0 host dependencies.
Checking commands...
  Checked 24 commands.
Checking time periods...
  Checked 5 time periods.
Checking for circular paths between hosts...
Checking for circular host and service dependencies...
Checking global event handlers...
Checking obsessive compulsive processor commands...
Checking misc settings...

Total Warnings: 0
Total Errors:   0

Things look okay - No serious problems were detected during the pre-flight check

Sempre precisamos ficar atentos com Total Warnings e Total erros, já que não temos nenhum problema podemos iniciar o nagios

/etc/init.d/nagios start

Agora já podemos mandar reiniciar o apache e testar o nagios

/etc/init.d/httpd restart

Agora é so acessar http://nagios.douglasqsantos.com.br ou http://ip_servidor usuário: nagiosadmin senha: senha que foi definida com htpasswd

Considerações:

  • Em Host Detail: Vamos ter informações de todos os hosts cadastrados e se eles estão up.
  • Em Service Detail: Vamos ter informações sobre todos os serviços cadastrados para os hosts.

Vamos ter um warning no serviço do http por que a página do nagios contem autenticação, porém isso não é um problema.

Arquivos de controle do Nagios

Agora vamos ver o arquivo de controle de contatos caso tenhamos algum problema com o nosso nagios

Vamos fazer um backup dele

cp -Rfa /usr/local/nagios/etc/objects/contacts.cfg{,.bkp}

Agora vamos editar este arquivo

vim /usr/local/nagios/etc/objects/contacts.cfg
### Aqui temos a definição de um contato, nome do contato, tipo de contato que é template um alias para ele e o seu email
define contact{
        contact_name                    nagiosadmin   
  use       generic-contact   
        alias                           Nagios Admin    
        email                           nagios@douglasqsantos.com.br
        }

### Vamos definir mais um contato
define contact{
        contact_name                    douglas
  use       generic-contact   
        alias                           Douglas Q dos Santos
        email                           douglas@douglasqsantos.com.br
        }

### Aqui nós definimos os grupos de contatos este primeiro é dos admins

### Aqui precisamos definir o nome do grupo, um alias e quem são os membros os membros são separados por ","
define contactgroup{
        contactgroup_name       admins
        alias                   Nagios Administrators
        members                 nagiosadmin,douglas
        }

Vamos dar uma olhada agora no arquivo que controla quando que os serviços vão ser chacados Vamos fazer um backup deste arquivo

cp -Rfa /usr/local/nagios/etc/objects/timeperiods.cfg{,.bkp}

Agora vamos editar este arquivo

vim /usr/local/nagios/etc/objects/timeperiods.cfg
### Aqui na primeira definição temos eu acho que a mais importante monitoramente 24X7
### Aqui precisamos definir o nome para o periodo de tempo de checagem, um alias para ele e os dias e horários que vamos monitorar.
define timeperiod{
        timeperiod_name 24x7
        alias           24 Hours A Day, 7 Days A Week
        sunday          00:00-24:00
        monday          00:00-24:00
        tuesday         00:00-24:00
        wednesday       00:00-24:00
        thursday        00:00-24:00
        friday          00:00-24:00
        saturday        00:00-24:00
        }

### Aqui vamos definir chacagem em horário comercial, seque a mesma lógica, define o nome e alias e os dias e horários que vamos monitorar
define timeperiod{
  timeperiod_name workhours
  alias   Normal Work Hours
  monday    09:00-17:00
  tuesday   09:00-17:00
  wednesday 09:00-17:00
  thursday  09:00-17:00
  friday    09:00-17:00
  }

### Aqui estamos definindo monitoramento nos feriados, os abaixo são os feriados dos U.S
define timeperiod{
  name      us-holidays
        timeperiod_name         us-holidays
        alias                   U.S. Holidays

        january 1               00:00-00:00     ; New Years
        monday -1 may           00:00-00:00     ; Memorial Day (last Monday in May)
        july 4                  00:00-00:00     ; Independence Day
        monday 1 september      00:00-00:00     ; Labor Day (first Monday in September)
        thursday 4 november     00:00-00:00     ; Thanksgiving (4th Thursday in November)
        december 25             00:00-00:00     ; Christmas
        }


### Aqui abaixo estamos definindo o monitoramento 24X7 excluindo os feriados que definimos acima
define timeperiod{
        timeperiod_name 24x7_sans_holidays
        alias           24x7 Sans Holidays
  use   us-holidays   
        sunday          00:00-24:00
        monday          00:00-24:00
        tuesday         00:00-24:00
        wednesday       00:00-24:00
        thursday        00:00-24:00
        friday          00:00-24:00
        saturday        00:00-24:00
        }

A configuração que é carregada para monitorar o nosso servidor esta em /usr/local/nagios/etc/objects/localhost.cfg vou mostar o arquivo comentado e vou modificar mais algumas coisas

Vamos fazer um backup do arquivo

cp -Rfa /usr/local/nagios/etc/objects/localhost.cfg{,.bkp}

Agora vamos editar ele

vim /usr/local/nagios/etc/objects/localhost.cfg
### Aqui vamos definir qual template que ele vai utilizar o nome do host, um alias e o seu endereço
define host{
        use                     linux-server        
        host_name               Nagios
        alias                   Nagios
        address                 127.0.0.1
        }

### Aqui começa a definição de serviços

### Vamos ter o template para o serviço, o hostname uma descrição para o serviço e o comando que vai ser executado para a checagem, aqui vamos ter uma checagem de ping
define service{
        use                             local-service         
        host_name                       Nagios
        service_description             PING
  check_command     check_ping!100.0,20%!500.0,60%
        }

### Aqui temos a definição da checagem da partição raiz eu cou criar mais abaixo a checagem para /usr,/var,/tmp e /home comente as que você não utilizar ;)
define service{
        use                             local-service  
        host_name                       Nagios
        service_description             Root Partition
  check_command     check_local_disk!20%!10%/
        }

### Aqui temos a checagem da partição /usr
define service{
        use                             local-service  
        host_name                       Nagios
        service_description             Usr Partition
  check_command     check_local_disk!20%!10%/usr
        }

### Aqui temos a checagem da partição /var
define service{
        use                             local-service  
        host_name                       Nagios
        service_description             Var Partition
  check_command     check_local_disk!20%!10%/var
        }

### Aqui temos a checagem da partição /tmp
define service{
        use                             local-service  
        host_name                       Nagios
        service_description             Tmp Partition
  check_command     check_local_disk!20%!10%/tmp
        }

### Aqui temos a checagem da partição /home
define service{
        use                             local-service  
        host_name                       Nagios
        service_description             Home Partition
  check_command     check_local_disk!20%!10%/home
        }

### Aqui temos a checagem de usuários logados
define service{
        use                             local-service        
        host_name                       Nagios
        service_description             Current Users
  check_command     check_local_users!20!50
        }

### Aqui temos a checagem da quantidade de processos
define service{
        use                             local-service 
        host_name                       Nagios
        service_description             Total Processes
  check_command     check_local_procs!250!400!RSZDT
        }

### Aqui temos a checagem do LOAD do servidor
define service{
        use                             local-service         
        host_name                       Nagios
        service_description             Current Load
  check_command     check_local_load!5.0,4.0,3.0!10.0,6.0,4.0
        }

### Aqui temos a checagem da SWAP
define service{
        use                             local-service        
        host_name                       Nagios
        service_description             Swap Usage
  check_command     check_local_swap!20!10
        }

### Aqui temos a checagem do serviço de SSH por padrão ele faz a chacagem na porta 22, depois vou mostrar como alterar isso ;)
define service{
        use                             local-service         
        host_name                       Nagios
        service_description             SSH
  check_command     check_ssh
        }

### Aqui vamos a checagem do serviço de http vou comentar este serviço
#define service{
#        use                             local-service         ; Name of service template to use
#        host_name                       localhost
#        service_description             HTTP
# check_command     check_http
# notifications_enabled   0
#        }

Agora vamos criar a configuração para agruparmos os servidores por exemplo: por tipo de serviço.

vim  /usr/local/nagios/etc/objects/hostgroup.cfg 
### Grupo de monitoramento
### Aqui definimos o nome do grupo, um alias para o grupo e os membros que devem ser separador por vírgula ","
define hostgroup{
        hostgroup_name  Monitoramento 
        alias           Monitoramento 
        members         Nagios     
        }

Agora vamos inserir ela no arquivo de referência do nagios

vim /usr/local/nagios/etc/nagios.cfg 
[...]
# Definitions for monitoring the local (Linux) host
cfg_file=/usr/local/nagios/etc/objects/localhost.cfg

### Inclusão do arquivo de controle dos grupos de hosts
cfg_file=/usr/local/nagios/etc/objects/hostgroup.cfg
[...]

Agora vamos checar se não temos erros em nossa configuração

/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
[...]
Total Warnings: 0
Total Errors:   0

Things look okay - No serious problems were detected during the pre-flight check

Agora vamos reiniciar o serviço do nagios

/etc/init.d/nagios restart

Instalação e Configuração do NRPE

Agora vamos a instalação e configuração do NRPE que é o serviço que vamos utilizar para capturar as informações para o nagios

Ainda no servidor vamos acessar o diretório dos fontes

cd /usr/src/downloads

Agora vamos desempacotar o nrpe

tar -xzvf nrpe-2.13.tar.gz

Agora vamos acessar ele

cd nrpe-2.13/

Agora vamos ajustar a configuração dele

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

Agora vamos mandar compilar ele

make all

Agora vamos mandar instalar o plugin

make install-plugin

Agora vamos mandar instalar o daemon

make install-daemon

Agora vamos mandar instalar a configuração do daemon, aonde nós vamos definir como que o nrpe vai se comportar

make install-daemon-config

Agora vamos mandar instalar a configuração para o xinetd

make install-xinetd

Precisamos adicionar uma entrada em /etc/services para o serviço do nrpe, por que as vezes ele não sobe senão achar esta entrada.

vim /etc/services
[...]
nrpe            5666/tcp                        # NRPE
[...]

Vamos adicionar o xinetd na inicialização

chkconfig --add xinetd

Agora vamos ativar ele

chkconfig xinetd on

Agora vamos reiniciar o Xinetd

/etc/init.d/xinetd restart

Agora vamos testar a conexão com o nrpe

/usr/local/nagios/libexec/check_nrpe -H localhost
NRPE v2.13

Conseguimos conectar no nrpe, agora vamos obter a informação de quantos usuários logados nós temos

/usr/local/nagios/libexec/check_nrpe -H localhost -c check_users
USERS OK - 1 users currently logged in |users=1;5;10;0

Agora vamos checar o load do sistema

/usr/local/nagios/libexec/check_nrpe -H localhost -c check_load
OK - load average: 0.10, 0.09, 0.04|load1=0.100;15.000;30.000;0; load5=0.090;10.000;25.000;0; load15=0.040;5.000;20.000;0; 

A chamada que eu fiz -c check_load está definida em /usr/local/nagios/etc/nrpe.cfg daqui a pouco vou comentar sobre ela ;)

Temos o nosso Nagios com NRPE funcionando agora precisamos configurar o cliente

Configurando o Cliente NRPE

Prepare o seu sistema com o seguinte script http://wiki.douglasqsantos.com.br/doku.php/confinicialcentos6_en para que não falte nenhum pacote ou configuração.

Vamos atualizar os repositórios e fazer um upgrade do cliente Nagios

yum check-update && yum update -y

Agora vamos instalar as dependências

yum install net-snmp net-snmp-utils libxml2-devel make autoconf automake gcc gcc-c++ glibc glibc-common -y
yum install openssl-devel xinetd -y

Agora vamos criar o diretório para armazenar os fontes

mkdir -p /usr/src/downloads

Agora vamos criar o usuário para o Nagios

useradd nagios -s /bin/bash -m -r

Agora vamos acessar o diretório

cd /usr/src/downloads

Agora vamos obter os pacotes do nrpe e dos plugins que o nrpe vai executar para enviar as informações para o nagios

Vamos obter o nrpe

wget -c http://wiki.douglasqsantos.com.br/Downloads/monitoring/nrpe-2.13.tar.gz

Agora vamos obter os plugins

wget -c http://wiki.douglasqsantos.com.br/Downloads/monitoring/nagios-plugins-1.4.16.tar.gz

Agora vamos instalar os plugins

tar -xzvf nagios-plugins-1.4.16.tar.gz

Agora vamos acessar o diretório dos plugins

cd nagios-plugins-1.4.16/

Agora vamos preparar ele para a compilação

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

Agora vamos mandar compilar ele

make

Agora vamos mandar instalar os plugins

make install

Agora vamos acessar o diretório dos fontes

cd /usr/src/downloads

Agora vamos desempacotar o nrpe

tar -xzvf nrpe-2.13.tar.gz

Agora vamos acessar ele

cd nrpe-2.13/

Agora vamos ajustar a configuração dele

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

OBS:

  • Caso utilize um Cliente Ubuntu 64 Bits precisamos passar a linha acima da seguinte forma
./configure --with-nagios-user=nagios --with-nagios-group=nagios  --with-ssl=/usr/bin/openssl --with-ssl-lib=/usr/lib/x86_64-linux-gnu

Agora vamos mandar compilar ele

make all

Agora vamos mandar instalar o plugin

make install-plugin

Agora vamos mandar instalar o daemon

make install-daemon

Agora vamos mandar instalar a configuração do daemon, aonde nós vamos definir como que o nrpe vai se comportar

make install-daemon-config

Agora vamos mandar instalar a configuração para o xinetd

make install-xinetd

Agora vamos acertar o nrpe para ele enviar as informações para o servidor, então após 127.0.0.1 vamos inserir o ip do servidor nagios

vim /etc/xinetd.d/nrpe
[...]
            only_from       = 127.0.0.1 192.168.1.40

Agora vamos acertar o nrpe.cfg para que ele responda ao servidor Nagios

vim /usr/local/nagios/etc/nrpe.cfg
[...]
allowed_hosts=127.0.0.1, 192.168.1.40

Precisamos adicionar uma entrada em /etc/services para o serviço do nrpe, por que as vezes ele não sobe senão achar esta entrada.

vim /etc/services
[...]
nrpe            5666/tcp                        # NRPE
[...]

Agora vamos inserir o xinetd na inicialização

chkconfig --add xinetd

Agora vamos ativar ele

chkconfig xinetd on

Agora vamos reiniciar o Xinetd

/etc/init.d/xinetd restart

Agora vamos testar a conexão com o nrpe, no servidor execute os seguintes comandos

/usr/local/nagios/libexec/check_nrpe -H 192.168.1.41
NRPE v2.13

Conseguimos conectar no nrpe, agora vamos obter a informação de quantos usuários logados nós temos

/usr/local/nagios/libexec/check_nrpe -H 192.168.1.41 -c check_users
USERS OK - 1 users currently logged in |users=1;5;10;0

Agora vamos checar o load do sistema

/usr/local/nagios/libexec/check_nrpe -H 192.168.1.41 -c check_load
OK - load average: 0.02, 0.10, 0.05|load1=0.020;15.000;30.000;0; load5=0.100;10.000;25.000;0; load15=0.050;5.000;20.000;0; 

No Cliente agora vamos ajustar o nrpe.cfg Vamos fazer um backup do arquivo antes

cp -Rfa /usr/local/nagios/etc/nrpe.cfg{,.bkp}
vim /usr/local/nagios/etc/nrpe.cfg
### Categoria de LOG
log_facility=daemon

### Arquivo com o PID
pid_file=/var/run/nrpe.pid

### Porta do NRPE
server_port=5666

# SERVER ADDRESS esta opção é ignorado quanto utilizamos xinetd ou inetd
#server_address=0.0.0.0

### Usuário NRPE
nrpe_user=nagios

### Grupo NRPE
nrpe_group=nagios

### Maquinas que poderão escutar o nrpe
allowed_hosts=127.0.0.1,192.168.1.40
 
# Não habilitar esta opção pois o nagios pode enviar qualquer comando com qualquer parametro
dont_blame_nrpe=0

### Quando precisamos utilizar sudo para executar algum plugin do nagios
# Execução de plugins pelo sudo deve ser configurado como abaixo
# nagios          ALL=(ALL) NOPASSWD: /usr/lib/nagios/plugins/
### Chamada prefixo que vai ser utilizado no comando do nagios
# command_prefix=/usr/bin/sudo 

### Opções de Debug
debug=0

### Timeout para o NRPE
command_timeout=60

### Timeout para Conexão
connection_timeout=300

### Opções randomicas 
#allow_weak_random_seed=1

### Incluir arquivo de configuração
#include=<somefile.cfg>

### Incluir diretório de configuração 
#include_dir=<somedirectory>

### Aqui vamos definir os comandos que serão chamados pelo nagios quando mandarmos pelo /usr/local/nagios/libexec/check_nrpe -H maquina -c comando que vai ser os abaixo entre conchetes 
#que é um alias para o comando com que vai ser executado na maquina
command[check_users]=/usr/local/nagios/libexec/check_users -w 5 -c 10
command[check_load]=/usr/local/nagios/libexec/check_load -w 15,10,5 -c 30,25,20
command[check_zombie_procs]=/usr/local/nagios/libexec/check_procs -w 5 -c 10 -s Z
command[check_total_procs]=/usr/local/nagios/libexec/check_procs -w 150 -c 200 
command[check_raiz]=/usr/local/nagios/libexec/check_disk -w 20 -c 10 -p /dev/sda1
command[check_home]=/usr/local/nagios/libexec/check_disk -w 20 -c 10 -p /dev/sda9
command[check_tmp]=/usr/local/nagios/libexec/check_disk -w 20 -c 10 -p /dev/sda8
command[check_usr]=/usr/local/nagios/libexec/check_disk -w 20 -c 10 -p /dev/sda5
command[check_var]=/usr/local/nagios/libexec/check_disk -w 20 -c 10 -p /dev/sda6
command[check_swap]=/usr/local/nagios/libexec/check_swap -w 20 -c 10
command[check_procs]=/usr/local/nagios/libexec/check_procs -w $ARG1$ -c $ARG2$ -s $ARG3$

Aqui no cliente precisamos reiniciar o xinetd

/etc/init.d/xinetd restart

Agora no servidor Nagios vamos criar o arquivo que vai conter a configuração para monitorar o cliente nagios

vim /usr/local/nagios/etc/objects/centos.cfg
### Aqui vamos definir o nosso host a configuração é bem parecido com a do servidor mudamos algumas coisas para adaptar o nrpe
define host{
        use                     linux-server            
        host_name               CentOS
        alias                   CentOS
        address                 192.168.1.41
        }

### Definição da checagem de ping
define service{
        use                             local-service        
        host_name                       CentOS
        service_description             PING
  check_command     check_ping!100.0,20%!500.0,60%
        }

### Definição da checagem do Root partition, note que o comando é diferente do nagios server
define service{
        use                             local-service        
        host_name                       CentOS
        service_description             Root Partition
  check_command     check_ext_raiz!check_raiz
        }

### Definição da checagem do Home partition, note que o comando é diferente do nagios server
define service{
        use                             local-service        
        host_name                       CentOS
        service_description             Home Partition
  check_command     check_ext_home!check_home
        }

### Definição da checagem do Tmp partition, note que o comando é diferente do nagios server
define service{
        use                             local-service        
        host_name                       CentOS
        service_description             Tmp Partition
  check_command     check_ext_tmp!check_tmp
        }

### Definição da checagem do Usr partition, note que o comando é diferente do nagios server
define service{
        use                             local-service         ; Name of service template to use
        host_name                       CentOS
        service_description             Usr Partition
  check_command     check_ext_usr!check_usr
        }

### Definição da checagem do Var partition, note que o comando é diferente do nagios server
define service{
        use                             local-service         ; Name of service template to use
        host_name                       CentOS
        service_description             Var Partition
  check_command     check_ext_var!check_var
        }

### Definição da checagem do Load, note que o comando é diferente do nagios server
define service{
        use                             local-service         ; Name of service template to use
        host_name                       CentOS
        service_description             Load
  check_command     check_ext_load!check_load
        }

### Definição da checagem dos Usuáros logado, note que o comando é diferente do nagios server
define service{
        use                             local-service         ; Name of service template to use
        host_name                       CentOS
        service_description             Users
  check_command     check_ext_users!check_users
        }

### Definição da checagem do total de processos, note que o comando é diferente do nagios server
define service{
        use                             local-service         ; Name of service template to use
        host_name                       CentOS
        service_description             Total de Processos
  check_command     check_ext_total_procs!check_total_procs
        }

### Definição da checagem dos processos Zumbis, note que o comando é diferente do nagios server
define service{
        use                             local-service         ; Name of service template to use
        host_name                       CentOS
        service_description             Processos Zumbis
  check_command     check_ext_zombie_procs!check_zombie_procs
        }

### Definição da checagem da Swap, note que o comando é diferente do nagios server
define service{
        use                             local-service         ; Name of service template to use
        host_name                       CentOS
        service_description             Swap Usage
        check_command                   check_ext_swap!20!10
        }

Agora vamos adicionar criar a configuração para agruparmos os servidores por exemplo: por tipo de serviço.

vim  /usr/local/nagios/etc/objects/hostgroup.cfg 
### Grupo de monitoramento
### Aqui definimos o nome do grupo, um alias para o grupo e os membros que devem ser separador por vírgula ","
define hostgroup{
        hostgroup_name  Monitoramento 
        alias           Monitoramento 
        members         Nagios     
        }

define hostgroup{
        hostgroup_name  Sistemas
        alias           Sistemas
        members         CentOS
        }

Agora vamos referenciar este arquivo na configuração do nagios no servidor, vamos inserir abaixo da configuração do localhost.

vim /usr/local/nagios/etc/nagios.cfg 
[...]
# Definitions for monitoring the local (Linux) host
cfg_file=/usr/local/nagios/etc/objects/localhost.cfg

### Inclusão do arquivo de controle dos grupos de hosts
cfg_file=/usr/local/nagios/etc/objects/hostgroup.cfg

### Inclusão do arquivo de controle do cliente CentOS
cfg_file=/usr/local/nagios/etc/objects/centos.cfg
[...]

Agora vamos fazer um backup do arquivo de comandos do nagios e vamos adicionar os comandos do nrpe

Fazendo backup do arquivo de comandos

cp -Rfa /usr/local/nagios/etc/objects/commands.cfg{,.bkp}

Agora vamos definir o nosso arquivo que controla o que podemos mandar o nagios checar

vim /usr/local/nagios/etc/objects/commands.cfg

### Comando que controla o envio de Email de alerta sobre hosts
define command{
  command_name  notify-host-by-email
  command_line  /usr/bin/printf "%b" "***** Nagios  *****\n\nNotification Type: $NOTIFICATIONTYPE$\nHost: $HOSTNAME$\nState: $HOSTSTATE$\nAddress: $HOSTADDRESS$\nInfo: $HOSTOUTPUT$\n\nDate/Time: $LONGDATETIME$\n" | /usr/bin/mail -s "** $NOTIFICATIONTYPE$ Host Alert: $HOSTNAME$ is $HOSTSTATE$  **" $CONTACTEMAIL$
  }

### Comando que controla o envio de Email de alerta sobre serviços
define command{
  command_name  notify-service-by-email
  command_line  /usr/bin/printf "%b" "***** Nagios  *****\n\nNotification Type: $NOTIFICATIONTYPE$\n\nService: $SERVICEDESC$\nHost: $HOSTALIAS$\nAddress: $HOSTADDRESS$\nState: $SERVICESTATE$\n\nDate/Time: $LONGDATETIME$\n\nAdditional Info:\n\n$SERVICEOUTPUT$\n" | /usr/bin/mail -s "** $NOTIFICATIONTYPE$ Service Alert: $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$  **" $CONTACTEMAIL$
  }


### Comandos de checagem


### Checagem via ping para verificar se o host está up
define command{
        command_name    check-host-alive
        command_line    $USER1$/check_ping -H $HOSTADDRESS$ -w 3000.0,80% -c 5000.0,100% -p 5
        }

### Checagem de partições
# 'check_local_disk' command definition
define command{
        command_name    check_local_disk
        command_line    $USER1$/check_disk -w $ARG1$ -c $ARG2$ -p $ARG3$
        }


### Aqui vamos definir a checagem via nrpe que é para checar no lado cliente por isso que criamos alias para os comandos no cliente.

### Checagem da partição / via nrpe
define command{
        command_name    check_ext_raiz
        command_line    $USER1$/check_nrpe -H $HOSTADDRESS$ -c check_raiz
        }

### Checagem da partição /home via nrpe
define command{
        command_name    check_ext_home
        command_line    $USER1$/check_nrpe -H $HOSTADDRESS$ -c check_home
        }

### Checagem da partição /tmp via nrpe
define command{
        command_name    check_ext_tmp
        command_line    $USER1$/check_nrpe -H $HOSTADDRESS$ -c check_tmp
        }

### Checagem da partição /usr via nrpe
define command{
        command_name    check_ext_usr
        command_line    $USER1$/check_nrpe -H $HOSTADDRESS$ -c check_usr
        }

### Checagem da partição /var via nrpe
define command{
        command_name    check_ext_var
        command_line    $USER1$/check_nrpe -H $HOSTADDRESS$ -c check_var
        }

### Checagem do load via nrpe
define command{
        command_name    check_ext_load
        command_line    $USER1$/check_nrpe -H $HOSTADDRESS$ -c check_load 
        }

### Checagem dos usuários via nrpe
define command{
        command_name    check_ext_users
        command_line    $USER1$/check_nrpe -H $HOSTADDRESS$ -c check_users
        }

### Checagem do total de processos via nrpe
define command{
        command_name    check_ext_total_procs
        command_line    $USER1$/check_nrpe -H $HOSTADDRESS$ -c check_total_procs
        }

### Checagem dos processos zumbies via nrpe
define command{
        command_name    check_ext_zombie_procs
        command_line    $USER1$/check_nrpe -H $HOSTADDRESS$ -c check_zombie_procs
        }

### Checagem da swap via nrpe
define command{
        command_name    check_ext_swap
        command_line    $USER1$/check_nrpe -H $HOSTADDRESS$ -c check_swap
        }

### Checagem do load local 
define command{
        command_name    check_local_load
        command_line    $USER1$/check_load -w $ARG1$ -c $ARG2$
        }


### Checagem os processos locais
define command{
        command_name    check_local_procs
        command_line    $USER1$/check_procs -w $ARG1$ -c $ARG2$ -s $ARG3$
        }


### Checagem dos usuários
define command{
        command_name    check_local_users
        command_line    $USER1$/check_users -w $ARG1$ -c $ARG2$
        }


### Checagem da swap local
define command{
  command_name  check_local_swap
  command_line  $USER1$/check_swap -w $ARG1$ -c $ARG2$
  }


### Chacagem do mrtgtraf
define command{
  command_name  check_local_mrtgtraf
  command_line  $USER1$/check_mrtgtraf -F $ARG1$ -a $ARG2$ -w $ARG3$ -c $ARG4$ -e $ARG5$
  }


### Checagem de ftp pode ser local ou remoto
define command{
        command_name    check_ftp
        command_line    $USER1$/check_ftp -H $HOSTADDRESS$ $ARG1$
        }


### Checagem de impressora pode ser local ou remoto
define command{
        command_name    check_hpjd
        command_line    $USER1$/check_hpjd -H $HOSTADDRESS$ $ARG1$
        }


### Checagem de snmp pode ser local ou remoto
define command{
        command_name    check_snmp
        command_line    $USER1$/check_snmp -H $HOSTADDRESS$ $ARG1$
        }


### Checagem de http local ou remoto
define command{
        command_name    check_http
        command_line    $USER1$/check_http -I $HOSTADDRESS$ $ARG1$
        }


### Checagem de ssh
define command{
  command_name  check_ssh
  command_line  $USER1$/check_ssh $ARG1$ $HOSTADDRESS$
  }
### para descobrir os paramêtros que podemos utilizar execute o comando com a opção --help ex: /usr/local/nagios/libexec/check_ssh --help não se esqueça que ele tem uma ordem lógica
### Checagem de ssh com porta diferente utilizei como exemplo porta 2222
define command{
  command_name  check_ssh2
  command_line  $USER1$/check_ssh $ARG1$  -p 2222 $HOSTADDRESS$
  }

### Checagem de dhcp local
define command{
  command_name  check_dhcp
  command_line  $USER1$/check_dhcp $ARG1$
  }


### Chacagem de ping local ou remoto
define command{
        command_name    check_ping
        command_line    $USER1$/check_ping -H $HOSTADDRESS$ -w $ARG1$ -c $ARG2$ -p 5
        }


### Checagem de pop local ou remoto
define command{
        command_name    check_pop
        command_line    $USER1$/check_pop -H $HOSTADDRESS$ $ARG1$
        }


### Checagem de imap
define command{
        command_name    check_imap
        command_line    $USER1$/check_imap -H $HOSTADDRESS$ $ARG1$
        }


### Checagem de smtp
define command{
        command_name    check_smtp
        command_line    $USER1$/check_smtp -H $HOSTADDRESS$ $ARG1$
        }


### Checagem de tcp
define command{
  command_name  check_tcp
  command_line  $USER1$/check_tcp -H $HOSTADDRESS$ -p $ARG1$ $ARG2$
  }


### Checagem de udp
define command{
  command_name  check_udp
  command_line  $USER1$/check_udp -H $HOSTADDRESS$ -p $ARG1$ $ARG2$
  }


### Checagem de nt
define command{
  command_name  check_nt
  command_line  $USER1$/check_nt -H $HOSTADDRESS$ -p 12489 -v $ARG1$ $ARG2$
  }



### Comandos utilizados para obter a performace da maquina e enviar para um arquivo
define command{
  command_name  process-host-perfdata
  command_line  /usr/bin/printf "%b" "$LASTHOSTCHECK$\t$HOSTNAME$\t$HOSTSTATE$\t$HOSTATTEMPT$\t$HOSTSTATETYPE$\t$HOSTEXECUTIONTIME$\t$HOSTOUTPUT$\t$HOSTPERFDATA$\n" >> /usr/local/nagios/var/host-perfdata.out
  }


### Comandos utilizados para obter a performace da maquina e enviar para um arquivo
define command{
  command_name  process-service-perfdata
  command_line  /usr/bin/printf "%b" "$LASTSERVICECHECK$\t$HOSTNAME$\t$SERVICEDESC$\t$SERVICESTATE$\t$SERVICEATTEMPT$\t$SERVICESTATETYPE$\t$SERVICEEXECUTIONTIME$\t$SERVICELATENCY$\t$SERVICEOUTPUT$\t$SERVICEPERFDATA$\n" >> /usr/local/nagios/var/service-perfdata.out
  }

Agora vamos checar se não temos erros em nossa configuração

/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
[...]
Total Warnings: 0
Total Errors:   0

Things look okay - No serious problems were detected during the pre-flight check

Agora vamos reiniciar o serviço do nagios

/etc/init.d/nagios restart

Agora é só acompanhar as estáticas do Nagios e os alertas ;)

Para adicionar mais clientes podemos inserir no final do arquivo centos.cfg a mesma configuração feita para o cliente CentOS e efetuar os mesmos ajustes no nrpe ou podemos criar um novo arquivo para cada cliente e informar no nagios.cfg

Referências