Cómo monitorizar un servidor DNS con Pi-hole, en Linux Debian, mediante el sistema de monitorización Pandora FMS. Mostraremos cómo monitorizar los módulos habituales de un servidor Linux: CPU, RAM, espacio en discos, ping, latencia, último login (usuario/ip cliente), carga media, total procesos, … y la monitorización propiamente dicha de Pi-hole, como: número de consultas DNS totales realizadas en las últimas 24 horas, número de consultas totales realizadas en los últimos 5 minutos, número de consultas DNS bloqueadas en las últimas 24 horas, número de consultas DNS bloqueadas en los últimos 5 minutos, etc.
- Requisitos para monitorizar servidor DNS Pi-hole con Pandora FMS.
- Monitorizar equipo Linux Debian con Pandora FMS.
- Monitorizar Pi-hole en Linux Debian con Pandora FMS.
- Monitorizar servicio Pi-hole en Linux con Pandora FMS.
- Revisar módulos/sensores/sondas en consola web del servidor de Pandora FMS.
Requisitos para monitorizar servidor DNS Pi-hole con Pandora FMS
En primer lugar dispondremos de un servidor de monitorización con Pandora FMS. En el siguiente artículo explicamos cómo montar un servidor de monitorización con Pandora FMS versión Community (gratuita):
Dispondremos también de un servidor Linux Debian con Pi-hole. En el siguiente enlace explicamos cómo montar un servidor DNS con Pi-hole en Linux:
Necesitaremos un usuario y contraseña con permisos suficientes para acceso al servidor DNS Pi-hole.
Monitorizar equipo Linux Debian con Pandora FMS
Instalaremos el agente de Pandora FMS en el servidor Linux Debian de Pi-hole, tal y como indicamos en este artículo:
Con esto tendremos monitorizado el sistema operativo y el equipo Linux Debian donde residirá el servicio DNS con Pi-hole. Como indicamos en el artículo anterior, se monitorizarán la carga de CPU, el uso de la memoria RAM, espacio libre en los discos, número de procesos, carga media del sistema, último usuario que inició sesión, ping, latencia, estado del servicio SSH, etc.
Monitorizar Pi-hole en Linux Debian con Pandora FMS
Una vez instalado el agente de Pandora FMS en el equipo Linux Debian con Pi-hole (como hemos indicado anteriormente), realizaremos pruebas para verificar que la ejecución de los siguientes comandos funciona y devuelve valores numéricos. Esto lo haremos en la consola (shell) de comandos de Linux, accediendo, por ejemplo, mediante SSH con PuTTY. En el siguiente artículo explicamos cómo obtener información de un servidor DNS Pi-hole, accediendo a su base de datos SQLite:
Pretendemos obtener los siguientes datos, para monitorizarlos:
Dato a obtener | Comando para obtenerlo | Devuelve |
Numero de consultas DNS totales realizadas en los últimos 5 minutos | sqlite3 /etc/pihole/pihole-FTL.db «select count(*) from queries where timestamp>=strftime(‘%s’,’now’)-300» | Un número |
Número de consultas DNS totales realizadas en las últimas 24 horas | sqlite3 /etc/pihole/pihole-FTL.db «select count(*) from queries where timestamp>=strftime(‘%s’,’now’)-86400» | Un número |
Número de consultas DNS bloqueadas en los últimos 5 minutos | sqlite3 /etc/pihole/pihole-FTL.db «select count(*) from queries where status in (1,4,5,9,10,11) and timestamp>=strftime(‘%s’,’now’)-300» | Un número |
Número de consultas DNS bloqueadas en las últimas 24 horas | sqlite3 /etc/pihole/pihole-FTL.db «select count(*) from queries where status in (1,4,5,9,10,11) and timestamp>=strftime(‘%s’,’now’)-86400» | Un número |
Comprobaremos estos comandos desde la línea de comandos, para verificar que funcionan correctamente, por ejemplo:
1 2 3 4 |
sqlite3 /etc/pihole/pihole-FTL.db "select count(*) from queries where timestamp>=strftime('%s','now')-300" sqlite3 /etc/pihole/pihole-FTL.db "select count(*) from queries where timestamp>=strftime('%s','now')-86400" sqlite3 /etc/pihole/pihole-FTL.db "select count(*) from queries where status in (1,4,5,9,10,11) and timestamp>=strftime('%s','now')-300" sqlite3 /etc/pihole/pihole-FTL.db "select count(*) from queries where status in (1,4,5,9,10,11) and timestamp>=strftime('%s','now')-86400" |
Devolverá algo así:
Además, esta primera ejecución nos servirá para anotar los valores devueltos en cada consulta. Así podremos establecer umbrales en cada módulo (sonda/sensor/monitor) para que se lancen alertas en caso de superar ese umbral. Por ejemplo, si en nuestra organización las consultas DNS totales habituales en 5 minutos son de unas 50.000, podremos indicar un umbral de estado de aviso (warning) entre 55.000 y 65.000 y un umbral de estado crítico (critical) cuando superen las 65.001. Así podremos añadir una alarma para que nos avise (por mail, telegram, sms) cuando se pasa a estado crítico.
Una vez revisados los comandos, el siguiente paso será agregar los módulos correspondientes en el fichero de configuración del agente de Pandora FMS en Linux. Para ello editaremos este fichero (que habitualmente suele estar en sudo /etc/pandorafms/pandora_agent.conf:
1 |
sudo nano /etc/pandorafms/pandora_agent.conf |
Al final de este fichero, añadiremos los siguientes módulos:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
module_begin module_name N_Consultas_5_min module_type generic_proc module_exec sqlite3 /etc/pihole/pihole-FTL.db "select count(*) from queries where timestamp>=strftime('%s','now')-300" module_description Numero consultas DNS totales de los ultimos 5 minutos module_min_warning 50000 module_max_warning 70000 module_min_critical 70001 module_max_critical 9000000 module_end module_begin module_name N_Consultas_24_h module_type generic_proc module_exec sqlite3 /etc/pihole/pihole-FTL.db "select count(*) from queries where timestamp>=strftime('%s','now')-86400" module_description Numero consultas DNS totales de las ultimas 24 horas module_min_warning 1000000 module_max_warning 1200000 module_min_critical 1200000 module_max_critical 99000000 module_end module_begin module_name N_Consultas_Bloqueadas_5_min module_type generic_proc module_exec sqlite3 /etc/pihole/pihole-FTL.db "select count(*) from queries where status in (1,4,5,9,10,11) and timestamp>=strftime('%s','now')-300" module_description Numero consultas DNS bloqueadas en los ultimos 5 minutos module_min_warning 5000 module_max_warning 7000 module_min_critical 7001 module_max_critical 99000000 module_end module_begin module_name N_Consultas_Bloqueadas_24_h module_type generic_proc module_exec sqlite3 /etc/pihole/pihole-FTL.db "select count(*) from queries where status in (1,4,5,9,10,11) and timestamp>=strftime('%s','now')-86400" module_description Numero consultas DNS bloqueadas en las ultimas 24 horas module_min_warning 100000.00 module_max_warning 120000.99 module_min_critical 120001.00 module_max_critical 9000000 module_end |
Modificaremos los umbrales para warning y critical, para cada módulo, ajustándolos a los de nuestra organización. Incluso si no queremos cambios de estados, podremos omitir los umbrales, quitando las líneas:
1 2 3 4 |
module_min_warning ... module_max_warning ... module_min_critical ... module_max_critical ... |
Guardaremos los cambios pulsando Control + O y cerraremos con Control + X. A continuación reiniciaremos el servicio de Pandora Agent en Linux con:
1 |
sudo systemctl restart pandorafms-agent |
Comprobamos que está en estado «active (running» con:
1 |
sudo systemctl status pandorafms-agent |
Monitorizar servicio Pi-hole en Linux con Pandora FMS
Monitorizaremos también el estado del servicio (demonio/daemon) de Linux «pihole-FTL» en Pandora FMS. Para monitorizar un servicio Linux, usaremos el siguiente comando:
1 |
ps -Af | grep pihole-FTL | grep -v "grep" | wc -l |
Si lo ejecutamos desde la línea de comandos del equipo Linux con el DNS Pi-hole, deberíamos obtener el valor «1», indicando que el servicio «pihole-FTL» está iniciado:
Si devuelve «0» indica que no está iniciado o no existe.
Añadiremos el siguiente módulo al fichero /etc/pandorafms/pandora_agent.conf para monitorizar el estado de un servicio Linux, en este caso el servicio de Pi-hole:
1 2 3 4 5 6 |
module_begin module_name Servicio_Pihole_FTL module_type generic_proc module_exec ps -Af | grep pihole-FTL | grep -v "grep" | wc -l module_description Servicio Pihole_FTL activo module_end |
Revisar módulos/sensores/sondas en consola web del servidor de Pandora FMS
Esperaremos unos segundos y accederemos a la consola web de Pandora FMS. Buscaremos el agente (servidor/dispositivo) y accederemos a su detalle. Podremos comprobar que, además de los módulos habituales para un servidor Linux, ya aparecen los módulos, agregados anteriormente al fichero de configuración del agente, para monitorizar Pi-hole:
Desde aquí podremos modificar los umbrales establecidos, pulsando en el icono de la llave de un módulo:
Ajustaremos los umbrales y cualquier otro dato del módulo:
Una vez configurados los umbrales, podremos establecer alertas para que nos avise, en caso de superar estos umbrales:
Por supuesto, podremos agregar tantos monitores/módulos/sondas como necesitemos, obteniendo los datos de la base de datos SQLite. Por ejemplo, otro monitor interesante podría ser obtener el equipo que más consultas DNS ha realizado en las últimas 24 horas, con:
1 |
sqlite3 /etc/pihole/pihole-FTL.db "select client from queries where status in (1,4,5,9,10,11) and timestamp>=strftime('%s','now')-86400 group by client order by count(client) desc Limit 1" |
Agregando el módulo al fichero /etc/pandorafms/pandora_agent.conf de Pandora Agent:
1 2 3 4 5 6 |
module_begin module_name Equipo_Mas_Consultas_Bloqueadas_24_h module_type async_string module_exec sqlite3 /etc/pihole/pihole-FTL.db "select client from queries where status in (1,4,5,9,10,11) and timestamp>=strftime('%s','now')-86400 g> module_description Equipo que mas consultas bloqueadas ha tenido en las ultimas 24 horas module_end |
A partir de ahora recibiremos las alertas cuando un módulo supere los umbrales, por el medio que hayamos establecido: