Instalar y configurar NDOUtils en Centos 8

Aprendemos a instalar y configurar NDOUtils en Centos 8. Las siglas del producto significan «Nagios Data Output Utilities» y son un conjunto de herramientas que permiten exportar datos actuales e históricos de una o más instancias de Nagios a una base de datos MySQL o MariaDB. Es una herramienta bastante popular en la comunidad. NDOUtils consta de un demonio independiente, un agente de eventos Nagios y varias utilidades auxiliares.

Al igual que en otras ocasiones voy a utilizar un VPS con Centos 8 que he creado en mi proveedor de confianza Clouding.io Previamente ya tengo instalado Nagios Core, para ello os podéis servir de la entrada que escribí en su día: Instalar Nagios 4 en RHEL 8 y Centos 8

Instalar NDOUtils en Centos 8

Lo primero que haremos es instalar el servidor de base de datos MariaDB. Para ello utilizaremos la última versión disponible. Siguiendo las instrucciones de su propia página web: MairaDB Config Repositories

En nuestro caso, con estas instrucciones. Creamos el siguiente repositorio:

sudo vi /etc/yum.repos.d/MariaDB.repo

Con el contenido:

# MariaDB 10.5 CentOS repository list - created 2020-07-14 08:02 UTC
# http://downloads.mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.5/centos8-amd64
module_hotfixes=1
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1

Una vez hecho esto ya podemos instalar y encender el servicio:

sudo dnf install -y mariadb mariadb-server
sudo dnf install mysql-devel --disablerepo=AppStream
sudo systemctl start mariadb

Una vez encendida, ejecutamos el script ‘mysql_secure_installation’, que nos ayudará a asegurar la instalación, además de definir una contraseña para el usuario ‘root’ del motor de la base de datos.

sudo mysql_secure_installation

Crear la base de datos para NDOUtils

Nos conectamos como ‘root’ al motor de la base de datos.

sudo mysql -u root -p

Y creamos la base de datos correspondiente asignandole un usuario.

CREATE DATABASE nagios DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
CREATE USER 'ndoutils'@'localhost' IDENTIFIED BY 'ndoutils_password';
GRANT USAGE ON *.* TO 'ndoutils'@'localhost' IDENTIFIED BY 'ndoutils_password' \
WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ; 
GRANT ALL PRIVILEGES ON nagios.* TO 'ndoutils'@'localhost' WITH GRANT OPTION ;

Una vez hecho esto, limpiamos los privilegios y salimos.

FLUSH PRIVILEGES;
\q

Podemos comprobar que hemos hecho bien nuestro trabajo, de la siguiente manera:

echo 'show databases;' | sudo mysql -u ndoutils -p -h localhost

Con el resultado:

Database
information_schema
nagios

Ajustes del kernel de Linux

NDOUtils usa la cola de mensajes del núcleo o kernel para transferir los datos de Nagios a NDOUtils. Vamos a aumentar los valores predeterminados con los que arranca el Kernel para garantizar que funcione de manera óptima.

Realizamos una copia de seguridad del fichero de configuración.

sudo cp /etc/sysctl.conf /etc/sysctl.conf_backup

Y realizamos los siguientes cambios:

sudo -s
sed -i '/msgmnb/d' /etc/sysctl.conf
sed -i '/msgmax/d' /etc/sysctl.conf
sed -i '/shmmax/d' /etc/sysctl.conf
sed -i '/shmall/d' /etc/sysctl.conf
printf "\n\nkernel.msgmnb = 131072000\n" >> /etc/sysctl.conf
printf "kernel.msgmax = 131072000\n" >> /etc/sysctl.conf
printf "kernel.shmmax = 4294967295\n" >> /etc/sysctl.conf
printf "kernel.shmall = 268435456\n" >> /etc/sysctl.conf
sysctl -e -p /etc/sysctl.conf

El fichero debería quedar con la siguiente información:

net.ipv4.ip_forward = 0
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
net.ipv4.tcp_syncookies = 1
kernel.msgmnb = 131072000
kernel.msgmax = 131072000
kernel.shmmax = 4294967295
kernel.shmall = 268435456

Para que se apliquen los cambios reiniciamos el host.

sudo reboot

Descargar e instalar NDOUtils

Descargamos el código del proyecto desde su página en GitHub

cd /tmp
wget -O ndoutils.tar.gz \
https://github.com/NagiosEnterprises/ndoutils/releases/download/ndoutils-2.1.3/ndoutils-2.1.3.tar.gz
tar xzf ndoutils.tar.gz

Una vez descargado debemos compilarlo. Yo ya tengo las herramientas necesarias para realizar dicha compilación, si no las tienes en el sistema, son estas:

sudo dnf groupinstall "Development Tools"

Como paso adicional, instalaremos el paquete ‘perl-DBD-MySQL’, que utilizaremos más adelante.

sudo dnf install perl-DBD-mysql

Ahora sí, compilamos:

cd /tmp/ndoutils-2.1.3/
./configure
make all

Instalamos los binarios:

make install

Iniciamos la base de datos:

cd db/
./installdb -u 'ndoutils' -p'password' -h 'localhost' -d nagios
cd ..

Con este resultado:

DBD::mysql::db do failed: Table 'nagios.nagios_dbversion' doesn't exist at ./installdb line 52.
** Creating tables for version 2.0.1
     Using mysql.sql for installation...
** Updating table nagios_dbversion
Done!

El primer mensaje se puede omitir, es un aviso, la tabla ‘nagios.nagios_dbversion’ no existe, se espera, se está probando para asegurarse de que la base de datos no se haya inicializado.

Instalar los ficheros de configuración

Esto instala los archivos de configuración y configura las credenciales de MariaDB, para que NDOUtils pueda conectarse a la base de datos.

Procedemos a instalarlos:

sudo -s 
make install-config
mv /usr/local/nagios/etc/ndo2db.cfg-sample /usr/local/nagios/etc/ndo2db.cfg
sed -i 's/^db_user=.*/db_user=ndoutils/g' /usr/local/nagios/etc/ndo2db.cfg
sed -i 's/^db_pass=.*/db_pass=ndoutils_password/g' /usr/local/nagios/etc/ndo2db.cfg
mv /usr/local/nagios/etc/ndomod.cfg-sample /usr/local/nagios/etc/ndomod.cfg

El primer fichero de configuración es: /usr/local/nagios/etc/ndo2db.cfg, donde indicamos el usuario y la contraseña de la base de datos:

db_user=ndoutils
db_pass=passwd_que_tengamos

Y el segundo fichero es: /usr/local/nagios/etc/ndomod.cfg. En un principio en este fichero no tenemos que modificar nada.

Instalar el servicio o daemon

Instalamos el servicio o daemon:

sudo -s
make install-init
systemctl enable ndo2db.service

Encender el servicio

Esta parte es realmente sencilla.

sudo systemctl start ndo2db.service

Actualizar Nagios para utilizar NDOUtils

Ahora necesitamos decirle a Nagios que use el módulo NDO. Esto es tan simple como agregar la siguiente línea al archivo nagios.cfg:

roker_module=/usr/local/nagios/bin/ndomod.o config_file=/usr/local/nagios/etc/ndomod.cfg

Los siguientes comandos agregarán esa línea, así como una línea adicional que explica para qué sirve el módulo.

printf "\n\n# NDOUtils Broker Module\n" >> /usr/local/nagios/etc/nagios.cfg
printf "broker_module=/usr/local/nagios/bin/ndomod.o config_file=/usr/local/nagios/etc/ndomod.cfg\n" \
>> /usr/local/nagios/etc/nagios.cfg

Reiniciar el servicio de Nagios

Una vez hechos estos cambios reiniciamos el servicio de Nagios.

sudo systemctl restart nagios.service
sudo systemctl status nagios.service

Trabajar con NDO

Un primer ejemplo de uso es el siguiente:

[davidochobits@servnagios ndoutils-2.1.3]$ grep ndo /usr/local/nagios/var/nagios.log
[1594720972] ndomod: NDOMOD 2.1.3 (2017-04-13) Copyright (c) 2009 Nagios Core Development Team and Community Contributors
[1594720972] ndomod: Successfully connected to data sink.  0 queued items to flush.
[1594720972] ndomod registered for process data
[1594720972] ndomod registered for timed event data
[1594720972] ndomod registered for log data'
[1594720972] ndomod registered for system command data'
[1594720972] ndomod registered for event handler data'
[1594720972] ndomod registered for notification data'
[1594720972] ndomod registered for service check data'
[1594720972] ndomod registered for host check data'
[1594720972] ndomod registered for comment data'
[1594720972] ndomod registered for downtime data'
[1594720972] ndomod registered for flapping data'
[1594720972] ndomod registered for program status data'
[1594720972] ndomod registered for host status data'
[1594720972] ndomod registered for service status data'
[1594720972] ndomod registered for adaptive program data'
[1594720972] ndomod registered for adaptive host data'
[1594720972] ndomod registered for adaptive service data'
[1594720972] ndomod registered for external command data'
[1594720972] ndomod registered for aggregated status data'
[1594720972] ndomod registered for retention data'
[1594720972] ndomod registered for contact data'
[1594720972] ndomod registered for contact notification data'
[1594720972] ndomod registered for acknowledgement data'
[1594720972] ndomod registered for state change data'
[1594720972] ndomod registered for contact status data'
[1594720972] ndomod registered for adaptive contact data'
[1594720972] Event broker module '/usr/local/nagios/bin/ndomod.o' initialized successfully

Comprobamos que la información se añade en la base de datos:

echo 'select * from nagios.nagios_logentries;' | sudo mysql -u ndoutils -p

Con un resultado similar:

[davidochobits@servnagios ndoutils-2.1.3]$ echo 'select * from nagios.nagios_logentries;' | sudo mysql -u ndout
Enter password:
logentry_id     instance_id     logentry_time   entry_time      entry_time_usec logentry_type   logentry_data
1       1       2020-07-14 12:02:52     2020-07-14 12:02:52     690328  262144  ndomod registered for log data'
2       1       2020-07-14 12:02:52     2020-07-14 12:02:52     690349  262144  ndomod registered for system co
3       1       2020-07-14 12:02:52     2020-07-14 12:02:52     690360  262144  ndomod registered for event han
4       1       2020-07-14 12:02:52     2020-07-14 12:02:52     690371  262144  ndomod registered for notificat
5       1       2020-07-14 12:02:52     2020-07-14 12:02:52     690383  262144  ndomod registered for service c
(.....)

Comandos para operar con NDOUtils

Para encender, parar, reiniciar o comprobar su estado, las órdenes son:

sudo systemctl start ndo2db.service
sudo systemctl stop ndo2db.service
sudo systemctl restart ndo2db.service
sudo systemctl status ndo2db.service

Espero que esta entrada os sea de utilidad en algún momento. Nos vamos leyendo.

Fuentes consultadas

NDOUtils – Installing NDOUtils

Starckoverflow – error “install_driver(mysql) failed: Can’t locate DBD/mysql.pm in @INC”

Forum Centos – Install MariaDB error