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
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
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
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
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,
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
como puedes hacer un bulk de 100 host por ejemplo, es posible en nagios?
muchas gracias! resolví varios problemas en conexión de pnp4nagios con PHP en versiones < 7.0 gracias a tu tutorial 🙂