Configurando Nagios 3.x (y III)

icono de herramientasContinuamos donde lo dejamos. Una de las cosas que tenemos pendiente es hacer que nagios nos notifique las alertas que detecta, porque si tenemos que estar pendientes de las pantallas de estado en todo momento la cosa, después de las primeras horas, no tiene tanta gracia ¿verdad? Para ello lo único que tenemos que hacer es editar el fichero /usr/local/nagios/etc/objects/contacts.cfg y modificar la dirección de correo del contacto que trae por defecto por la nuestra:

define contact{
     contact_name nagiosadmin ; Short name of user
     use generic-contact ; Inherit default values from generic-contact template (defined above)
     alias Nagios Admin ; Full name of user
     email alertas.nagios@midominio.es ; <<***** CHANGE THIS TO YOUR EMAIL ADDRESS ******      }

Si lo del aviso por correo electrónico se nos queda corto existen al menos una solución comercial que permite que nagios nos alerte a través de SMS. Referencias aquí.

Ahora vamos a añadir algunos plugins que requieran de alguna configuración adicional para que veais que también es muy sencillo. Empezamos por uno que nos compruebe el estado de un servidor de mysql. El plugin necesario (check_mysql) viene con nagios aunque no está configurado para su uso. Lo primero que tenemos que hacer es abrir un shell, irnos al directorio de plugins y ver que entrada necesita:

nagios:/usr/lib/nagios/plugins# ./check_mysql -h
check_mysql (nagios-plugins 1.4.8) 1.35
Copyright (c) 1999-2006 Nagios Plugin Development Team

This program tests connections to a mysql server

Usage:check_mysql [-d database] [-H host] [-P port] [-u user] [-p password] [-S]

Parece evidente ¿no? Creamos un usuario con privilegios mínimos en nuestro servidor de mysql (el mismo que aloja la intranet en este ejemplo) y probamos:

nagios:/usr/lib/nagios/plugins# ./check_mysql -H 192.168.0.3 -u nagios-test -p nagios-test-pass
Uptime: 17940713 Threads: 1 Questions: 796357 Slow queries: 0 Opens: 33 Flush tables: 1 Open tables: 27 Queries per second avg: 0.044

Funciona. Con esta información hacemos una plantilla para este servicio en el archivo commands.cfg:

define command{
     command_name mycheck_mysql
     # check_mysql [-d database] [-H host] [-P port] [-u user] [-p password] [-S]
     command_line /usr/lib/nagios/plugins/check_mysql -H $HOSTADDRESS$ -u nagios-test -p nagios-test-pass
     }

Y, finalmente, en el archivo mired.cfg definimos el servicio listando los hosts que queremos que se comprueben con el:

define service{
     use generic-service
     host_name intranet
     service_description MYSQL
     check_command mycheck_mysql
     }

Ha sido fácil ¿verdad? Un par más y acabamos. Ahora necesitamos comprobar la carga de CPU y ocupación de memoria de nuestros controladores de dominio de windows. Nagios trae plugins para hacerlo pero requieren instalar un servicio específico en los servidores a monitorizar y a mi, existiendo SNMP, esto no me parece necesario. Así que nos damos una vuelta por el directorio de plugins de Nagios Exchange hasta encontrar algo que nos venga bien. Allí encontramos dos plugins escritos en perl que pueden servirnos: check_winmen y win_check_cpuload. Los descargamos, descomprimimos, emplazamos en el directorio de plugins de nagios y repetimos el mismo procedimiento de antes. Primero comprobar la entrada que necesitan desde la línea de comandos:

nagios:/usr/lib/nagios/plugins# perl check_win_snmp_cpuload.pl

######## check_win_snmp_process.pl ########
# Version : 1.0
# Date : Dec 20 2005
# Author : Benjamin Jakubowski
# Help : http://www.xenux.net
# Licence : GPL - http://www.fsf.org/licenses/gpl.txt
####################################
check_win_snmp_cpuload.pl IP COMMUNITY PORT warning critical

nagios:/usr/lib/nagios/plugins# perl check_winmen.pl

######## check_winmem ########
# Version : 1.0
# Date : Apr 11 2006
# Author : Peter Stimpel
# Thanks to Benjamin Jakubowski for the idea to walk through snmp
# Help : http://www.peters-webcorner.de/nagios/
# Licence : GPL - http://www.fsf.org/licenses/gpl.txt
####################################
check_winmem IP COMMUNITY warnlevel criticallevel

check_winmem -v for version info

Al igual que en otras ocasiones, vemos que este tipo de plugins requiere que le definamos los niveles que vamos a considerar como warning o crítico. Aunque aquí no aparece especificado en la documentación que acompaña a los plugins nos dice que han de expresarse en porcentajes. Por cierto: no voy a pararme a explicaros como definir y configurar el servicio de SNMP en un servidor windows pero es evidente que hay que hacerlo, además de autorizar en el mismo a nuestro servidor nagios para que pueda recoger estos datos.

Seguimos. Al igual que hicimos antes probamos primero sobre línea de comandos:

nagios:/usr/lib/nagios/plugins# perl check_winmen.pl 192.168.0.4 mi_comunidad_snmp 75 95
OK MEM: usage 20.59 perc - 209064 KBytes of 1015248 KBytes -w 75 -c 95

nagios:/usr/lib/nagios/plugins# perl check_win_snmp_cpuload.pl 192.168.0.4 mi_comunidad_snmp 161 75 90
OK : CPU load HOST-RESOURCES-MIB::hrProcessorLoad.2 = INTEGER: 0 %

Luego con estos datos creamos las plantillas en commands.cfg (observad que, al igual que en línea de comandos, necesitamos ejecutarlos a través del intérprete de perl):

define command{
     command_name check_winmen
     # perl check_winmen.pl IP COMMUNITY warnlevel criticallevel
     command_line /usr/bin/perl /usr/lib/nagios/plugins/check_winmen.pl $HOSTADDRESS$ $ARG1$ $ARG2$ $ARG3$
     
}

define command{
     command_name check_cpuload
     # perl check_snmp_cpuload.pl IP COMMUNITY PORT warnlevel criticallevel
     command_line /usr/bin/perl /usr/lib/nagios/plugins/check_win_snmp_cpuload.pl $HOSTADDRESS$ $ARG1$ $ARG2$ $ARG3$ $ARG4$
     }

Y, finalmente, la definición de los servicios en mired.cfg:

define service{
     use generic-service
     host_name windows#1, windows#2
     service_description Ocupacion de memoria
     check_command check_winmen!ietcc!75!95
     normal_check_interval 5
     retry_check_interval 1
     
}

define service{
     use generic-service
     host_name windows#1, windows#2
     service_description CPU Load
     check_command check_cpuload!ietcc!161!75!90
     normal_check_interval 5
     retry_check_interval 1
     }

Monitorizando la salida a internet con nagiosPara acabar un último truco que suelo usar en las instalaciones. Para comprobar que la salida a internet es correcta suelo elegir un par de servidores públicos y añadirlos en mi configuración colgando de nuestro router de salida a internet. De esta forma ya no sólo comprobamos que nuestro router está encendido y responde a los pings sino que está operativo y nuestro proveedor de servicios no está fallando. Nos quedaría por comprobar que nuestros DNS resuelven correctamente (aquí la comprobación la estamos haciendo por IP) pero eso os lo dejo a vosotros como ejercicio ¿vale? El plugin que necesitais para ello se llama check_dns y acompaña a la distribución estándar de nagios. No tiene pérdida. Ah, lo de usar los servidores de microsoft y terra no es porque me fie especialmente de ellos sino porque siempre prefiero hacerle un ping a intervalos regulares a alguien que no me caiga bien 😉

Y bueno... Con esto concluyo el tema que me tengo que ir de vacaciones. Mi intención era demostrar que configurar un sistema con Nagios y dejarlo operativo y funcional es bien sencillo. Pero la cosa no acaba aquí. Nagios permite mucho más de lo que hemos visto. La librería de plugins disponibles es enorme y si aun así ninguno cumple lo que necesitamos para una necesidad muy específica podemos seguir esta guía de desarrollo para hacernos uno a medida en C, perl, python, shell script o practicamente lo que nos de la gana. Para entornos muy críticos, aparte de la notificaciòn por SMS que hemos apuntado antes existen dispositivos hardware que nos permiten controlar la temperatura, humedad relativa, iluminación, estabilidad de la tensión, presencia de líquidos, intrusiones, vibraciones, etc.

Y si estás haciendo una propuesta técnica en tu departamente y tienes dudas de que tus superiores te autoricen a usar una solución open source échale un vistazo al directorio de empresas y organismos que usan nagios y elige las que crees que van a impresionarle más. Seguro que las encuentras...

70 comentarios

  1. Pues monitorear servicios de las maquinas linux es lo que quiero hacer 🙂
    Ya lo he conseguido hacer mediante el plugin check_by_ssh en el que se pueden monitorear servicios de maquinas remotas, conectandose por ssh a ellas.
    El unico problema que tengo ahora esque Nagios me detecta si una maquina esta online o no si nagios puede llegar directamente a ella (creo) porque las maquinas linux que quiero monitorizar estan detras de routers,nat,etc… y aunque estan en linea aparecen como offline. No se me ocurre la manera de que nagios me detecte si esta online o offline. Quizas con algun alias pero no se muy bien como…

  2. Jorge: el punto fuerte de nagios no está en monitorizar máquinas: para eso existen otras cosas más eficientes como, por ejemplo, cacti. Nagios sirve fundamentalmente para monitorizar servicios. Busca en el repositorio de plugins de servicios de nagios (está en uno de los textos) a ver si hay alguno que monitorice el servicio que te interesa y, en caso contrario, siempre puedes hacerlo tu mismo con cualquier lenguaje que controles: python, perl, etc.

  3. Tengo varias maquinas linux a las que me conecto desde el servidor nagios por SSH haciendo un tunel inverso SSH desde cada una de las maquinas(usuario@servidor# ssh -p3001 localhost). Me gustaria saber si existe alguna manera de monitorizar dichas maquinas mirando el estado de ese tunel (creo que no es posible).

    Asimismo he creado un script que me crea un archivo (marker) en el sistema de archivos del servidor de nagios cuando alguna maquina esta offline. Otra posibilidad sería viendo si existe ese archivo y indicar en nagios que la maquina esta offline.

    ¿Alguna sugerencia? Gracias de antemano

    Saludos y de nuevo, gracias por el manual

  4. Este es el resumen de despues q configuro nagios:

    *** Configuration summary for nagios 3.0rc2 01-29-2008 ***:

    General Options:
    ————————-
    Nagios executable: nagios
    Nagios user/group: nagios,nagios
    Command user/group: nagios,nagios
    Embedded Perl: no
    Event Broker: yes
    Install ${prefix}: /usr/local/nagios
    Lock file: ${prefix}/var/nagios.lock
    Check result directory: ${prefix}/var/spool/checkresults
    Init directory: /etc/rc.d
    Apache conf.d directory: /etc/httpd/conf.d
    Mail program: /usr/bin/mail
    Host OS: linux-gnu

    Web Interface Options:
    ————————
    HTML URL: http://localhost/nagios/
    CGI URL: http://localhost/nagios/cgi-bin/
    Traceroute (used by WAP): /usr/bin/traceroute

  5. Hola:

    Hermanos yo tengo instalado nagios 3.0rc2 lo configure segun esta guia, cuando corro el comando para ver como esta la configuracion me dice
    Error: 0
    Warnig:0
    Instale los plugins en /usr/local/nagios/libexec y el asunto es que cuando trato de ver el estatus de los dispositivos que estoy monitoreando siempre me dice Status: Pending.
    He buscado y buscado y ya no se que es, si alguien tiene una idea por favor escribanme a acruz@shadwell.com.pa

    Saludos

  6. Gracias, eso era, mira que llevo horas dandole vueltas y rebuscando en el manual… lo habia confundido con dependency y eso me desmontaba.
    Ahora ya tengo claro los dos conceptos.

  7. Muy bueno el manual, gracias…

    He ido dando de alta mi red pero en le dibujo en el que aparecen los host no me salen las dependencias como a ti colgando del router, sino que todo me cuelga del proceso nagios! como puedo hacerlo para que dependa de cada switch o router, no son gestionables asi que no puedo saber en que puerto estan conectados.

  8. fgalicia: depende de lo que quieras o te exijan. ANPA vale para lo que vale: para mejorar el soporte de informes que trae nagios. ?chale un vistazo cuando tengas datos suficientes a los que trae nagios y si se te quedan cortos prueba ANPA.

  9. ya logre solucionar el problema, no tenia la cabecera de la libreria de mysql instalada, por eso a la hora de compilar los plugins no me copiaba el de mysql, solo ejecute en la consola: sudo aptitude install libmysqlclient15-dev y despues el ./configure make y make install de los plugins y ya me reconocio mysql.

    Me recomiendas complementar el nagios con APAN?

    saludos y gracias por la ayuda

  10. fgalicia: te lo descargas y lo copias al directorio de plugins. Lo explico aquí arriba con los ejemplos de winmen y cpuload ¿no? Este check_mysqld es también un script de perl y su instalación y uso debe de ser muy similar. En cuanto al check_mysql original, si aparece en el directorio dónde descomprimiste el tar.gz y no en los directorios de instalación suena muy raro ¿no te parece? Puede que no tengas actualizada la base de datos de búsquedas (ejecuta updatedb) o que hayas tenido un error en la instalación o algo así…

  11. Que tal, ejcute locate check_mysql y solo me aparecen 6 archivos pero en el directorio donde descomprimi el .tar.gz, y los archivos check … a mi me aparecen en el directorio libexec de nagios, y en este directorio no tengo check_mysql. encontre este plugin http://www.nagiosexchange.org/MySQL.155.0.html?&tx_netnagext_pi1%5Bp_view%5D=947

    pero mi duda es como integrarlo al directorio de nagios.. 🙁

    recomiendas complementar nagios con APAN?

    saludos y gracias por tu respuesta

  12. hola, he seguido tu totial paso a paso y me parece excelente, solo que yo tuve un detalle, no tengo instalo el plugin check_mysql, (es mas, ni el directorio plugins) como le puedo hacer para instalarlo?

    saludos y gracias de antemano

  13. Hola,

    Tengo un Nagios instal·lado y configurado correctamente tal y como aparece en este blog. Funciona a la perfección. El único problema q tengo es q no me manda las alertas por mail.

    Que hay q hacer además de poner la dirección de correo en el fichero contact.cfg ?

    Gracias.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información

ACEPTAR
Aviso de cookies