Logo de Ansible (Wikipedia https://commons.wikimedia.org/wiki/File:Ansible_Logo.png)

Más allá de los Agentes Software: conozcamos Ansible un poco más

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 y para más señas acá 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… ¡ea, venga ya!

Pandora FMS, monitorización con agentes ( https://pandorafms.com/docs/index.php?title=File:Agent-monitoring.png )
Pandora FMS, monitorización con Agentes Software
( https://pandorafms.com/docs/index.php?title=File:Agent-monitoring.png )

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 lo denotaré acá 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, a 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 creado 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 pues 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 a 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.

https://books.google.fr/books?id=D55aAAAAcAAJ&pg=PA72#v=onepage&q&f=false

Ansible comunica de manera cifrada con los Nodos (ANS) por defecto con SSH por lo que debemos utilizar una calve 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 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

How to install a Linux agent in Pandora FMS

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.

Fijaros 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?

Por favor, lea también   Dependencias incumplidas en Ubuntu 18 ("usted ha retenido paquetes rotos")

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 trabajar en ambiente MS Windows® existe el  comando win_command (generalmente tienen 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)? Pues como se ejecuta por defecto y de primero pues podemos colocar un condicional when: para estar seguros que estamos en Debian (Ubuntu, Lubuntu, etcétera).
  • 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 (se los dejo como tarea), 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 masivo.

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

Acá 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:

«Actual Regex to parse Apache logs» (anonymous meme on internet)
«Actual Regex to parse Apache logs» (anonymous meme on internet)
https://twitter.com/ks7000/status/927692550512742402

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), 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 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, pues será solo números, si pasamos una sola letra casca el asunto).

No os desaniméis, no. ¡Todo esto ya se encuentra resuelto (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í: https://pandorafms.com/es

Si cuentas con más de 100 dispositivos para monitorizar puedes contactar con nosotros a través del siguiente formulario: https://pandorafms.com/es/contactar/

Además, recuerda que si tus necesidades de monitorización son más limitadas tienes a tu disposición la versión OpenSource de Pandora FMS. Encuentra más información aquí: https://pandorafms.org/es/

No dudes en enviar tus consultas. ¡El equipazo de Pandora FMS estará encantado de atenderte!

.

TítuloEnlace
https://www.cyberciti.biz/faq/how-to-set-up-ssh-keys-on-linux-unix/
https://www.cyberciti.biz/faq/linux-unix-vim-save-and-quit-command/
https://www.ansibletutorials.com/
https://docs.ansible.com/ansible/latest/modules/list_of_monitoring_modules.html
https://docs.ansible.com/ansible/latest/user_guide/intro_dynamic_inventory.html
https://cobbler.github.io/
https://pastebin.com/RhfjrCZv
https://serversforhackers.com/c/an-ansible2-tutorial
https://www.cyberciti.biz/faq/command-to-see-ansible-version-check-on-linux-unix/
https://www.digitalocean.com/community/tutorials/configuration-management-101-writing-ansible-playbooks
https://www.cyberciti.biz/faq/ansible-reboot-debian-ubuntu-linux-for-kernel-update-waitforit/
https://www.cyberciti.biz/faq/how-to-find-out-if-my-ubuntudebian-linux-server-needs-a-reboot/
https://www.cyberciti.biz/faq/how-to-use-ansible-to-autoremove-unwanted-package-dependency-with-apt/
https://www.cyberciti.biz/faq/how-to-set-and-use-sudo-password-for-ansible-vault/
https://docs.ansible.com/ansible/latest/user_guide/vault.html#ansible-vault
https://www.cyberciti.biz/faq/how-to-install-and-configure-latest-version-of-ansible-on-ubuntu-linux/
TítuloEnlace
https://opensource.com/article/19/9/must-know-ansible-modules
https://opensource.com/article/19/2/quickstart-guide-ansible
How do I validate my YAML file from command line?
https://stackoverflow.com/questions/3971822/how-do-i-validate-my-yaml-file-from-command-line
zabbix_action – Create/Delete/Update Zabbix actionshttps://docs.ansible.com/ansible/latest/modules/zabbix_action_module.html#zabbix-action-module
Create Integria Incident Scripthttps://pandorafms.com/library/create-integria-incident-script/
Firefox plugin to see events in realtime, with popup. This uses the API password to connect the server and get the events.https://pandorafms.com/library/firefox-plugin/
Pandora: Documentation es: Anexo API externalhttps://pandorafms.com/docs/index.php?title=Pandora:Documentation_es:Anexo_API_external#set_module_data
Zabbix collection for Ansiblehttps://galaxy.ansible.com/community/zabbix
Configuring SSH server access for Ansible (Erika Heidi)http://www.erikaheidi.com/blog/configuring-ssh-server-access-for-ansible/
Configuracion Agentes - Pandora FMS Wikihttps://pandorafms.com/docs/index.php?title=Pandora:Documentation_es:Configuracion_Agentes
https://www.digitalocean.com/community/tutorial_series/how-to-automate-server-setup-with-ansible
Configuration Management 101: Writing Ansible Playbookshttps://www.digitalocean.com/community/tutorials/configuration-management-101-writing-ansible-playbooks
How To Set Up Ansible Inventorieshttps://www.digitalocean.com/community/tutorials/how-to-set-up-ansible-inventories
Agent:
Home / Pandora FMS 7.0NG / 747 / Debian_Ubuntu
https://sourceforge.net/projects/pandora/files/Pandora%20FMS%207.0NG/747/Debian_Ubuntu/
Configuration Management 101: Writing Ansible Playbookshttps://www.digitalocean.com/community/tutorials/configuration-management-101-writing-ansible-playbooks
How to filter, join and map lists in Ansiblehttps://www.tailored.cloud/devops/how-to-filter-and-map-lists-in-ansible/
Ansible map() not available on el6https://wrightturn.wordpress.com/tag/python-jinja2/
TítuloEnlace