Agentes Software con Ansible: ahorremos tiempo y trabajo
Los Agentes Software son programas muy pequeños que instalamos en cada sistema operativo para que nos retribuya métricas a nuestro Data Server de Pandora FMS… ¿Qué tiene que ver esto con Ansible? Veamos.
Agentes Software en Pandora FMS
Agentes Software: es un sustantivo con nombre y apellido que debe escribirse con mayúsculas; aquí lo denotaré como Agente Software (PFMS). La letra F en nuestro nombre denota flexibilidad; por ello, nuestro software de monitorización puede ser usufructuado de muchas formas o maneras. Hoy os planteo una de ellas…
Ansible
En otro artículo os contamos una breve historia acerca de Ansible, sus conceptos, operaciones básicas y su relación con Pandora FMS. Esencialmente, Ansible nos libra de la tarea de repetir una y otra vez las mismas instrucciones en los ordenadores asignados en nuestro trabajo como Administradores de Red. Toda orden que necesitemos usar dos veces o más debemos guardarla en formato YAML, para luego reutilizarla con Ansible. Dichos ficheros, a su vez, los podremos compartir o legar por medio de un sistema de control de versiones tal como Git (así, llegado el momento, podremos irnos de vacaciones y que un colega nos cubra sin mayor trauma).
La terminología de Ansible la denotaré aquí como (ANS). Repasemos:
- Nodo (ANS) o Ansible Node: cada una de las máquinas a nuestro cargo.
- Fichero de Inventario (ANS) o Ansible Inventory File: en texto plano (también acepta YAML) donde tenemos todos y cada uno de los Nodos (ANS) por dirección IP o, mejor aún, por su dirección web completa. Podemos reunir, por medio de la estructura de un archivo INI, cada uno de los grupos (por ejemplo «[pandora_fms_group:children]» y los alias que ya tengamos registrados, para ahorrar trabajo) y los nombramos de manera singular para usarlos como variables para el siguiente componente. El comando ansible-inventory es útil si tenemos muchos Nodos (ANS).
- Tarea (ANS) o Ansible Task: un bloque de instrucciones que definen un procedimiento completo, por ejemplo instalar una aplicación.
- Módulo (ANS) o Ansible Module: contiene una serie de Tareas (ANS), generalmente de sistema, que aplicaremos a los Nodos (ANS). Aunque podemos -y debemos- escribir nuestros Módulos (ANS), la idea es ahorrar tiempo y ya la Comunidad (ANS) o Galaxy Ansible tiene creados muchísimos de ellos. Por ejemplo, existe uno llamado group_by que permite agrupar de manera automatizada las máquinas según los Hechos (ANS)…
- Hechos (ANS) o Ansible Facts: viene activo por defecto en Ansible y trata de la capacidad de este software de retribuir una gran cantidad de información (tipo de procesador, tipo de sistema operativo, etc.). Se puede desactivar si conocemos muy bien nuestros Nodos (ANS).
- Libreto (ANS) o Ansible Playbook: un fichero en formato YAML con Tareas (ANS), Módulos (ANS), etc.
Para conocer la versión de Ansible que tenemos instalada ejecutamos ansible –version. Al momento de escribir estas líneas la última versión estable es la 2.9.11 con Jinja2 2.11.2 -con yamllint 1.10.0 para verificar los ficheros .yaml -. Recomiendo usar virtualenv para manteneros lejos de otros proyectos en lenguaje Python que tengáis en vuestro ordenador principal. He usado Lubuntu 18 como Nodo Controlador (ANS) y Ubuntu 16 y 18 como Nodos (ANS).
Acerca de la seguridad y Ansible
Deben considerar que una gran responsabilidad es inseparable de un gran poder.
Ansible comunica de manera cifrada con los Nodos (ANS) por defecto con SSH por lo que debemos utilizar una clave pública que registraremos en las máquinas a monitorizar para conectar sin pasar contraseña. La mayoría de las empresas que alquilan máquinas virtuales nos asignan un TOKEN API con el cual podremos crear servidores con nuestra clave pública incorporada de una vez (esto permite automatización si nuestra cantidad de clientes y trabajo aumenta).
Luego, y además, el usuario allá registrado no debe permitir la conexión por medio de contraseña. Ese usuario debe tener derechos de administrador o usuario raíz (pertenecer al grupo sudoer) y, aunque tenga contraseña establecida, no solicitarla para elevar privilegios (esto se logra con el comando sudo visudo y editando sus valores, cierra sesión y desconecta y luego se hacen efectivos).
Pensad bien todo este escenario: ¡Vuestro Nodo Controlador (ANS) tiene acceso a todos los Nodos (ANS) para ejecutar comandos muy importantes de manera automática!
- Cifrad todo vuestro disco duro, si os roban no podrán leer su contenido.
- Vuestro usuario no debe iniciar sesión de manera automática y predeterminada, debe solicitar contraseña siempre.
- Protector de pantalla con contraseña cada 5 minutos de inactividad.
Módulo (ANS) controlador de paquetes
En Ansible ya están registrados los controladores de paquetes de software; sin ir más allá, en Debian es apt y en CentOS es yum. Así, para instalar el Agente Software (PFMS) desde los repositorios por defecto de Ubuntu:
# file apt_install_pandora_fms_agent.yaml
---
- hosts: pandora_fms_group
become: yes
tasks:
- name: install figlet and pandorafms-agent
apt: name={{ ['figlet', 'pandorafms-agent', 'curl' ] }} update_cache=no state=latest
El parámetro become: indica que tome derechos de administrador y la Tarea (ANS) es instalar… ¿figlet? Pues sí, lo he incluido como ejemplo didáctico si queremos instalar varias aplicaciones (figlet lo único que hace es desplegar por pantalla en grande el texto que le paséis). Notad el estilo de lenguaje Python en [‘figlet’, ‘pandorafms-agent’, ‘curl’]. Esto ha evolucionado en Ansible (se hacía de otra manera, con un ciclo) ya que nos disminuye la cantidad de comandos nuevos para aprender.
Fijaos que update_cache=no ordena no actualizar el catálogo de paquetes, lo cual ahorra algo de tiempo; state=latest establece descargar la última versión registrada en los repositorios de la distro Linux utilizada… Lamentablemente esto no depende totalmente de Pandora FMS, pero la empresa Canonical, creadora de Ubuntu, ofrece una alternativa: los Archivos de Paquetes Personales o Personal Package Archive (PPA), lo que nos lleva al próximo Módulo (ANS).
Módulo (ANS) command
Para continuar con esta prueba conceptual, imaginemos que nos registramos en la página Launchpad que Canonical mantiene en línea: obtendremos hasta 2 gigabytes de almacenamiento para nuestro código fuente (no acepta código binario) y obtenemos nuestro propio «nombre» para compartir nuestro trabajo. Un ejemplo concreto son los utilitarios del Sr. Lorenzo Carbonell, cuyo «nombre», bien fácil de recordar, es ppa:atareao/atareao ¿Cómo introduciríamos este repositorio personal en nuestra lista de repositorios? Para ello usamos el Módulo (ANS) command:
# file apt_add_repository_ppa_atareao.yaml
---
- hosts: pandora_fms_group
become: yes
tasks:
- name: add a ppa repository if running Debian
command: add-apt-repository ppa:atareao/atareao -y
when: ansible_os_family == "Debian"
- name: apt update for new ppa repository
apt: update_cache=yes
Consideraciones:
- Sí, existen otros Módulos (ANS) más adecuados para realizar este trabajo.
- Si os decidís a trabajar en ambiente MS Windows® existe el comando win_command (generalmente tiene el prefijo win_) y, por supuesto, debéis pasar un comando válido en ese ambiente. Revisad más detalles para ese SO en este enlace.
- ¿Recuerdan Hechos (ANS)? Como se ejecuta por defecto y de primero, podemos colocar un condicional when: para estar seguros de que estamos en Debian (Ubuntu, Lubuntu, etc.).
- La siguiente tarea es actualizar el catálogo de paquetes. ¿Por qué la agrego si junto con el parámetro -y puedo agregar -u? Porque allí podemos colocar otro condicional, pues si se agregó el ppa, actualizar entonces.
Si os percatasteis, o no, en el ejemplo del Módulo (ANS) apt coloqué curl para ser instalado: podremos descargar con él la última versión de Agente Software (PFMS) en formato .deb:
curl -o https://sourceforge.net/projects/pandora/files/Pandora%20FMS%207.0NG/747/Debian_Ubuntu/pandorafms.agent_unix_7.0NG.747.deb/download
dpkg -i pandorafms.agent_unix_7.0NG.747.deb
Desde luego que con los comandos de Ansible; justo ahora la versión es 747 pero colocad 7XX a medida que liberemos nuevas versiones Debian/Ubuntu. Como ven el inicio de este trabajo es de manera manual pero la instalación se hará de manera masiva.
Módulo (ANS) inline
Permite cambiar una línea específica en un fichero, generalmente de configuración, si coincide con el criterio de búsqueda. Como ya tenemos el Agente Software (PFMS) instalado, este trae establecido localhost, así que le colocaremos en este ejemplo 192.168.1.107 (nuestro servidor PFMS).
# file pandora_agent_conf_data_server_ip.yaml
---
- hosts: pandora_fms_group
become: yes
tasks:
- name: Set data server ip for pandorafms agent daemon
lineinfile:
path: /etc/pandorafms/pandora_agent.conf
regexp: '^server_ip'
line: server_ip 192.168.1.107
Aquí pisamos terreno escabroso: las expresiones regulares o regex: si la línea comienza con server_ip, modificar. Para estar seguros podemos usar la opción backup: yes; existen muchos otros parámetros que harían este artículo interminable. Alegraos mientras tanto con el siguiente chascarrillo gráfico:
De la misma manera podemos cambiar, de ser muy necesario, el valor del server_port (41121 por defecto); con otros Módulos (ANS) podremos abrir ese puerto en el muro de fuego llamado Ubuntu Fire Wall (ufw) o cualquier otro que usemos.
Módulo (ANS) service
Una vez que tengamos instalado y configurado nuestro Agente Software (PFMS) podremos detener, iniciar o reiniciar (o cualquier otro servicio) con service:
# file pandora_agent_daemon_started.yaml
---
- hosts: pandora_fms_group
become: yes
tasks:
- name: Start service pandora_agent_daemon, if not started
service:
stated: started
Los otros valores posibles para stated son stopped (si está corriendo el servicio lo aplica), restarted y reloaded (siempre se ejecutan).
Más allá de los Agentes Software (PFMS)
Existe un Módulo (ANS) llamado ping -la piedra angular de la monitorización- que hace eso y, simplemente, devuelve un pong como respuesta positiva.
Como dije hay infinidad de Módulos (ANS) y es imposible cubrirlos todos hoy, pero el saber no ocupa espacio si lo acomodamos bien en nuestro cerebro. Dicho esto, quiero ir incluso más allá: ¿Qué les parece si el Ansible en sí mismo lo convertimos en un Agente Software (PFMS)? (Mi pregunta retórica).
Un camino que podemos allanar -en sentido figurado- es por medio de la API de Pandora FMS, teniendo en cuenta lo siguiente:
- La seguridad primero; nuestro servidor Pandora FMS no aceptará órdenes a la API si nuestro Nodo Controlador (ANS), su dirección IP, no está registrada debidamente.
- Queda de nuestra parte agregar programas, como por ejemplo fail2ban, para bloquear ataques. Se reconoce como un ataque por la mera dirección IP de donde viene (ver punto anterior).
- Además debe venir con las credenciales de un usuario registrado, también autorizado para la tarea. Queda de nuestra parte adquirir certificados digitales para cifrar nuestras comunicaciones; esto también es válido para el protocolo Tentacle y sus Agentes Software (PFMS).
- Debemos cumplir con todas y cada una de las reglas de la API. A este ejemplo en lenguaje Python bien podemos agregar código que maneje Ansible y tender un puente de datos.
- Una vez cumplido todo esto, los datos que pasemos se convertirán en formato XML que se pasará a nuestro Data Server (PFMS) pero sin garantía alguna de que sean procesados y asimilados. ¿Por qué?
- Porque debemos encaminar a Módulos (PFMS) específicos y datos específicos al mismo (si es numérico será solo números, si pasamos una sola letra casca el asunto).
No os desaniméis, no. ¡Todo esto ya se encuentra resuelto (y con interfaz gráfica) en la versión Enterprise de Pandora FMS!
Antes de despedirnos, recuerda que Pandora FMS es un software de monitorización flexible, capaz de monitorizar dispositivos, infraestructuras, aplicaciones, servicios y procesos de negocio.
¿Quieres conocer mejor qué es lo que Pandora FMS puede ofrecerte? Descúbrelo entrando aquí.
Si tienes que monitorizar más de 100 dispositivos también puedes disfrutar de una DEMO GRATUITA de 30 días de Pandora FMS Enterprise. Consíguela aquí.
Por último, recuerda que si cuentas con un número reducido de dispositivos para monitorizar puedes utilizar la versión OpenSource de Pandora FMS. Encuentra más información aquí.
No dudes en enviar tus consultas. ¡El equipo que se encuentra detrás de Pandora FMS estará encantado de atenderte!
Programador desde 1993 en KS7000.net.ve (desde 2014 soluciones en software libre para farmacias comerciales en Venezuela). Escribe regularmente para Pandora FMS y ofrece consejos en el foro. También colaborador entusiasta en Wikipedia y Wikidata. Machacador de hierros en gimnasios y cuando puede se ejercita en ciclismo también. Fanático de la ciencia ficción. Programmer since 1993 in KS7000.net.ve (since 2014 free software solutions for commercial pharmacies in Venezuela). He writes regularly for Pandora FMS and offers advice in the forum. Also an enthusiastic contributor to Wikipedia and Wikidata. Crusher of irons in gyms and when he can he exercises in cycling as well. Science fiction fan.