Aunque OP5 monitor dispone de su propia API Rest, algunas aplicaciones (como Splunk por ejemplo) solo se entenderán con nuestro servidor si disponemos de la API Livestatus.

Hagamos un poco de historia. Nagios Core no incluye ningún tipo de API, todo acceso a su información se realiza mediante la lectura del fichero “status.dat”. Aquí el inconveniente lo tenemos en que es un fichero difícil de formatear para poder trabajar con él.

La alternativa siempre ha sido NDO, incluye un agente que graba en una base de datos MySQL. Los inconvenientes de NDO son básicamente dos: las escrituras en disco (muchas si tenemos una monitorización extensa) y la estructura de la propia base de datos (algo “complicada” de entender si la comparamos por ejemplo con Merlin).

Finalmente tenemos MK Livestatus que nos resuelve estos dos problemas. No hay acceso a disco (no hay MySQL por en medio) y su sistema de consultas (querys) es de lo más sencillo.

Además Livestatus se ha convertido en “estándar” y se incluye en muchos forks (como Naemon) de forma nativa, a la vez que cada vez más aplicaciones soportan la API (NagVis, NagiosBO, Thruk, etc.). Podéis encontrar toda la información aquí:

https://mathias-kettner.de/checkmk_livestatus.html

Os comentábamos al principio que aplicaciones como Splunk solo se entenderán con nuestro Nagios (hoy como ejemplo OP5 Monitor) si existe la API Livestatus. Vamos a ver como integramos Splunk con Nagios (OP5 Monitor).

Empezamos explicando que la integración de Splink con Nagios se compone de dos partes: un agente que se instala en el servidor Nagios y un acceso a la API del mismo servidor. Sin las dos partes la información que nos aparece en Splunk es incompleta.

La instalación del agente la tenemos documentada en:

https://apps.splunk.com/app/352/#/documentation

La parte del agente no tiene más secreto que anotar correctamente los path a los que tiene que acceder (no son los mismos en Nagios que en OP5 Monitor).

La dificultad la tendremos en el momento de integrar la lectura de los resultados, pues OP5 ya manda los datos a PNP4Nagios en un formato determinado, y substituir el uno por el otro nos lleva a que dejemos de ver las gráficas, es por ello que solo debemos añadir estas cadenas al actual funcionamiento de OP5, para que funcionen los dos formatos de forma simultánea.

Para la cadena “hosts”:

src_host=$HOSTNAME$ perfdata=HOSTPERFDATA hoststate=$HOSTSTATE$ attempt=$HOSTATTEMPT$ statetype=$HOSTSTATETYPE$ executiontime=$HOSTEXECUTIONTIME$ reason=$HOSTOUTPUT$ result=$HOSTPERFDATA$

Para la cadena “services”:

src_host=$HOSTNAME$ perfdata=SERVICEPERFDATA name=$SERVICEDESC$ severity=$SERVICESTATE$ attempt=$SERVICEATTEMPT$ statetype=$SERVICESTATETYPE$ executiontime=$SERVICEEXECUTIONTIME$ latency=$SERVICELATENCY$ reason=$SERVICEOUTPUT$ result=$SERVICEPERFDATA$

hasta aquí ya tenemos la parte del agente instalada correctamente, vamos a por la API.

En este enlace encontraremos toda la información necesaria:

https://mathias-kettner.de/checkmk_livestatus.html

Requisitos:

yum install gcc-c++ libstdc++-devel

A partir de aquí descargamos la versión más nueva de MK Livestatus, descomprimimos, configuramos, compilamos e instalamos:

wget https://mathias-kettner.de/download/mk-livestatus-1.2.6b11.tar.gz

tar xzf mk-livestatus-1.2.6b11.tar.gz

cd mk-livestatus-1.2.6b11

./configure --with-nagios4

make

make install

Añadimos los siguientes parámetros a nuestro “nagios.cfg”.

event_broker_options=-1

broker_module=/usr/local/lib/mk-livestatus/livestatus.o /opt/monitor/var/rw/live

Reiniciamos OP5 Monitor en nuestro caso y probamos desde linia de comando que funciona correctamente la API:

echo 'GET hosts' | unixcat /opt/monitor/var/rw/live

Deberíamos de ver una lista con todos los hosts y sus servicios.

Ahora solo nos hace falta dejar la API disponible desde otros equipos (en este caso del servidor de Splunk). Para eso creamos un servicio en Xinetd que nos abra el puerto 6557.

vi /etc/xinetd.d/livestatus

y le añadimos el siguiente contenido:

service livestatus

{

type = UNLISTED

port = 6557

socket_type = stream

protocol = tcp

wait = no

cps = 100 3

instances = 500

per_source = 250

flags = NODELAY

user = monitor

server = /usr/bin/unixcat

server_args = /opt/monitor/var/rw/live

# only_from = IP_SPLUNK

disable = no

}

Reiniciamos xinetd y listos, ya disponemos de los datos de nuestro OP5 en Splunk.

"