Nagios

From Supercomputación y Cálculo Científico UIS


Logo_sc33.png

Instalación de Nagios Core 4

Topics on Apache administration

Paquetes previos

apt-get install build-essential apache2 libapache2-mod-php5 libgd2-xpm-dev

Creación cuenta de usuario y grupo

useradd -m -s /bin/bash nagios
passwd nagios
/usr/sbin/groupadd nagcmd
/usr/sbin/usermod -a -G nagcmd nagios
/usr/sbin/usermod -a -G nagcmd www-data

Descargar las fuentes de Nagios Core y descomprimirlas

cd /tmp/
wget http://prdownloads.sourceforge.net/sourceforge/nagios/nagios-4.0.4.tar.gz
tar zxvf nagios-4.0.4.tar.gz 

Compilar

cd nagios-4.0.4
./configure --with-command-group=nagcmd
make all
make install
make install-init
make install-commandmode
make install-config
make install-webconf
make install-exfoliation
cp -R contrib/eventhandlers/ /usr/local/nagios/libexec/
chown -R nagios:nagios /usr/local/nagios/etc/nagios.cfg 
htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin
/etc/init.d/nagios start
service apache2 restart

Instalación de los Plugins básicos

Instalación de algunos paquetes necesarios

apt-get install apache2 libpng12-dev libjpeg8-dev libgd2-xpm-dev fping qstat libldap2-dev libmysqlclient-dev libradius1 libradius1-dev libsnmp-base libsnmp15 libsnmp-dev libnet-snmp-perl smbclient samba-common ntp libpq-dev snmp snmpd openssl rrdtool librrds-perl gcc make
cd /tmp
wget http://nagios-plugins.org/download/nagios-plugins-2.0.tar.gz
tar zxvf nagios-plugins-2.0.tar.gz 
cd /tmp/nagios-plugins-2.0
./configure -with-nagios-user=nagios -with-nagios-group=nagios
make
make install
/etc/init.d/nagios restart
service apache2 restart

Instalación de PNP4Nagios

Paquetes necesarios

apt-get install php5-gd librrds-perl

Descargar e instalar

cd /tmp
wget http://downloads.sourceforge.net/project/pnp4nagios/PNP-0.6/pnp4nagios-0.6.21.tar.gz
tar zxvf pnp4nagios-0.6.21.tar.gz
cd pnp4nagios-0.6.21
./configure
make all
make fullinstall

Configurar npcd y nagios para arranque al inicio y reiniciar

update-rc.d nagios start 20 2 3 4 5 . stop 80 0 1 6
update-rc.d npcd start 19 2 3 4 5 . stop 79 0 1 6
service npcd restart 
service nagios restart
service apache2 restart

Acceder a la interface http://ip_local/pnp4nagios. Debe aparecer todo en verde menos uno que muestra un error: "Apache mod_rewrite is not enabled". Activar este modulo:

a2enmod rewrite && service apache2 restart

Recargar la página en donde se verá todo en verde y se nos pedirá renombrar o borrar el archivo install.php

rm /usr/local/pnp4nagios/share/install.php

Recargar la página en el navegador, lo cual genera el siguiente error: Please check the documentation for information about the following error: perfdata directory “/usr/local/pnp4nagios/var/perfdata/” is empty. Please check your Nagios config. Read FAQ online Este error se presenta porque aun no se ha conectado Nagios con PNP4Nagios.

Existen varias formas de configurar la integración de Nagios, para este caso se utilizara Bulk-mode debido a que para el momento de escribir esta guía el Bulk-mode con npcdmod no funciona por cambios en el Nagios Core 4.

En el directorio /usr/local/pnp4nagios/etc se encuentran dos archivos de los cuales se copiaran ciertos segmentos.

Del archivo nagios.cfg-sample se copia el siguiente fragmento al archivo de Nagios ubicado en /usr/local/nagios/etc/nagios.cfg

#
# Bulk / NPCD mode
#

process_performance_data=1

# *** the template definition differs from the one in the original nagios.cfg
#
service_perfdata_file=/usr/local/pnp4nagios/var/service-perfdata
service_perfdata_file_template=DATATYPE::SERVICEPERFDATA\tTIMET::$TIMET$\tHOSTNAME::$HOSTNAME$\tSERVICEDESC::$SERVICEDESC$\tSERVICEPERFDATA$
service_perfdata_file_mode=a
service_perfdata_file_processing_interval=15
service_perfdata_file_processing_command=process-service-perfdata-file

# *** the template definition differs from the one in the original nagios.cfg
#
host_perfdata_file=/usr/local/pnp4nagios/var/host-perfdata
host_perfdata_file_template=DATATYPE::HOSTPERFDATA\tTIMET::$TIMET$\tHOSTNAME::$HOSTNAME$\tHOSTPERFDATA::$HOSTPERFDATA$\tHOSTCHECKCOMMAND::$$
host_perfdata_file_mode=a
host_perfdata_file_processing_interval=15
host_perfdata_file_processing_command=process-host-perfdata-file

Del archivo miscommands.cfg se copia el siguiente fragmento al archivo de configuración /usr/local/nagios/etc/objects/commands.cfg

#
# Bulk with NPCD mode
#
define command {
       command_name    process-service-perfdata-file
       command_line    /bin/mv /usr/local/pnp4nagios/var/service-perfdata /usr/local/pnp4nagios/var/spool/service-perfdata.$TIMET$
}

define command {
       command_name    process-host-perfdata-file
       command_line    /bin/mv /usr/local/pnp4nagios/var/host-perfdata /usr/local/pnp4nagios/var/spool/host-perfdata.$TIMET$
}

Reiniciar el demonio de pnp4nagios y del Nagios.

service npcd restart
service nagios restart

El error debería desaparecer después de recargar la página en el navegador.

Para acceder directamente a las graficas sin la necesidad de acceder directamente a la interface de pnp4nagios se deben crear los templetes para luego aplicarlos a los objetos.

nano /usr/local/nagios/etc/objects/templates.cfg

y se añade

define host {
   name host-pnp 
   action_url /pnp4nagios/index.php/graph?host=$HOSTNAME$&srv=_HOST_' class='tips' rel='/pnp4nagios/index.php/popup?host=$HOSTNAME$&srv=_HOST_
   register 0
}
define service {
   name srv-pnp
   action_url /pnp4nagios/index.php/graph?host=$HOSTNAME$&srv=$SERVICEDESC$' class='tips' rel='/pnp4nagios/index.php/popup?host=$HOSTNAME$&srv=$SERVICEDESC$
   register 0
}

Y se modifican los objetos Host/Service en donde se quiere acceder a las gráficas generadas por pnp4nagios, por ejemplo:

nano /usr/local/nagios/etc/objects/localhost.cfg

Y se añade la plantilla a los host y servicios (se añade host-pnp en host y srv-pnp en service, que son los nombres de las plantillas que se crearon anteriormente)

define host{
    use linux-server,host-pnp
    host_name localhost
    alias localhost
    address 127.0.0.1
 }
define service{
    use local-service,srv-pnp
    host_name localhost
    service_description PING
    check_command check_ping!100.0,20%!500.0,60%
 }

Reiniciar el servicio de nagios y ncmd (modulo de pnp)

service npcd restart
service nagios restart

Instalación de NRPE - Nagios Remote Plugin Executor

La instalación debe hacerse tanto en los nodos remotos como el el Server.
http://wiki.lazos.cl/index.php?title=Monitoreo_de_Servidores_con_Nagios

En nodos remotos Linux

Instalar dependencias necesarias

apt-get build-essential install libssl-dev libpng12-dev libjpeg8-dev libgd2-xpm-dev fping qstat libldap2-dev libmysqlclient-dev libradius1 libradius1-dev libsnmp-base libsnmp15 libsnmp-dev libnet-snmp-perl smbclient samba-common ntp libpq-dev snmp snmpd openssl rrdtool librrds-perl gcc make

Crear el usuarios Nagios

useradd -m -s /bin/bash nagios
passwd nagios
/usr/sbin/groupadd nagcmd
/usr/sbin/usermod -a -G nagcmd nagios

Descargar los plugins de nagios e instalarlos

cd /tmp
wget http://nagios-plugins.org/download/nagios-plugins-2.0.tar.gz
tar zxvf nagios-plugins-2.0.tar.gz 
cd /tmp/nagios-plugins-2.0
./configure -with-nagios-user=nagios -with-nagios-group=nagios
make
make install
chown nagios.nagios /usr/local/nagios
chown -R nagios.nagios /usr/local/nagios/libexec

Instalar Xinetd

aptitude install xinetd

Instalar el plugin NRPE

cd /tmp/
wget http://garr.dl.sourceforge.net/project/nagios/nrpe-2.x/nrpe-2.15/nrpe-2.15.tar.gz
tar xzf nrpe-2.15.tar.gz 
cd nrpe-2.15

Antes de poder ejecutar el ./configure debe tenerse en cuenta las librerías de ssl que son necesarias para el siguiente paso. En Debian Squeeze las librerías no presentan problemas por tanto puede ejecutarse el comando

./configure

Para Debian Wheezy

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

Se continua con la instalación normal

make all
make install-plugin
make install-daemon
make install-daemon-config

Instalar el demonio NRPE bajo xinetd como servicio

make install-xinetd

Abrir le archivo /etc/xinetd.d/nrpe y añadir en localhost la IP del Servidor de Monitoreo Nagios

nano /etc/xinetd.d/nrpe 
only_from = 127.0.0.1 localhost <nagios_ip_address>

Abra el archivo /etc/services, verifique que se encuentra la línea

nrpe            5666/tcp                 NRPE

De no ser así, debe añadirse al final del archivo.

Reiniciar el servicio

service xinetd restart

Verificar el Demonio NRPE localmente

netstat -at | grep nrpe

Lo cual debería presentarnos los siguientes resultados

tcp        0      0 *:nrpe         :*                         LISTEN

Verificar que el demonio NRPE esta funcionando correctamente.

/usr/local/nagios/libexec/check_nrpe -H localhost

El comando anterior debe mostrar la versión de NRPE instalada.

Puede que se presenten problemas con el Firewall por tanto debe configurársele abrirse el puerto que utiliza el NPRE.

iptables -A INPUT -p tcp -m tcp --dport 5666 -j ACCEPT

Guardar las nuevas reglas

service iptables save

Personalización de los comandos NRPE

Por defecto el archivo de configuración de NRPE tiene varias definiciones de comandos que son usados para monitorear esta máquina. El archivo de configuración está localizado en /usr/local/nagios/etc/nrpe.cfg

A continuación se presentan una serie de comandos que se encuentran localizados en el archivo de configuración.

/usr/local/nagios/libexec/check_nrpe -H localhost -c check_users
/usr/local/nagios/libexec/check_nrpe -H localhost -c check_load
/usr/local/nagios/libexec/check_nrpe -H localhost -c check_hda1
/usr/local/nagios/libexec/check_nrpe -H localhost -c check_total_procs
/usr/local/nagios/libexec/check_nrpe -H localhost -c check_zombie_procs

Para añadir nuevos comandos se debe editar el archivo de configuración del NRPE.

En el servidor de monitoreo Nagios

Instalar el plugin NRPE

apt-get install libssl-dev
cd /tmp/
wget http://garr.dl.sourceforge.net/project/nagios/nrpe-2.x/nrpe-2.15/nrpe-2.15.tar.gz
tar xzf nrpe-2.15.tar.gz 
cd nrpe-2.15

Debe tenerse presente la versión de Debian, para Squeeze no es necesario especificarle la ruta de la librería SSL por lo cual se puede proseguir con el comando

./configure

Para Debian Wheezy se debe indicar el dirección de la librería SSL

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

Instalar la librería

make all
make install-daemon
make install-plugin

Verificar el demonio NRPE remotamente

/usr/local/nagios/libexec/check_nrpe -H remote_linux_ip_address

Lo cual debería mostrar la versión de NRPE instalado en el servidor remoto.

Añadiendo Host remoto Linux al servidor de monitoreo Nagios

cd /usr/local/nagios/etc
touch hosts.cfg
touch services.cfg

Añadir estos dos archivos al archivo de configuración de Nagios

nano /usr/local/nagios/etc/nagios.cfg 

Buscar la sección # You can specify individual object config files as shown below: y añadir:

# You can specify individual object config files as shown below:
cfg_file=/usr/local/nagios/etc/hosts.cfg
cfg_file=/usr/local/nagios/etc/services.cfg

Abra el archivo hosts.cfg y añada la siguiente plantilla. Asegurarse de cambiar hostname alias y address

## Default Linux Host Template ##
define host{
name                            linux-box               ; Name of this template
use                             generic-host            ; Inherit default values
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                       ; DONT REGISTER THIS - ITS A TEMPLATE
}

## Default
define host{
use                             linux-box               ; Inherit default values from a template
host_name                       ficomaco01		        ; The name we're giving to this server
alias                           Debian 6                ; A longer name for the server
address                         192.168.66.117            ; IP address of Remote Linux host
}

Abra el archivo services.cfg y agregue los servicios que serán monitoreados

nano /usr/local/nagios/etc/services.cfg
define service{
        use                     generic-service
        host_name               tecmint
        service_description     CPU Load
        check_command           check_nrpe!check_load
        }

define service{
        use                     generic-service
        host_name               tecmint
        service_description     Total Processes
        check_command           check_nrpe!check_total_procs
        }

define service{
        use                     generic-service
        host_name               tecmint
        service_description     Current Users
        check_command           check_nrpe!check_users
        }

define service{
        use                     generic-service
        host_name               tecmint
        service_description     SSH Monitoring
        check_command           check_nrpe!check_ssh
        }

define service{
        use                     generic-service
        host_name               tecmint
        service_description     FTP Monitoring
        check_command           check_nrpe!check_ftp
        }

La definición del comando NRPE debe ser creada en el archivo commands.cfg

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

Añada la siguiente definición al final del archivo

###############################################################################
# NRPE CHECK COMMAND
#
# Command to use NRPE to check remote host systems
###############################################################################

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

Verificar que los archivos de configuración de Nagios para evitar errores

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

Reiniciar Nagios

service nagios restart

Monitoreo del rendimiento de sistemas Linux

Para esto se utiliza un plugin denominado check_linux_stats el cual permite monitorear cpu, mem, load, disk usage, disk io, network usage, open files y processes. Se debe tener instalado el paquete Sys-Statistics de Perl:

aptitude install libsys-statistics-linux-perl


Uso del plugin
-h, --help
print this help message
-C, --cpu
check cpu usage
-P, --proc
check the processes number
-M, --memory
check memory usage (memory used, swap used and memory cached)
-N, --network=NETWORK USAGE
check network usage in resq or bytes (default bytes)
-D, --disk=DISK USAGE
check disk usage
-I, --io=DISK IO USAGE
check disk I/O (r/w on /dev/sd*)
-L, --load=LOAD AVERAGE
check load average
-F, --file=FILE STATS
check open files (file alloc, inode alloc)
-S, --socket=SOCKET STATS
socket usage (tcp, udp, raw)
-W, --paging=PAGING AND SWAPPING STATS
-U, --uptime
-p, --pattern
eth0,eth1...sda1,sda2.../usr,/tmp
-w, --warning
warning thresold
-c, --critical
critical thresold
-s, --sleep
default 1 sec.
-u, --unit
%, KB, MB or GB left on disk usage, default : MB
REQS OR BYTES on disk io statistics, default : REQS
-V, --version
version number

Ejemplos del uso del plugin
Cpu usage

./check_linux_stats.pl -C -w 90 -c 100 -s 5 

Load average

./check_linux_stats.pl -L -w 10,8,5 -c 20,18,15 

Memory usage

./check_linux_stats.pl -M -w 99,50 -c 100,50 

Disk usage

./check_linux_stats.pl -D -w 10 -c 5 -p /,/usr,/tmp,/var 

Disk I/O

./check_linux_stats.pl -I -w 100,70 -c 150,100 -p sda1,sda2,sda4 

Network usage

./check_linux_stats.pl -N -w 30000 -c 45000 -p eth0 

Open files

./check_linux_stats.pl -F -w 10000,150000 -c 15000,250000 

Socket usage

./check_linux_stats.pl -S -w 1000 -c 2000 

Number of procs

./check_linux_stats.pl -P -w 1000 -c 2000 

Process mem & cpu

./check_linux_stats.pl -T -w 2000000000 -c 3000000000 -p /var/run/jonas.pid 

Paging statistics

./check_linux_stats.pl -W -w 50000,1000 -c 60000,2000 -s 3 

Uptime

./check_linux_stats.pl -U -w 9 

Configuración de envío de mensajes en Nagios

  • Instalar sendemail
apt-get install sendemail
  • Hacer una prueba de envío de correo
sendemail -f sender@email.com -t receiver@email.com -s smtp.mail.com -u "subject" -xu sender@email.com -xp password -m "contenido"

Si se presenta el error invalid SSL_version specified at /usr/share/perl5/IO/Socket/SSL.pm line 332 editar el archivo /usr/share/perl5/IO/Socket/SSL.pm y reemplazar

m{^(!?)(?:(SSL(?:v2|v3|v23|v2/3))|(TLSv1[12]?))$}i

con

m{^(!?)(?:(SSL(?:v2|v3|v23|v2/3))|(TLSv1[12]?))}i

Explicación de los parámetros
-f sender’s mailbox
-t recipient’s mailbox
-s SMTP server’s domain name or ip
-u subject of the message
-xu SMTP authentication user name
-xp SMTP authentication password
-m message content

  • Configurar el archivo contact.cfg y agregar la lista de usuarios
define contact{
        contact_name user1
     	service_notification_period 24x7
     	host_notification_period 24x7
     	service_notification_options w,u,c,r,f
     	host_notification_options d,u,r,f
     	service_notification_commands notify-service-by-email
     	host_notification_commands notify-host-by-email
     	email sender@email.com
        }


banderas de service_notification se definen como:
w = notify on warning states
c = critical states
r = recovery
f = start/stop of flapping
d = notify on down states
u = notify on unreachable states
s = notify on stopped states

  • Añadir en el mismo archivo el grupo de contactos
define contactgroup{
        contactgroup_name       admins
        alias                   Nagios Administrators
        members                 user1, user2, user3
        }

NOTA: Suelen usarse platillas para simplificar el trabajo en NAGIOS como se muestra a continuación

define contact {
        contact_name    user1                   ; Short name of user
        use             generic-contact         ; Inherit default values from generic-contact template (objects/templates.cfg)
        alias           Name user               ; Full name of user
        email           correo@mail.com
        }

En donde use invoca a la plantilla. Esta queda definida como:

# 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                 ; send notifications for all service states, flapping events, and scheduled$
        host_notification_options       d,r                     ; send notifications for all host states, flapping events, and scheduled do$
        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!
        }
  • Editar el archivo commands.cfg
# 'notify-host-by-email' command definition
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" | sendemail -f sender@correo.com -t $CONTACTEMAIL$ -s smtp.correo.com -xu sender@correo.com -xp PASSWORD -u "** $NOTIFICATIONTYPE$ Host Alert:$HOSTNAME$ is $HOSTSTATE$ **" -m "** $NOTIFICATIONTYPE$ Host Alert: $HOSTNAME$ is $HOSTSTATE$ **" -o
         }
  • Reiniciar el servicio.
service nagios restart