Cómo desplegar NRPE en Rocky Linux con Ansible

Si gestionamos un gran parque informático, con centenares o miles de servidores, ya sean virtuales o físicos, no tiene mucho sentido añadir uno por uno a nuestro sistema de monitoreo de turno, como por ejemplo Nagios. Sin duda se pueden crear maquetas, en el caso de servidores virtuales, o bien usar guiones en bash, para realizar los despliegues del agente NRPE. Es aquí donde os quiero enseñar como desplegar de forma fácil los paquetes necesarios, para conectar los hosts con Nagios, con su respectiva configuración, utilizando Ansible.

La idea en utilizar un servidor central con Ansible, o bien utilizar el propio host de Nagios, con ese fin. En la web ya os expliqué la instalación de Ansible GNU Linux, por lo que esa parte me la saltaré.

Cómo desplegar NRPE en Rocky Linux con Ansible

Una vez ya tenemos nuestra máquina preparada, con Ansible instalado, es importante que realicemos intercambio de llaves SSH con todos los hosts del inventario, que así deseemos. Una vez hecho esto debemos añadir los hosts que nos interesen en el fichero «/etc/ansible/hosts«

En este ejemplo voy a utilizar, tanto como para servidor Nagios, como para el servidor cliente, tres VPS, que tengo alojados en mi proveedor de confianza Clouding.io

  • servnagios.bitsandlinux.com – IP privada 10.20.10.6
  • servftp.bitsandlinux.com – IP privada 10.20.10.5
  • servrockytest.bitsandlinux.com – IP privada 10.20.10.7

Por lo que, solo añadiremos el servidor cliente:

#Justo al final del fichero /etc/ansible/hosts
[cloudingio]
servftp.bitsandlinux.com<br />servrockytest.bitsandlinux.com

En ambos casos he habilitado la IP privada, para no tener que utilizar la pública en las comunicaciones entre los hosts. Además, tengo añadido en el fichero «/etc/hosts«, las IP y los nombres de los servidores.

Creamos el Playbook

Los libros de jugadas o “Playbooks” son archivos de configuración en formato YAML, que describen una serie de tareas a ejecutar. En nuestro caso, primero queremos que instale NRPE, para después instalar los plugins de Nagios, y por último configurar NRPE.

Creamos una carpeta para los ficheros YAML:

mkdir -p /etc/ansible/playbooks

Y creamos el fichero:

vim /etc/ansible/playbooks/nrpe-despliegue.yaml

Con este contenido:

---
- hosts: cloudingio
  remote_user: root
 
  vars:
    nagios_plugin_version: 2.3.3
    nagios_plugin_url: "https://nagios-plugins.org/download/nagios-plugins-{{ nagios_plugin_version }}.tar.gz"
    nagios_install_dir: "/tmp/nagios-plugins-{{ nagios_plugin_version }}"
 
  tasks:
  - name: enable repo epel
    dnf:
      name: epel-release
      state: latest
 
  - name: install Development Tools
    dnf:
      name: '@Development tools'
      state: present
 
  - name: install openssl-devel
    dnf:
      name: openssl-devel
      state: present
 
  - name: install nrpe
    dnf:
      name: nrpe
      state: latest
 
  - name: download last version nagios-plugins
    get_url:
      url: "{{ nagios_plugin_url }}"
      dest: "/tmp/{{ nagios_plugin_version }}.tar.gz"
    register: nagios_plugin_source
 
  - name: unpacking nagios-plugins
    unarchive:
      copy: no
      dest: /tmp/
      src: "{{ nagios_plugin_source.dest }}"
    when: nagios_plugin_source.changed
    register: nagios_plugin_source_unpack
 
  - name: configuring nagios-plugins source
    command: "./configure --with-nagios-user=nagios --with-nagios-group=nagios"
    args:
      chdir: "{{ nagios_install_dir }}"
    when: nagios_plugin_source_unpack.changed
    register: nagios_plugin_configure
 
  - name: make nagios plugins
    become: yes
    shell: make
    args:
      chdir: "{{ nagios_install_dir }}"
    when: nagios_plugin_configure.changed
    register: nagios_plugin_make
 
  - name: make install nagios plugins
    become: yes
    shell: make install
    args:
      chdir: "{{ nagios_install_dir }}"
    when: nagios_plugin_make.changed

Una vez hecho esto, guardamos y salimos.

Resumo un poco lo que hacemos. Primero de todo declaramos las variables que vamos a utilizar, estas son la versión de los plugins de Nagios, la URL de descarga y directorio donde se ubicará. En lo que respecta a las tareas, primero habilitamos el repositorio EPEL, para después instalar los paquetes y librerías necesarias para compilar el código.  Después instalamos el propio NRPE, para después descargar los Nagios plugins y posteriormente compilarlos.

Para desplegar el Playbook, debemos escribir:

ansible-playbook nrpe-despliegue.yaml

Configurar NRPE

Ahora debemos crear el fichero de configuración, llamado «nrpe.cfg», en la misma ubicación que el fichero anterior:

vim /etc/ansible/playbooks/nrpe.cfg

Y añadimos:

# bind to all interfaces
server_address=0.0.0.0
 
# allow neteye
allowed_hosts=127.0.0.1,10.20.10.6
 
# allow command args
dont_blame_nrpe=1
 
# example of commands
command[check_diskspace_arg]=/usr/lib/nagios/libexec/check_disk $ARG1$
command[check_load_arg]=/usr/lib/nagios/libexec/check_load $ARG1$
command[check_procs_arg]=/usr/lib/nagios/libexec/check_procs $ARG1$
command[check_users_arg]=/usr/lib/nagios/libexec/check_users $ARG1$

Y ahora, al fichero «nrpe-despliegue.yaml», justo al final, añadimos:

- name: deploy nrpe.cfg
    copy:
      src: nrpe.cfg
      dest: /etc/nrpe.d/nrpe.cfg
    register: deploy_nrpe
 
  - name: start/restart and enable nrpe
    systemd:
      name: nrpe
      state: restarted
      enabled: yes
    when: deploy_nrpe.changed

Y volvemos a ejecutar el playbook:

ansible-playbook nrpe-despliegue.yaml

Aquí podéis ver un ejemplo de los mensajes del despliegue, cuando añadimos una segunda máquina cliente:

Muestra del despliegue del libro de jugadas

De esta manera, hemos visto lo fácil que es realizar despliegues del agente de NRPE, en los nuevos hosts.

Y esto es todo por hoy. En el libro de jugadas podemos hacer muchas cosas, como por ejemplo, indicar que, según la distribución GNU/Linux que sea, hacer una cosa u otra. La verdad que Ansible tiene una infinidad de posibilidades. ¿Tienes experiencia con Ansible? ¿Cómo hubieras planteado el libro de jugadas? ¿Prefieres Ansible a Puppet o Chef? Por favor, deja tus respuestas en los comentarios. ¡Gracias!

Fuentes consultadas

Neteye-blog.com  – How to Deploy NRPE on CentOS 7 with Ansible

Ansible Documentation – Return Values