¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
  1. Libros
  2. Ansible
  3. Salida Ansible y centralización de registros
Extrait - Ansible Administre la configuración de sus servidores y el despliegue de sus aplicaciones
Extractos del libro
Ansible Administre la configuración de sus servidores y el despliegue de sus aplicaciones Volver a la página de compra del libro

Salida Ansible y centralización de registros

Objetivos del capítulo y requisitos

1. Contexto y requisitos

Hasta ahora, siempre ha usado Ansible con su configuración por defecto en lo que respecta el retorno de los mensajes. Es posible personalizar estos retornos y enviarlos a un mecanismo de centralización de registros (syslog, Elasticsearch, etc.).

Para ello, les serán mostrados los campos disponibles en la configuración de Ansible así como el mecanismo de los callbacks de visualización. Verá especialmente un cierto número de callbacks listos para ser usados: algunos le permitirán tener un resumen del tiempo de ejecución mientras que otros centralizarán los resultados de las ejecuciones. La herramienta ARA (Ansible Run Analytics) le será presentada para centralizar y restituir las ejecuciones de playbooks de Ansible.

En el caso de que los plugins existentes no sean suficientes, se abordará la escritura de un plugin específico.

2. Archivos para descargar

Puede encontrar los ejemplos en el archivo comprimido capitulo-11.tar.gz que se encuentra en la página del libro en el sitio de Ediciones ENI.

Gestión del retorno estándar de Ansible

1. Contexto

Antes de presentarle el mecanismo de los callbacks, verá lo que se puede hacer con el retorno estándar de Ansible. Con respecto al retorno estándar, se tratarán los aspectos siguientes:

  • Añadir un poco de fantasía al retorno de los comandos con el uso de cowsay.

  • Gestión del color del retorno estándar.

2. Archivo de configuración y cowsay

En el caso de que disponga del binario cowsay en la máquina que ejecuta Ansible, este último será usado por defecto para mostrar los resultados de los playbooks ejecutados.

He aquí un pequeño ejemplo del retorno que podemos obtener:

ok: [haproxy1] 
_____________________________________________________________ 
< TASK [mediawiki/haproxy : enable and start haproxy service] > 
------------------------------------------------------------- 
       \   ^__^ 
        \  (oo)\_______ 
           (__)\       )\/\ 
               ||----w | 
               ||     || 

Se puede configurar la forma del retorno de cowsay usando uno de tantos temas que posee. Para ello tiene que usar la variable ANSIBLE_COW_SELECTION. He aquí un ejemplo de resultado usando el tema turkey (export ANSIBLE_COW_SELECTION=turkey):

ok: [haproxy1] 
_____________________________________________________________ 
< TASK [mediawiki/haproxy : enable and start haproxy service] > 
------------------------------------------------------------- 
 \                                  ,+*^^*+___+++_ ...

Gestión del callback de visualización

1. Contexto

Vio el caso particular de Cowsay y de la gestión de los colores. Ansible contiene numerosos callbacks de visualización. En las líneas siguientes verá cómo cambiarlos.

Como para Cowsay, se puede utilizar el archivo de configuración o una variable de entorno:

  • campo stdout_callback en el archivo de configuración;

  • variable de entorno ANSIBLE_STDOUT_CALLBACK.

Estas variables de entorno no siempre están todas bien documentadas. Para tener una lista exhaustiva, puede consultar el contenido del archivo constants.py que se encuentra en la raíz de los archivos de Ansible para las versiones 2.3.x y anteriores, o config/data/config.yml para las versiones 2.4.x y posteriores.

Como siempre, haga sus tests con la variable de entorno. Una vez que haya encontrado la configuración que le convenga, hágala fija en el archivo de configuración. 

2. Algunos plugins alternativos de visualización

Cuando se ejecutan tareas de un playbook, cada una será indicada usando la forma siguiente:

  • Nombre de la tarea lanzada.

  • Una línea por cada tarea lanzada y por cada máquina, un resultado de la ejecución. 

  • Un resumen de las operaciones.

Se puede reducir el retorno usando el plugin dense. Este último solamente mostrará una línea con el nombre del playbook ejecutado seguido por las operaciones que estén siendo ejecutadas.

He aquí un ejemplo de lanzamiento cuando exporta...

Centralización de los registros de ejecución

1. Contexto

En el caso de un despliegue inicial de Ansible, posiblemente no necesitará centralizar las operaciones ejecutadas. Sin embargo, cuando tenga decenas de instalaciones ejecutadas sobre miles de máquinas en un servicio de decenas de personas, quizá necesite tener información de lo que está pasando.

En este caso, de nuevo Ansible propone distintas soluciones por defecto. Hay dos que le permitirán centralizar los registros simplemente:

  • el callback syslog_json;

  • el callback logstash.

Estudiará el callback Ara para descubrir una solución más avanzada.

Estos son los consejos que le brinda este libro, siempre podrá elegir otra solución. No dude en investigar para conocer otras soluciones disponibles; la comunidad Ansible es muy activa.

Si no encontrara una solución satisfactoria, siempre podrá escribir su propio callback que responderá a sus necesidades.

2. Centralización de registros usando Syslog

Una manera tradicional de centralizar registros es utilizar el mecanismo Syslog de Unix. Este servicio lo ofrece rsyslog y el puerto de escucha es 514 en modo UDP.

Para abrir la comunicación entre Ansible y Syslog, tendrá que:

  • exportar la variable ANSIBLE_CALLBACK_WHITELIST con el valor syslog_json;

  • exportar la(s) variable(s) SYSLOG_SERVER, SYSLOG_PORT y SYSLOG_ FACILITY.

Si no exporta las variables con prefijo SYSLOG_, los registros serán enviados por defecto al servidor localhost, al puerto 514 y el retorno será LOG_USER

Aquí abajo tiene un ejemplo de ejecución del playbook install-mariadb.yml en el inventario wiki.inv:

$ export ANSIBLE_CALLBACK_WHITELIST=syslog_json 
$ export SYSLOG_SERVER=localhost 
$ ansible-playbook -i wiki.inv install-mariadb.yml 

No hay ningún cambio en el resultado de la ejecución de Ansible. Sin embargo, debería ver aparecer registros en el archivo /var/log/syslog.

He aquí un extracto de los mensajes que debería ver:

Aug 14 13:31:37 trabajo ansible-command: task execution OK; host:  
mysql1; message: {"changed": false, "msg": "", "rc": 0, "results": 
["mariadb-server-1:5.5.52-1.el7.x86_64 providing mariadb-server 
is already installed", "MySQL-python-1.2.5-1.el7.x86_64 providing 
MySQL-python...

Escritura de un callback de visualización

1. Contexto

Ya ha visto las soluciones disponibles en Ansible así como las de la comunidad, pero desafortunadamente no ha encontrado una solución adaptada a su situación.

En este caso, deberá proceder a la escritura de su propio callback. Se trata, básicamente, de un programa en Python. Deberá tener algunas nociones sobre programación en Python y sobre el uso de las nociones objeto de este lenguaje.

2. Estructura del programa

Antes de ver cómo usar el callback en Ansible, debe descubrir la estructura de este pequeño programa.

 En primer lugar necesitará un encabezado Python con el emplazamiento del intérprete de Python y una indicación sobre el código del archivo.

He aquí las dos líneas de ese encabezado:

#!/usr/bin/python3 
# -*- coding: utf-8 -*- 

 Para hacer funcionar las bibliotecas Ansible necesitará hacer algunas importaciones debido a la compatibilidad de Python 2 y 3.

He aquí las declaraciones que tendrá que realizar:

# Make coding more python3-ish 
from __future__ import (absolute_import, division, print_function) 
__metaclass__ = type 

El callback deberá declarar una clase CallbackModule. También tendrá que heredar la clase CallbackModule del paquete ansible.plugins.callback.default.

 Para evitar este problema, tiene que importar CallbackModule y usar un nombre diferente (ejemplo: CallbackModule_default). La instrucción de importación que le permitirá realizar esta operación es:

from ansible.plugins.callback.default import CallbackModule as  
CallbackModule_default 

 Ahora tiene que declarar la clase CallbackModule que hereda de CallbackModule_default. Solamente declarará en el código de la clase los campos CALLBACK_VERSION con el valor 2.0 y CALLBACK_NAME con el nombre del callback.

He aquí el código correspondiente a esta clase:

# This callback inherit from default callback 
class CallbackModule(CallbackModule_default):* 
   CALLBACK_VERSION = 2.0 
   CALLBACK_NAME = 'test' 

3. Exposición del callback a Ansible

Acaba de escribir su primer callback. Ahora tiene que exponerlo al motor de Ansible.

 Lo primero que tiene que hacer es guardarlo en un archivo al que Ansible pueda acceder. Para hacer...