Continuando con nuestros playbooks de gestión de sistermas y servicios y, en concreto, con la monitorización de ellos con Nagios, vamos a ver cómo configuramos nrpe. Este es un demonio al que se conectará el servidor de Nagios para obtener el estado del servicio a comprobar.
El playbook nrpe.yml es el que nos permite configurar los chequeos NRPE para todos los servidores (excepto los que aparezcan en el grupo nonrpe) de manera centralizada. Como hemos indicado en todas las entradas dedicadas a Ansible, el gestionar de esta forma este servicio, nos permite realizar los cambios una sóla vez ,en lugar de realizarlo para cada servidor y con comprobación de errores sintácticos. También, además, es posible modificar sólo un servidor o un grupo, con el parámetro –limit nombreServidor o nombreGrupo.
El playbook lo podemos ejecutar con la orden ansible-playbook nrpe.yml. Lo primero que realizará es crear el directorio /etc/nagios/nrpe.d (si no existiera). Posteriormente, añade la directiva include al directorio creado, en el fichero de configuración /etc/nagios/nrpe.cfg. Seguidamente creará un fichero /etc/nagios/nrpe.d/baseNrpe.cfg con todos los chequeos NRPE (líneas command). Para esta acción consultará unas varibales que, a través de un template (roles/nrpe/templates/etc/nagios/nrpe.d/baseNrpe.cfg), generará este fichero con los chequeos necesarios para cada servidor . Además comentará todos los chequeos que existan en el fichero /etc/nagios/nrpe.cfg. Y por último, reiniciará el servicio Nagios NRPE si ha habido algún cambio.
Las variables que hemos comentado que se necesitan para generar el fichero /etc/nagios/nrpe.d/baseNrpe.cfg se declaran, principalmente, en el fichero general group_vars/all/nrpe (aunque es posible sobreescribir los valores en los ficheros por grupo o por host, no es lo normal ya que en el fichero general existen variables para grupos y servidores específicos). Estas variables son:
- nrpeGlobal Permite configurar el fichero baseNrpe.cfg (chequeos NRPE globales) para todos los servidores. Se trata de una lista con atributos para definir las entradas del fichero con la etiqueta NRPE y el chequeo a ejecutar. Cada item de la lista tiene dos atributos:
-
- label Atributo con doble función: por un lado servirá de etiqueta para el chequeo NRPE, y por otro lado es la clave del item y nos sirve de referencia a la entrada (para eliminarla o sobreescribirla)
-
- command Cadena de texto con el plugin a ejecutar y sus parámetros. Puede ser un texto literal o bien incluir comandos indirectos; en este caso en lugar de utilizar los comandos directamente, se utilizan variables definidas por el script scripts/path_facts.py (ya que el comando puede variar de una distribución a otra) con el formato command.etiquetaComando o daemon.etiquetaDemonio.operacion según se trate de un comando o un demonio (por ejemplo: command.umount o daemon.bind.restart). Este caso es útil cuando el comando o demonio es ejecutado en más de un host, y queremos que el script scripts/path_facts.py obtenga su path. Si no existe el comando o demonio a usar, tendremos que modificar el guión path_facts.py y añadir la nueva entrada para que localice su comando o demonio asociado en la variable commands o daemons respectivamente, según el sistema operativo y versión.
Ambos atributos label y command deben existir. En caso de que alguno no exista, la entradas no se pasará al fichero NRPE.
Un ejemplo de configuración es:
nrpeGlobal: - label: check_load command: /usr/lib/nagios/plugins/check_load -w 15,10,5 -c 30,25,20 - label: check_memory command: /usr/lib/nagios/plugins/check_mem.sh -w 90 -c 95 - label: check_diskRoot command: /usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /
- nrpeGroup Permite configurar el fichero baseNrpe.cfg para un grupo específico. Se trata de una lista de variables, cada una de ellas con dos atributos: group con el nombre del grupo al que se le aplicarán las declaraciones y otro atributo que consiste en una lista de entradas a aplicar que incluye, para cada item, dos atributos idénticos a los que existían en la variable nrpeGlobal (label y command) y que se comportan de idéntica manera. Podemos sobreescribir o eliminar las entradas globales desde esta variable (en esta lista de entradas por grupo) para lo que, si queremos:
-
- Sobreescribir entradas globales, declararemos el atributo label con el mismo texto que el atributo global, y definimos el resto de atributos con los valores que queramos en este caso concreto.
-
- Eliminar entradas globales, declaramos el atributo label con el mismo texto que el atributo global, y no declaramos el resto de atributos (no quiero decir que se declaran con valor nulo, sino que en la entrada sólo existirá el atributo ‘label’).
El resto de entradas que se escriban (y no coincida el label con ninguna ‘global’) se añadiran en el fichero a las globales.
Un ejemplo de esta variable es:
nrpeGroup: - group: LDAP rules: - label: check_ldapConn command: /usr/lib/nagios/plugins/check_netstat -p '<8365,<8365' -c '<1,>400' - label: restart-ldap command: sudo daemon.ldap.stop > /dev/null 2> /dev/null;sudo daemon.ldap.start - group: DNS rules: - label: check_dns command: /usr/lib/nagios/plugins/check_dns -H server_11 -s 127.0.0.1 -a 172.20.1.11 -t 5 - label: restart-dns command: sudo daemon.bind.stop > /dev/null 2> /dev/null;sudo daemon.bind.start
- nrpeHost Nos permite configurar baseNrpe.cfg para un servidor específico. Se trata de una lista de variables, cada una de ellas con dos atributos. Un primer atributo llamado host con el nombre del servidor al que se le aplicarán las declaraciones, y otro atributo que consiste en una lista de entradas a aplicar que incluye, para cada item, dos atributos idénticos a los que existían en la variable nrpeGlobal y en nrpeGroup (label y command) y que se comportan de idéntica manera. También con esta variable podemos sobreescribir y/o eliminar entradas globales o de grupo(en esta lista de entradas por host) realizando las operaciones de la misma forma que se ha descrito para nrpeGroup
Un ejemplo de esta variable, y relacionado con el ejemplo de chequeo LDAP podría ser que, en el servidor server_13, el servicio LDAP esta escuchando el puerto 389 en lugar del 8365 como el resto. Sin embargo el reinicio sí que es igual:
nrpeHost: - host: server_13 rules: - label: check_ldapConn command:/usr/lib/nagios/plugins/check_netstat -p "<389,<389" -w "~,>200" -c "<1,>300"0
Al igual que comentamos en la entrada de Munin y Nagios, si queremos que todo sea automático disponemos de una aplicación de monitorización genérica que llamamos EPS-MS con la que se configura automáticamente toda la infraestructura para monitorizar alertas, visualizar gráficas de rendimientos, gestionar inventarios hardware/software y chequear vulnerabilidades.
¡Esperamos que os sea útil!