Nagios
Contents
Instalación de Nagios Core 4
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