Nagios y Ansible

Como comentábamos en la entrada anterior, utilizamos varias herramientas de monitorización cuya configuración hemos automatizado con Ansible. Además de Munin, también monitorizamos nuestros servicios con Nagios (aquí y aquí explicamos un poco de este software de monitorización) para el que hemos desarrollado dos playbooks: nagios.yml y nrpe.yml, con los que realizamos la configuración de este servicio de monitorización en todos los servidores donde se ejecuta dicho software de monitorización y para los monitorizar los servidores que lo consideremos (normalmente, todos).

Como en todos los playbooks de AnsibleEPS para nuestra infraestructura, este nos permite realizar de manera centralizada, para todos los servidores que realizan el servicio, las tareas de configuración asociadas a él,  realizándose los cambios una sola vez (en lugar de realizarlo para cada servidor) y, antes de ejecutarlo en cada servidor, comprueba la sintaxis, avisando de errores producidos si es el caso (aunque para estos playbooks no se vuelve a la versión anterior).

En esta entrada vamos a ver el primero de los playbooks:nagios.yml, el encargado de configurar el/los servidor(es) Nagios que tengamos en nuestra infraestructura.

La configuración  de este playbook se realiza modificando tanto ficheros estáticos (sin variables) como dinámicos. Estos últimos se generan a partir de los equipos del inventario (excepto los que se incluyan en el grupo nonagios) y una serie de variables que configuran los chequeos: nagiosServicesnagiosGlobalnagiosGroup y nagiosHost. Los chequeos del resto de equipos (los que no se incluyen en el inventario) se realizarán a través de unos ficheros estáticos creados en el directorio roles/nagios/files. Dentro de este directorio roles/nagios/files tendremos los tres subdirectorios con ficheros de configuración que necesitamos para configurar el servidor Nagios:

  • Otro subdirectorio etc/nagios-plugins/config donde se definen los ficheros de configuración de las órdenes Nagios para los chequeos principales.
  • Un subdirectorio etc/nagios3 con toda la configuración principal de Nagios (dentro de su subdirectorio conf.d crearemos todos los chequeos para los equipos que no estén en el inventario, o que se incluyan en el grupo nonagios).

Además, para configurar el comportamiento del servicio Nagios disponemos, en el fichero group_vars/all/nagiosServices, de las siguientes variables:

  • nagiosServices. Con esta variable configuraremos los Services de todos los servidores. Esta variable es una lista con los siguientes atributos:
    • name Cadena de texto con el nombre del servicio que utiliza nagios para mostrar la información de los chequeos. Si se cambia el nombre, nagios perderá el histórico de los chequeos anteriores (con otro nombre) y comenzará a guardar la nueva información con eel nuevo. Es un atributo obligatorio.
    • command Orden que se utiliza para realizar el chequeo (equivale a check_command en la configuración del servicio en Nagios). Si se incluye la cadena hostname en la cadena de texto, se sustituirá por el fqdn del equipo. También es un atributo obligatorio.
    • handler Manejador del servicio (event_handler en la configuración del servicio en Nagios) que indica qué tarea realizar en caso de error (normalmente aplicamos un reinicio del servicio). Es un atributo opcional.
    • use Template del servicio. Se utiliza para coger una plantilla prefedefinida con las caraterísticas principales del servicio (use en la configuración del servicio en Nagios) Es un atributo opcional y, por defecto, es generic-service

En la infraestructura de ejemplo utilizada para explicar nuestros playbooks, el valor de esta variable dentro de la configuración de Nagios para que monitorice el servicio LDAP sería (la configuración completa se puede consultar aquí):

nagiosServices:
- name: "Ldap"
  command: "check_ldap"
  handler: "restart-ldap"
- name: "Load"
  command: "check_nrpe!check_load"
  • nagiosGlobal Con esta variable configuramos los chequeos Nagios para todos los servidores. Generará un fichero por cada equipo a chequear con la declaración del host y los servicios. Esta variable es una lista con los siguientes atributos:
    • label Este atributo se utiliza como referencia en las entradas que generemos de tal forma que si más adelante queremos hacer referenciar una entrada (para eliminarla o sobreescribirla), lo haremos por este atributo. Es atributo obligatorio.
    • service Se trata de una cadena de texto con el nombre del servicio a chequear y debe estar declarado en la variable nagiosServices. Se trata de un atributo opcional, si no se declara no se tendrá en cuenta el servicio.
    • command Se trata de una cadena de texto con la comprobación a realizar. Se trata de un atributo opcional. Si se define se sobreescribirá el chequeo (atributo command que aparece en la variable nagiosServices).
    • handler Se trata de una cadena de texto con el manejador a utilizar en caso de errror. Se trata de un atributo opcional. Si se define se sobreescribirá el event_handler (atributo handler) que aparece en la variable nagiosServices.roles/nagios/files
    • use Se trata de una cadena de texto con el template a utilizar en el servicio. Se trata de un atributo opcional. Si se define se sobreescribirá el template (atributo use) que aparece en la variable nagiosServices.

Continuando con el ejemplo anterior, el valor de esta variable podría ser:

nagiosGlobal:
- label: "Load"
  service: "Load"
- label: "Memory"
  service: "Memory"
  • nagiosGroup Nos pemite realizar la configuración de los chequeos de Nagios para un grupo específico. Se trata de una lista de variables, cada una de ellas con varios atributos. El primer atributo siempre se llama group con el nombre del grupo al que se le aplicarán las declaraciones. Además se incluyen los siguientes atributos para la definición del chequeo del host:
    • useHost Cadena de texto con el template a utilizar en la declaración del host. Se trata de un atributo opcional. Si no se define se usará por defecto el template generic-host.
    • checkHost Cadena de texto con el chequeo del host. Se trata de un atributo opcional. Si no se define se usará por defecto el chequeo check-host-alive.
    • checks Se trata de una lista de variables, cada una de ellas con varios atributos. Es opcional. La lista de servicios checks incluye para cada item cinco atributos idénticos a los de la variable nagiosGlobal (labelservicecommandhandler y use) y que se comportan de idéntica manera.

Podemos sobreescribir o eliminar los servicios globales desde esta variable (en esta lista de servicios por grupo). Para realizar estas operaciones habrá que:

    • Para sobreescribir servicios globales, declarar 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.
    • Para eliminar servicios globales, declarar el atributo label con el mismo texto que el atributo global, y no declaramos el resto de atributos. Esto no es decir que se declaran con valor nulo, sino que en la entrada sólo existirá el atributo label

El resto de servicios que se escriban (y no coincida el label con ninguna global) se añadiran en los chequeos a las globales.

Continuando con el ejemplo para LDAP, el valor de nagiosGroup será

 nagiosGroup:
- group: LDAP
  checks:
  - label: "ldap"
    service: "ldap"
  - label: "ldapConn"
    service: "ldapConn"
   
  • nagiosHost  Con esta variable configuraremos los chequeos de Nagios para un equipo específico. Se trata de una lista de variables, cada una de ellas con varios atributos. El primer atributo siempre se llama host con el nombre del host al que se le aplicarán las declaraciones. Además se incluyen las siguientes atributos para la definición del chequeo del host:
    • useHost Cadena de texto con el template a utilizar en la declaración del host. Se trata de un atributo opcional. Si no se define se usará por defecto el template generic-host.
    • checkHost Cadena de texto con el chequeo del host. Se trata de un atributo opcional. Si no se define se usará por defecto el chequeo check-host-alibve.
    • checks Se trata de una lista de variables, cada una de ellas con varios atributos. Es opcional. Al igual que check de nagiosGroup, dispone de 5 atributos idénticos a los que existían en la variable ‘nagiosGroup’ y ‘nagiosGlobal’ (labelservicecommandhandler y use), y que se comportan de idéntica manera. Y también, de igual forma, podemos sobreescribir o eliminar los servicios globales desde esta variable.

Para el ejemplo que estamos tratanto en esta entrada, esta variable quedaría como:

nagiosHost:
- host: server_13
  checks:
  - label: "ldap"
    service: "ldapConn"
  - label: "ldapConn"
    service: "ldapConn"

Tras la configuración, la ejecución del playbook debemos realizarla con la orden:  ansible-playbook nagios.yml que afectará a todos los servidores incluidos en el grupo nagios. Tras la ejecución de esta orden, tendríamos configurado en los servidores del grupo nagios la recolección de datos de todos nuestros servidores excepto de aquellos que hayamos incluido en el grupo nonagios.

Al igual que comentamos en la entrada dedicada a Munin, si queremos que todo sea automático, disponemos de una aplicación de monitorización genérica que llamamos EPS-MS(el software está en Github) que descubre todos los servidores de la red que le indiquemos y configura su infraestructura de monitorización. Así, la diferencia entre ambos es que, mientras con EPS-MS el descubrimiento de servidores y la configuración de la monitorización se realiza automáticamente por la aplicación para comprobar tanto los puertos TCP abiertos como la carga de CPU y ocupación de disco de los servidores, en AnsibleEPS los servidores los introduce el administrador en el inventario y la configuración de Nagios (y, por tanto, su comportamiento y qué monitoriza) estará en función del valor dado a las variables explicadas anteriormente.

En la próxima entrada veremos como configurar con Ansible una parte importante de Nagios: nrpe. Este playbook es para configurar, en los servidores que queremos monitorizar de nuestra infraestructura, el servicio nrpe al que se conectarán los servidores Nagios para realizar dicha monitorización
¡Espermos que os sea útil!

Deja un comentario