Instalación de Nagios Core 4.4.1 en servidor Ubuntu 18.04

Objetivo:

En este documento instalaremos desde cero un servidor Nagios Core en su versión 4.4.1, este nos ayudará a monitorizar nuestros equipos, ya sean Windows, linux, switchs, routers, servidores vmware esxi, etc, etc. Habilitaremos las notificaciones por correo, cambiaremos el tema por defecto de Nagios Core, instalaremos pnp4nagios para tener gráficas de rendimiento de equipos y servicios (Muy útil para detectar patrones y tendencias) y finalmente añadiremos un equipo Windows en la monitorización a modo de prueba.

Resumen de los pasos que seguiremos:

1.- Instalaremos Ubuntu Server 18.04

2.- Instalaremos Nagios Core 4.4.1 y Plugins de Nagios 2.2.1

3.- Activaremos y probaremos notificaciones por correo electrónico

4.- Cambiaremos el tema por defecto de Nagios por otro más bonito, en este caso utilizaremos “Nuvola”

5.- Instalaremos graficos pnp4nagios para monitorizar rendimientos

6.- Instalaremos cliente en un equipo y lo añadiremos a la monitorización


1.- Instalación de Ubuntu Server 18.04

La instalación de Ubuntu se ha simplificado mucho en las ultimas versiones, si bien ya era sencillo en las versiones más antiguas, con la 18.04 es ya un juego de niños. Completaremos el asistente teniendo en cuenta un par de puntos que es bueno recordar.

  • Recomendación que no obligación instalar el sistema operativo en Inglés, puesto que en caso de error nos sera mucho más fácil encontrar documentación.
  • Configuramos la red, ip, puerta de enlace, servidores dns, dominio…. (La instalación permite configurar esto de manera muy sencilla)
  • Durante la instalación crearemos el usuario “nagios” si queremos podemos utilizar otro pero de ser así lo tendremos que crear posteriormente.
  • Particionaremos el disco duro según recomendación

Una vez finalizada la instalación y verificado que tenemos conectividad a red e Internet (Haremos ping a puerta de enlace y a dns de Internet), actualizaremos el sistema.

sudo apt-get update
sudo apt-get upgrade

2.- Instalación de Nagios Core 4.4.1

2.1- Instalación de las dependencias y servicios que Nagios requiere

sudo apt-get install wget build-essential apache2 php apache2-mod-php7.2 php-gd libgd-dev unzip sendmail

2.2.- Editamos el fichero hosts para añadir el nombre de servidor que se utilizará a la hora de enviar correos de notificación

sudo vi /etc/hosts

Para este ejemplo añadimos los datos siguiente en la cabecera del archivo

127.0.0.1   localhost nagios
127.0.1.1   mynagios.nagios.org nagios

2.3.- Descargamos el instalador de Nagios Core y los plugins

cd /tmp
sudo wget https://assets.nagios.com/downloads/nagioscore/releases/nagios-4.4.1.tar.gz
sudo wget https://nagios-plugins.org/download/nagios-plugins-2.2.1.tar.gz

2.4.- Descromprimimos los ficheros descargados

sudo tar zxvf nagios-4.4.1.tar.gz
sudo tar zxvf  nagios-plugins-2.2.1.tar.gz

2.5.- Preparamos los usuarios y permisos necesarios para Nagios

En caso de no haber creado el usuario “nagios” durante la instalación, lo haremos ahora, si así lo hicimos este primer comando se puede omitir

sudo useradd nagios

Creamos el grupo “nagcmd”

sudo groupadd nagcmd 

Agregamos el usuario “nagios” al grupo “nagcmd”

sudo usermod -a -G nagcmd nagios

Agregamos el usuario “nagios” y el grupo “nagcmd” al grupo www-data utilizado por apache2

sudo usermod -a -G nagios,nagcmd www-data

2.6.- Creamos el fichero de configuración

cd /tmp/cd nagios-4.4.1/
sudo ./configure --with-command-group=nagcmd --with-mail=/usr/sbin/sendmail --with-httpd-conf=/etc/apache2

2.7.- Instalamos ejecutando cada uno de las lineas de comando por separado

sudo make all
sudo make install
sudo make install-init
sudo make install-config
sudo make install-commandmode
sudo make install-webconf
sudo cp -R contrib/eventhandlers/ /usr/local/nagios/libexec/
sudo chown -R nagios:nagios /usr/local/nagios/libexec/eventhandlers

2.8.- Comprobamos los ficheros de configuración de Nagios y iniciamos el servicio

/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
sudo service nagios start

2.9.- Activar el site en apache

Copiaremos el fichero de configuración del site a la carpeta /etc/apache2/sites-available

sudo cp /etc/apache2/nagios.conf /etc/apache2/sites-available/nagios.cfg

Creamos el vínculo permanente en sites-enabled

sudo ln –s /etc/apache2/sites-available/nagios.conf /etc/apache2/sites-enabled/nagios.conf

Reiniciamos el servicio apache2

sudo service apache2 restart

Activamos el site

sudo a2ensite nagios
sudo a2enmod rewrite cgi

Reiniciamos nuevamente apache2

sudo service apache2 restart

2.10.- Creación del password para el usuario nagiosadmin que se utilizará en el portal Nagios

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

2.11.- Instalamos los pluginsc ejecutando cada linea individualmente

cd /tmp/nagios-plugins-2.2.1
sudo  ./configure --with-nagios-user=nagios --with-nagios-group=nagios
sudo make all
sudo make install

2.12.- Configuramos el servicio nagios para que arranque automáticamente al iniciar el servidor

sudo systemctl enable nagios

Llegados a este punto ya podemos abrir un navegador y mediante la dirección “http://ip_que_hayamos_configurado/nagios”, ver nuestra instalación de Nagios Core


3.- Configuración de las notificaciones por correo

3.1.- Primeramente editaremos el fichero de contactos donde se puede configurar la dirección o direcciones de correo donde vamos a enviar las notificaciones.

sudo vi /usr/local/nagios/etc/objects/contacts.cfg

Ejemplo

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                           micorreo@electrónico.com   ; <<***** Indica aquí la dirección donde quieres recibir las notificaciones ******
        }

3.2.- Ponemos el servidor en la zona horaria correcta, consultar para la vuestra en: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones

sudo timedatectl set-timezone Europe/Madrid

3.3.- Damos permisos a la carpeta de cola

sudo chmod 777 /var/spool/mqueue-client/

Ya podemos enviar una notificación de prueba


4.-  Cambiar tema por defecto de Nagios a Nuvola

Podemos en Nagios Core aplicar distintos temas que algunos usuarios han desarrollado para mejorar ligeramente su diseño, en este caso aplicaremos Nuvola. La instalación de cualquier otro seria muy parecida.

4.1.- Descargamos el tema

cd /tmp
sudo wget http://tomas.cat/blog/sites/default/files/nagios-nuvola-1.0.3.tar_.gz

4.2.- Creamos carpeta y descomprimimos el fichero descargado

sudo mkdir nuvola
cd nuvola
sudo tar zxvf ../nagios-nuvola-1.0.3.tar_.gz

4.3.- Copiamos los ficheros necesarios a las carpetas Nagios

sudo cp -a html/stylesheets/* /usr/local/nagios/share/stylesheets/.

5.-  Instalación de pnp4nagios para monitorizar rendimientos

5.1.- Instalar dependencias como rrdtools y phpxml

sudo apt-get install librrds-perl rrdtool
sudo apt-get install librrds-perl rrdtool
sudo apt-get install php7.2-xml

5.2.- Descargamos pnp4nagios.

cd /tmp
sudo wget https://sourceforge.net/projects/pnp4nagios/files/PNP-0.6/pnp4nagios-0.6.26.tar.gz

5.3- Descomprimimos

sudo tar zxvf pnp4nagios-0.6.26.tar.gz
cd pnp4nagios-0.6.26

5.4.- Instalamos

sudo ./configure
sudo make all
sudo make fullinstall

5.5.- Creamos el vínculo al fichero de configuración del sitio en apache2

sudo ln -s /etc/httpd/conf.d/pnp4nagios.conf /etc/apache2/sites-enabled/pnp4nagios.conf

5.6.- Eliminar el fichero de configuración

Si abrimos la url de pnp4nagios http://myip/pnp4nagios vermos que tenemos que eliminar el fichero de configuración.

sudo rm -rf /usr/local/pnp4nagios/share/install.php

5.7.- Activamos la recopilación de datos de rendimiento en Nagios

Para ello tendremos que editar el fichero /usr/local/nagios/etc/nagios.cfg

sudo vi /usr/local/nagios/etc/nagios.cfg

Buscamos el “process_performance_data” y lo ponemos en 1

process_performance_data=1

Seguidamente añadimos las lineas siguientes en el mismo fichero /usr/local/nagios/etc/nagios.cfg

#
# Bulk / NPCD mode
#
# *** 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

5.8.- Ponemos el servicio npcd como automàtico

update-rc.d npcd defaults

5.9.- Añandimos en comandos los destinos de datos

sudo vi /usr/local/nagios/etc/objects/commands.cfg
define command{
       command_name    process-service-perfdata-file
       command_line    /usr/local/pnp4nagios/libexec/process_perfdata.pl --bulk=/usr/local/pnp4nagios/var/service-perfdata
}

define command{
       command_name    process-host-perfdata-file
       command_line    /usr/local/pnp4nagios/libexec/process_perfdata.pl --bulk=/usr/local/pnp4nagios/var/host-perfdata
}

5.10.- Creamos las plantillas que invocaremos desde equipos o servicios

sudo vi /usr/local/nagios/etc/objects/templates.cfg
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
}

5.11.- Solucionamos el error “sizeof(): Parameter must be an array or an object that implements Countable”

Editamos el fichero data.php y vamos a la linea afectada, en este caso la [979]

sudo vi  /usr/local/pnp4nagios/share/application/models/data.php
    public function getFirstPage(){
        $pages = $this->getPages();
        if(sizeof($pages) > 0 ){
            return urldecode($pages[0]);
        }else{
            return FALSE;
        }
    }


Modificaremos la linea “if(sizeof($pages) > 0 ){” y quedará del siguiente modo

    public function getFirstPage(){
        $pages = $this->getPages();
        if (is_array($pages) && sizeoff($pages) > 0 ){
            return urldecode($pages[0]);
        }else{
            return FALSE;
        }
    }

5.12.- Añadimos la graficación en los hosts o servicios.

Editando archivos localhost.cfg o windows.cfg, podemos añadir las plantillas que hemos definido en el paso 5.10, esto lo haremos añadiendo host-pnp o srv-pnp en la propiedad host, dependiendo de si se trata de un servicio o un host

Ejemplo:

sudo vi /usr/local/nagios/etc/objects/localhost.cfg
define host{
        use                     linux-server,host-pnp            ; Al ser la def. del host utilizamos el host-pnp
        host_name               localhost
        alias                   localhost
        address                 127.0.0.1
        }

define service{
        use                             local-service,srv-pnp         ; Al ser la def. del servicio utilizamos el srv-pnp
        host_name                       localhost
        service_description             Current Load
        check_command                   check_local_load!5.0,4.0,3.0!10.0,6.0,4.0
        }

5.13.- Añadimos los pop up de vista previa de los gráficos.

sudo cp /tmp/pnp4nagios-0.6.26/contrib/ssi/status-header.ssi /usr/local/nagios/share/ssi/


6.-  Instalación del cliente en un equipo y añadir a monitorización

Para monitorizar un equipo (Por ejemplo un servidor), es necesario tener en cuenta un par de cosillas. Lo primero instalar el software de monitorización y posteriormente dar de alta el servidor en el fichero de configuración de Nagios, aquí veremos un ejemplo

6.1.- Descargamos el cliente apropiado para nuestra versión de sistema operativo

https://www.nsclient.org/

6.2.- Procedemos a la instalación

Seleccionamos “Generic”

“Typical”

Indicamos la IP de Nuestro servidor Nagios

Finalizamos

6.3.- Editamos el fichero nsclient.ini para activar las monitorizaciones.

Este fichero en equipos Windows se encuentra en: C:\Program Files\NSClient++ aquí modificaremos los “disabled” por un “1”, de manera que nos va a quedar algo parecido a lo siguiente

# If you want to fill this file with all available options run the following command:
#   nscp settings --generate --add-defaults --load-all
# If you want to activate a module and bring in all its options use:
#   nscp settings --activate-module  --add-defaults
# For details run: nscp settings --help


; in flight - TODO
[/settings/default]

; Undocumented key
allowed hosts = 172.16.0.185


; in flight - TODO
[/modules]

; Undocumented key
CheckExternalScripts = 1

; Undocumented key
CheckHelpers = 1

; Undocumented key
CheckEventLog = 1

; Undocumented key
CheckNSCP = 1

; Undocumented key
CheckDisk = 1

; Undocumented key
WEBServer = 1

; Undocumented key
CheckSystem = 1

; Undocumented key
NSClientServer = enabled

6.4.- Reiniciamos el servicio

6.5.- En nuestro servidor Nagios activamos la lectura de la plantilla windows.cfg.

Para hacer esto editaremos el fichero /usr/local/nagios/etc/nagios.cfg y quitaremos el “#” de comentario en la linia cfg_file=/usr/local/nagios/etc/objects/windows.cfg

sudo vi /usr/local/nagios/etc/nagios.cfg
# Definitions for monitoring a Windows machine
cfg_file=/usr/local/nagios/etc/objects/windows.cfg

6.6.- Finalmente solo necesitamos añadir el equipo y los servicios que vamos a monitorizar en el fichero /usr/local/nagios/etc/objects/windows.cfg

sudo vi /usr/local/nagios/etc/objects/windows.cfg

Aquí ya vemos un ejemplo de equipo etiquetado como “winserver”, nos podemos basar en él.

Ejemplo:

###############################################################################
#
# HOST DEFINITIONS
#
###############################################################################

# Define a host for the Windows machine we'll be monitoring
# Change the host_name, alias, and address to fit your situation

# Aquí vamos definiendo uno a uno los equipos que vamos a monitorizar
define host {

    use                     windows-server,host-pnp          ; Plantillas que vamos a utilizar, aquí añadiremos el host-pnp (Ver punto 5.10)
    host_name               MyServerName               ; Nombre del host
    alias                   Sql Server prd       ; Descripción
    address                 172.16.1.4             ; IP del equipo a  monitorizar
}

# Servicios que monitorizaremos

###############################################################################
#
# SERVICE DEFINITIONS
#
###############################################################################

# Create a service for monitoring the version of NSCLient++ that is installed
# Change the host_name to match the name of the host you defined above

define service {

    use                     generic-service,srv-pnp
    host_name               MyServerName
    service_description     NSClient++ Version
    check_command           check_nt!CLIENTVERSION
}



# Create a service for monitoring the uptime of the server
# Change the host_name to match the name of the host you defined above

define service {

    use                     generic-service,srv-pnp
    host_name               MyServerName
    service_description     Uptime
    check_command           check_nt!UPTIME
}

# Create a service for monitoring CPU load
# Change the host_name to match the name of the host you defined above

define service {

    use                     generic-service,srv-pnp
    host_name               MyServerName
    service_description     CPU Load
    check_command           check_nt!CPULOAD!-l 5,80,90
}



# Create a service for monitoring memory usage
# Change the host_name to match the name of the host you defined above

define service {

    use                     generic-service,srv-pnp
    host_name               MyServerName
    service_description     Memory Usage
    check_command           check_nt!MEMUSE!-w 80 -c 90
}



# Create a service for monitoring C:\ disk usage
# Change the host_name to match the name of the host you defined above

define service {

    use                     generic-service,srv-pnp
    host_name               MyServerName
    service_description     C:\ Drive Space
    check_command           check_nt!USEDDISKSPACE!-l c -w 80 -c 90
}

# Create a service for monitoring the W3SVC service
# Change the host_name to match the name of the host you defined above

define service {

    use                     generic-service,srv-pnp
    host_name               MyServerName
    service_description     W3SVC
    check_command           check_nt!SERVICESTATE!-d SHOWALL -l W3SVC
}


# Create a service for monitoring the Explorer.exe process
# Change the host_name to match the name of the host you defined above

define service {

    use                     generic-service,srv-pnp
    host_name               MyServerName
    service_description     Explorer
    check_command           check_nt!PROCSTATE!-d SHOWALL -l Explorer.exe
}

En este vínculo podemos encontrar las configuraciones que podemos aplicar a cada uno de los objetos, es muy importante que lo revisemos puesto que nos ayudará a adaptar cada monitorización a nuestras necesidades

https://assets.nagios.com/downloads/nagioscore/docs/nagioscore/3/en/objectdefinitions.html

Reiniciamos Nagios y esperamos unos minutos a ver los resultados

sudo service nagios restart

Y hasta aquí este tutorial de como instalar y configurar Nagios core, he intentado que fuera lo más sencillo posible para minimizar errores y que todo el mundo lo pueda seguir, evidentemente esto es solo la punta del iceberg, pero creo que es suficiente para poner en marcha este servicio e ir desarrollando a partir de aquí.

Saludos

6 Replies to “Instalación de Nagios Core 4.4.1 en servidor Ubuntu 18.04”

  1. Gracias por este tutorial. Estoy en ello y salvo algún problemilla de momento parece que se está instalando todo correctamente. Sólo un detalle. En e punto 2.6 has escrito:
    cd /tmp/cd nagios-4.4.1/

    y debería ser:
    cd /tmp/nagios-4.4.1/

    Un saludo

  2. Hola.

    Me estoy volviendo loco, porque en un momento dado me da error y no se por qué:
    Cuando escribo # /tmp/nagios-4.4.1# a2ensite nagios
    — El resultado es este —
    ERROR: /etc/apache2/sites-enabled/nagios.conf is a dangling symlink!
    ERROR: Site nagios does not exist!

    ¿sabes a que puede ser debido?

    Gracias y un saludo

  3. Bueno, pues ya he encontrado el error.
    En el apartado 2.9 dice:
    sudo cp /etc/apache2/nagios.conf /etc/apache2/sites-available/nagios.cfg

    y en realidad debería decir:
    sudo cp /etc/apache2/nagios.conf /etc/apache2/sites-available/nagios.conf

    Ahora todo funciona ok.

    Un saludo,

  4. A mi me aparece este 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

    file [line]:
    application/models/data.php [109]:

    back

  5. muchas gracias! resolví varios problemas en conexión de pnp4nagios con PHP en versiones < 7.0 gracias a tu tutorial 🙂

Leave a Reply

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.