Nagios Core 4 + PNP4Nagios. Instalación y configuración desde fuentes en Debian 7 (wheezy).

Recientemente mostramos como instalar la nueva versión de Nagios, Nagios Core 4 en CentOS / Redhat. En este artículo vamos a repetir con Debian 7 / Ubuntu (posiblemente no cambie apenas nada para este). La instalación se realizará compilando ya que parece que de momento no hay paquetes disponibles para las distribuciones habituales. Además también instalaremos PNP4Nagios.

La instalación de esta versión 4 parece que es idéntica a la de la versión 3 por lo que seguiremos la misma guía de instalación, en nuestro caso la guía para Ubuntu nos puede valer. Aunque veremos que no está todo tan claro, si no no habría razón para escribir este artículo 🙂

Instalación de Nagios.

Instalamos previamente algunos paquetes necesarios:

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

Cuentas de usuario y grupo.

Creamos cuenta para Nagios (por defecto crea el grupo) y asignamos password:

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

Creamos un grupo nagcmd que usaremos luego para los commandos externos y metemos en dicho grupo a nuestro usuario Nagios y al usuario que usa apache.

/usr/sbin/groupadd nagcmd
/usr/sbin/usermod -a -G nagcmd nagios
/usr/sbin/usermod -a -G nagcmd www-data

Bajamos  Nagios 4 (core) en su versión “free”, descomprimimos y compilamos (asignandole el grupo). Nos irá guiando por todos los pasos:

./configure --with-command-group=nagcmd
make all
make install
make install-init
make install-commandmode
make install-config
make install-webconf
make install-exfoliation
htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin
service apache2 restart

Hasta aquí todo bien… excepto que cuando vamos a iniciar el demonio de nagios nos dará un error. Si echamos un ojo al script veremos que… es para Redhat.

# /etc/init.d/nagios start
/etc/init.d/nagios: 20: .: Can't open /etc/rc.d/init.d/functions

Para hacerlo funcionar correctamente he pillado un script de Nagios 3 (el que viene con el empaquetado de Nagios para Debian 7) y lo he modificado. Puedes bajártelo aquí (renómbralo como “nagios”)

Según está funciona correctamente aunque veras que al iniciar / parar Nagios da un error. Esto es debido a que usa un plugin para detectar si Nagios está ejecutándose en un caso concreto y no lo encuentra porque aún no hemos instalado los plugins. Posteriormente al instalar estos se subsanará.

Nagios Plugins.

Instalamos previamente algunos paquetes necesarios para algunos plugins. Si no vamos a usar plugin concretos (samba, mysql, radius,…) no es necesario que instalamos esos paquetes en concreto:

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

Bajamos, descomprimimos y compilamos los plugins:

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

Si reiniciamos Nagios veremos que ya no nos da error el script de inicio.

Si accedemos a nuestro Nagios veremos que tiene algunos chequeos clásicos en el localhost que ya están usando los plugins instalados.

NagiosCore4_VistaLocalhost

Dado que cada vez que cambiamos la configuración de ficheros de Nagios conviene chequearla (y necesitamos “recargar” la configuración) nos pueden venir bien unos alias para tenerlo más a mano. En el fichero .bashrc podemos añadirlos.

# ALIAS PARA NAGIOS
alias q1='/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg'
alias q2='/etc/init.d/nagios reload'

PNP4Nagios.

Como hemos instalado Nagios Core 4 y los plugins compilando, la mejor opción será también instalar PNP4Nagios de esta forma.
Requisitos: Perl, RRDtool, PHP, mod_rewrite de apache. Instalamos los que nos faltan:

apt-get install php5-gd librrds-perl

Bajamos PNP4Nagios, descomprimimos y compilamos:

./configure
make all
make fullinstall
*** Configuration summary for pnp4nagios-0.6.21 03-24-2013 ***
General Options:
 ------------------------- -------------------
 Nagios user/group: nagios nagios
 Install directory: /usr/local/pnp4nagios
 HTML Dir: /usr/local/pnp4nagios/share
 Config Dir: /usr/local/pnp4nagios/etc
 Location of rrdtool binary: /usr/bin/rrdtool Version 1.4.7
 RRDs Perl Modules: FOUND (Version 1.4007)
 RRD Files stored in: /usr/local/pnp4nagios/var/perfdata
 process_perfdata.pl Logfile: /usr/local/pnp4nagios/var/perfdata.log
 Perfdata files (NPCD) stored in: /usr/local/pnp4nagios/var/spool
Web Interface Options:
 ------------------------- -------------------
 HTML URL: http://localhost/pnp4nagios
 Apache Config File: /etc/apache2/conf.d/pnp4nagios.conf

Nos copia el demonio npcd. Configuramos npcd y nagios para arrancar al inicio y reiniciamos los implicados:

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

Si accedemos al interface http://nuestro_nagios/pnp4nagios/ deberíamos ver todo en verde menos un error: “Apache mod_rewrite is not enabled”. Para activar mod_rewrite:

a2enmod rewrite && service apache2 restart

Recargamos la página y debemos tener ya todo OK. Procedemos como dice a renombrar el fichero /usr/local/pnp4nagios/share/install.php para que se dé por enterado de que está correctamente instalado.
Volvemos a cargar la página y veremos que nos da otro 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 es normal ya que no hemos acabado la configuración. Vamos con ello…

PNP4Nagios tiene varias formas de configurar la integración con Nagios. Usaremos el método bulk-mode. Si estás pensando en usar el más sencillo e igual de eficaz “Bulk Mode with npcdmod” olvídalo de momento. La API “event broker”de Nagios Core 4 ha cambiado, con lo cual el broker nocdmod no va a funcionar (al menos no el de la última versión probada en este artículo – pnp4nagios 0.6.21-).

En el directorio /usr/local/pnp4nagios/etc tenemos dos ficheros de ejemplo para hacer copy/paste.
Del fichero nagios.cfg-sample copiamos la siguiente configuración a el fichero /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::$SERVICEPERFDATA$\tSERVICECHECKCOMMAND::$SERVICECHECKCOMMAND$\tHOSTSTATE::$HOSTSTATE$\tHOSTSTATETYPE::$HOSTSTATETYPE$\tSERVICESTATE::$SERVICESTATE$\tSERVICESTATETYPE::$SERVICESTATETYPE$
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::$HOSTCHECKCOMMAND$\tHOSTSTATE::$HOSTSTATE$\tHOSTSTATETYPE::$HOSTSTATETYPE$
host_perfdata_file_mode=a
host_perfdata_file_processing_interval=15
host_perfdata_file_processing_command=process-host-perfdata-file

Del fichero misccommands.cfg-sample copiamos la siguiente configuración a /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$
}

OJO, la segunda y tercera línea de cada command es solo una línea, la misma…

Reiniciamos el demonio npcd de pnp4nagios y el propio Nagios:

service npcd restart && service nagios restart

Y ya podemos conectarnos a la URL de PNP4Nagios. En breve desaparecerá el error y veremos al rato que empieza a pintar nuestras gráficas.

Nos faltaría ahora una cosa importante. Poder acceder directamente desde el Host / Servicio en Nagios a las gráficas correspondientes de este sin tener que ir a el interface de PNP4 para localizarlo. Siguiendo las instrucciones de la documentación nos vamos directamente a configurarlo para POPUPs. Creamos unos “templates” para aplicarlos luego a los objetos.
En el fichero /usr/local/nagios/etc/objects/templates.cfg añadimos:

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 modificamos nuestros objetos Host / Servicios para que hereden dicha plantilla. Por ejemplo:

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%
 }

OJO. Es necesario copiar un fichero a la configuración web de Nagios y las rutas de la doc. de PNP4Nagios no coinciden con las nuestras. Copiamos el fichero correctamente de los fuentes de pnp4nagios:

cp contrib/ssi/status-header.ssi /usr/local/nagios/share/ssi/

Reiniciamos nagios y ncmd (módulo de pnp):

 service npcd restart && service nagios restart

Veremos que nos han aparecido los iconos para acceder pinchando directamente a las gráficas del Host / Servicio directamente desde este y además, si pasamos solo el ratón por el icono nos muestra ya un popup con la gráfica. Bonito ¿no?.

pnp4nagios_icon_graph_popup
Si no controlas bien el tema de los ficheros de configuración de Nagios es que no leíste el artículos sobre ficheros de configuración de Nagios . Si no te aclaras con los objetos, échale un ojo al artículos sobre configuración de objetos en Nagios.

Podemos añadirle la plantilla a todos aquellos host / servicios que queramos tengan gráfica. Las estrategias pueden ser diferentes; uno a uno, definición de servicios asignadas a grupos de host en lugar de a hosts (lo normal), asignar la plantilla a la plantillas a otra plantilla (local-service p.e.), ….

Para saber más de PNP4Nagios échale un ojo al artículo de Características de PNP4Nagios.

check_mk

Si estás pensando instalar check_mk parece que de momento no es posible. Nagios Core 4 cambia la arquitectura de la API “Event broker” con respecto a la versión previa y parece que de momento (probado con check_mk-1.2.3i1) MK_Livestatus no incluye el broker adecuado para esta versión de Nagios 4. Si intentas instalarlo, al iniciar Nagios verás que da un error en nagios.log al cargar el broker de MK_Livestatus:

[1380298713] Error: Could not load module '/usr/lib/check_mk/livestatus.o' -> /usr/lib/check_mk/livestatus.o: undefined symbol: last_command_check
[1380298713] Error: Failed to load module '/usr/lib/check_mk/livestatus.o'.
[1380298713] Error: Module loading failed. Aborting.

Imagino que no tardarán en hacer compatible dicho módulo. NUEVO (06/04/2014) Ya hay versión de check_mk con Livestatus para Nagios Core 4.

 

19 thoughts on “Nagios Core 4 + PNP4Nagios. Instalación y configuración desde fuentes en Debian 7 (wheezy).

  1. Toni

    Mil gracias! Estaba buscando el script para iniciar/detener el servicio. Funciona perfecto.

    Por otro lado, estoy teniendo problemas a la hora de ver el mapa. Sale un mensaje que dice “You have not supplied any host drawing coordinates …”, ¿tú sabes cómo solucionarlo? También he visto que los de nagios tienen reportado el error pero todavía no está corregido.

    http://tracker.nagios.org/view.php?id=470

    Un saludo.

    Reply
    1. eldespistado1 Post author

      Pues por lo que pone en el tracker parece un bug. Habrá que esperar a la revisión para que arreglen este además de otros importantes…
      Lo único probar la modificación que comentan en el archivo fuente en C y volver a compilar Navíos. :–(

      Reply
  2. Ruben

    Hola,
    Buen articulo, aunque yo he tenido algunos problemas, resulta q en el nagios.log me aparece esto:
    [1381231653] Error: Module ‘/usr/local/pnp4nagios/lib/npcdmod.o’ is using an old or unspecified version of the event broker API. Module will be unloaded.
    [1381231653] Event broker module ‘/usr/local/pnp4nagios/lib/npcdmod.o’ deinitialized successfully.
    [1381231653] Error: Failed to load module ‘/usr/local/pnp4nagios/lib/npcdmod.o’.
    [1381231653] Error: Module loading failed. Aborting.

    Puedo entrar por http a nagios pero si me voy a cualquier menu (Hosts, Services, …) me sale la pagina de:
    Error: Could not read host and service status information!

    Después en la url http://localhos/pnp4nagios/ no consigo que desaparezca el error que indicas en tu manual.

    Agradeceria cualquier ayuda que pueda resolver mi erro de Noob 😉

    Reply
    1. eldespistado1 Post author

      ¿?
      Según las instrucciones que indico en el artículo no deberías estar usando npcdmod.o. Efectivamente el broker de momento no es compatible con Nagios Core 4. Esa es la configuración denominada “Bulk Mode with npcdmod” y no ese la configuración que explico en el artículo.

      Reply
  3. Ruben

    PErdona por el error, cogí el fichero nagios.cfg-sample y copie todo su contenido en vez de copiar únicamente la lineas q indicas en el manual.
    Gracias por la ayuda!

    Reply
  4. Sergio

    Estimados estará listo el modulo para evitar el error:

    [1381420972] Error: Could not load module ‘/usr/local/lib/mk-livestatus/livestatus.o’ -> /usr/local/lib/mk-livestatus/livestatus.o: undefined symbol: last_command_check
    [1381420972] Error: Failed to load module ‘/usr/local/lib/mk-livestatus/livestatus.o’.
    [1381420972] Error: Module loading failed. Aborting.

    Quedo atento a sus comentarios.

    Reply
    1. eldespistado1 Post author

      Pues habrá que esperar que Mathias Kettner (desarrollador de check_mk) saqué un módulo compatible con Nagios 4.
      De momento seguir las nuevas versiones con los cambios/añadidos realizados para “Livestatus” que publica en: http://mathias-kettner.com/check_mk_download.html
      Imagino que algún momento saldrá una versión que hable de la compatibilidad de Livestatus con Nagios Core 4.

      Reply
  5. MigAn

    hola buenos dias me podrias ayudar a configurar nagvis en debian 7. o quisiera saber si eso se puede.. gracias

    Reply
    1. eldespistado1 Post author

      Pues… parece que no. Me explico.
      Nagvis soporta varios backends (métodos de conectarse/obtener datos de Nagios). Probablemente el más usado por ser el más sencillo y no requerir que Nagios transfiera sus datos a una BBDD es es MK_Livestatus. Este está descartado de momento ya que no está actualizado el broker que usa para “conectarse” a los datos de Nagios Core 4.
      La otra opción viable sería usar el backend NDOMy que obtiene los datos de estado de Nagios de una BBDD mysql. Esto requeriría instalar y configurar NDOUtils, pero en la página pone claramente compatible con Nagios 3.x y Nagios XI (no especifica Nagios Core 4).
      De los otros dos backends que menciona, NagiosBP es solo para extraer datos específicos de servicios configurados con este Addon/Plugin y MerlinMy es si tienes Merlin.
      Pudiera ser que NDOUtils funcionará con Nagios Core 4 pero no lo creo.
      Habrá que esperar a una actualización de MK_Livestatus.

      Un saludo

      Reply
  6. MigAn

    hola buenos dias..
    amigo me podrias ayudar o decirme q pasa con los parents en nagios 4… (porque no me permite configurarlos). Gracias

    Reply
  7. Jose Vasquez

    Qué tal, estoy siguiendo el manual y me topado con un problema que no encuentro cómo solucionar, podrán darme una ayudadita extra? Gracias de antemano.

    Después de copiar el archivo “/usr/local/pnp4nagios/etc/nagios.cfg-sample” a “/usr/local/nagios/etc/nagios.cfg” y finalmente reiniciar el servicio (service nagios restart) me sale el siguiente error:

    “/etc/init.d/nagios: 89: shift: can’t shift that many”

    En qué podría haberme equivocado o dónde pude haber metido la pata? He seguido línea a línea el manual.

    Reply
    1. eldespistado1 Post author

      Que tal Jose. ¿Copiaste tal como indicas literalmente el archivo “/usr/local/pnp4nagios/etc/nagios.cfg-sample” a “/usr/local/nagios/etc/nagios.cfg”? ¿No lo sustituirías entero ni lo copiarías entero no?
      Hay que seleccionar la parte (no entero) que se indica del fichero nagios.cfg-sample y añadírsela (al final p.e.) al fichero nagios.cfg.
      Revisalo.

      Reply
  8. apuesta y gana

    Terrific article! That is the type of info that are meant to be shared around the internet.
    Disgrace on Google for no longer positioning this post higher!

    Come on over and consult with my website . Thanks =)

    Reply
  9. karina

    buenas he estado investigando acerca del nagios ya que estoy realizando mis practicas profesionales y me toco hacer un nagios en ambiente linux/debian . aproximadamente he cargado 430 equipos los cuales no he tenido problemas , también he hecho lo de los parents . el problema viene por el mapa que como son tantos equipos no se puede definir cual es cual es muy engorroso , pero he he cuchado que hay unas coordenadas que se usan para darle la distancia a cada uno de ellos dependiendo de su parents. cualquier ayuda seria de mucho agrado . gracias de ante mano

    Reply
  10. Jesús

    Gran manual. Sobre todo para los que empezamos a pelearnos con Nagios

    Actualmente estoy proponiendo sustituir serveralive que no me da mucha información útil.

    Para hacer las pruebas estoy sigiendo tu manual y tengo una duda

    “Y modificamos nuestros objetos Host / Servicios para que hereden dicha plantilla. Por ejemplo:”
    Tengo que modificar todos los host y services ?????????

    Espero tus noticias

    Reply
    1. eldespistado1 Post author

      Si. O no. 🙂 Las opciones son varias pero creo que esa es la mejor. Podrías añadir esos valores directamente en plantillas ya existentes que estén usando tus host y/o servicios (del tipo plantilla es por defecto generic–service / host) pero… Todos tus host / servicios tienen datos de rendimiento? El acceso a las gráficas de PNP dará un error obviamente si estas no existen…

      Reply
  11. Jorge

    Super bien el tutorial, solo un detalle que es importante:

    process_performance_data=1

    es una directriz que ya está en el archivo de nagios.cfg, pero en cero, así que si copian y pegan al inicio del archivo cuando nagios arranca lo lee dos veces primero =1 y luego =0 y claro nada sirve.

    En mi caso lo que hice fue copiar y pegar al inicio, pero comentar con un # la linea =0 que trae el nagios por defecto.

    Reply

Leave a Reply

Your email address will not be published. Required fields are marked *

*

Comment moderation is enabled. Your comment may take some time to appear.