Evalúe el consumo de recursos con los complementos de devolución de llamada de Ansible

Puedes usar Ansible Complementos de devolución de llamada para obtener información detallada sobre las métricas de sus libros de jugadas y el consumo de recursos de la máquina. Tener este conocimiento y las herramientas asociadas puede ser muy útil para solucionar problemas y obtener una comprensión más profunda de los complementos de Ansible.

Mi artículo anterior establece el entorno y los componentes necesarios, y este artículo cubre la ejecución de pruebas del libro de jugadas utilizando complementos de devolución de llamada.

Índice

    Descripción de los complementos de devolución de llamada de Ansible

    ¿Qué son los complementos de devolución de llamada de Ansible? De acuerdo a Documentación:

    Los complementos de devolución de llamada le permiten agregar nuevos comportamientos a Ansible al responder a eventos. De forma predeterminada, los complementos de devolución de llamada controlan la mayoría de los resultados que ve cuando ejecuta programas de línea de comandos, pero también se pueden usar para agregar resultados adicionales, integrarlos con otras herramientas y agrupar eventos en un backend de almacenamiento.

    Elegante, ¿verdad?

    Puede obtener más información sobre los complementos de devolución de llamada disponibles ejecutando el ansible-doc -t callback -l pedido:

    $ ansible-doc -t callback -l
    
    [...]
    cgroup_memory_recap  Profiles maximum memory usage of tasks and full execution using cgroups
    cgroup_perf_recap    Profiles system activity of tasks and full execution using cgroups
    [...]

    La documentación oficial explica estos dos complementos, que son el tema de este artículo:

    • cgroup_memory_recap: Este es un complemento de devolución de llamada de Ansible que perfila el uso máximo de memoria de Ansible y tareas individuales y muestra un resumen al final usando cgroups.
    • cgroup_perf_recap: Este es un complemento de devolución de llamada de Ansible que usa cgroups para perfilar la actividad del sistema de Ansible y las tareas individuales y mostrar un resumen cuando el libro de jugadas termina de ejecutarse.

    Ejecute el siguiente comando para mostrar información útil sobre los parámetros aceptables para cada complemento. En este articulo, servera es su estación de trabajo, y serverb es un host mantenido con Ansible.

    [servera]$ ansible-doc --type callback cgroup_memory_recap
    
    [...]
    = cur_mem_file
            Path to `memory.usage_in_bytes' file. Example `/sys/fs/cgroup/memory/ansible_profile/memory.usage_in_bytes'
    [...]
    = max_mem_file
            Path to cgroups `memory.max_usage_in_bytes' file. Example
            `/sys/fs/cgroup/memory/ansible_profile/memory.max_usage_in_bytes'
    [...]
    NOTES:
          * Requires ansible to be run from within a cgroup, such as with `cgexec -g memory:ansible_profile ansible-
            playbook ...'
          * This cgroup should only be used by ansible to get accurate results
          * To create the cgroup, first use a command such as `sudo cgcreate -a ec2-user:ec2-user -t
            ec2-user:ec2-user -g memory:ansible_profile'
    
    REQUIREMENTS:  whitelist in configuration, cgroups
    [...]
    
    [servera]$ ansible-doc -t callback cgroup_perf_recap
    
    [...]
    = control_group
            Name of cgroups control group
    [...]
    NOTES:
          * Requires ansible to be run from within a cgroup, such as with `cgexec -g
            cpuacct,memory,pids:ansible_profile ansible-playbook ...'
          * This cgroup should only be used by ansible to get accurate results
          * To create the cgroup, first use a command such as `sudo cgcreate -a ec2-user:ec2-user -t
            ec2-user:ec2-user -g cpuacct,memory,pids:ansible_profile'
    
    REQUIREMENTS:  whitelist in configuration, cgroups

    Dado que ambos complementos requieren cgroups, instale el libcgroup-tools paquete, que proporciona interfaz de usuario y soporte para esta funcionalidad del núcleo:

    [servera]$ sudo dnf install -y libcgroup-tools
    [...]
    Installed:
      libcgroup-0.41-19.el8.x86_64
      libcgroup-tools-0.41-19.el8.x86_64

    Usar complementos de devolución de llamada

    Para usar estos complementos mientras se ejecuta el libro de jugadas, realice algunos ajustes en el ansible.cfg archivo para establecer el callback_whitelist y los ajustes necesarios para ambos. Así es como se ve el archivo de configuración después de estos ajustes:

    [servera]$ cat ansible.cfg
    
    [defaults]
    inventory=hosts
    remote_user=alexon
    callback_whitelist=timer, profile_tasks, profile_roles, cgroup_perf_recap, cgroup_memory_recap
    
    [callback_cgroup_perf_recap]
    control_group=ansible_profile
    
    [callback_cgroupmemrecap]
    cur_mem_file = /sys/fs/cgroup/memory/ansible_profile/memory.usage_in_bytes
    max_mem_file = /sys/fs/cgroup/memory/ansible_profile/memory.max_usage_in_bytes
    
    [privilege_escalation]
    become=True
    become_method=sudo
    become_user=root
    become_ask_pass=False

    Ahora casi todo está en su lugar. Para ejecutar el libro de jugadas y obtener estadísticas de uso de memoria y CPU por tarea de Ansible, primero cree un cgroup desde el cual ejecutar el libro de jugadas y luego especifique los controladores para el cgroup, de la siguiente manera:

    [servera]$ sudo cgcreate 
    -a alexon:alexon 
    -t alexon:alexon 
    -g cpuacct,memory,pids:ansible_profile

    ¡Por fin ha llegado la parte más esperada! Para habilitar los complementos de devolución de llamada mientras el libro de jugadas se está ejecutando para las estadísticas, los libros de jugadas deben ejecutarse desde dentro del grupo. Recuerda que creaste el deploy-webserver.yml y remove-webserver.yml libros de jugadas en el primer artículo.

    [ Learn what's new in Red Hat Ansible Automation Platform 2. ]

    Primero, active el complemento con el deploy-webserver.yml libro de jugadas:

    [servera]$ cgexec -g cpuacct,memory,pids:ansible_profile ansible-playbook deploy-webserver.yml
    
    PLAY [Demo playbook to test callback plugin - Deployment] *******************************************************************************************
    
    TASK [Gathering Facts] ******************************************************************************************************************************
    Monday 27 September 2021  10:21:53 -0400 (0:00:00.026)       0:00:00.026 ******
    Monday 27 September 2021  10:21:53 -0400 (0:00:00.026)       0:00:00.026 ******
    ok: [serverb]
    
    TASK [Install httpd package] ************************************************************************************************************************
    Monday 27 September 2021  10:21:56 -0400 (0:00:02.838)       0:00:02.864 ******
    Monday 27 September 2021  10:21:56 -0400 (0:00:02.838)       0:00:02.864 ******
    changed: [serverb]
    
    TASK [Start and enable httpd service] ***************************************************************************************************************
    Monday 27 September 2021  10:22:19 -0400 (0:00:22.877)       0:00:25.742 ******
    Monday 27 September 2021  10:22:19 -0400 (0:00:22.877)       0:00:25.742 ******
    changed: [serverb]
    
    TASK [Create a custom index.html file] **************************************************************************************************************
    Monday 27 September 2021  10:22:21 -0400 (0:00:01.957)       0:00:27.700 ******
    Monday 27 September 2021  10:22:21 -0400 (0:00:01.957)       0:00:27.700 ******
    ok: [serverb]
    
    PLAY RECAP ******************************************************************************************************************************************
    serverb                    : ok=4    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
    
    
    CGROUP MEMORY RECAP *********************************************************************************************************************************
    Execution Maximum: 83.96MB
    
    Gathering Facts (5254009f-a4cd-6e20-f7d9-00000000000e): 78.97MB
    Install httpd package (5254009f-a4cd-6e20-f7d9-000000000008): 80.52MB
    Start and enable httpd service (5254009f-a4cd-6e20-f7d9-000000000009): 83.93MB
    Create a custom index.html file (5254009f-a4cd-6e20-f7d9-00000000000a): 83.21MB
    
    CGROUP PERF RECAP ***********************************************************************************************************************************
    Memory Execution Maximum: 83.96MB
    cpu Execution Maximum: 97.67%
    pids Execution Maximum: 11.00
    
    memory:
    Gathering Facts (5254009f-a4cd-6e20-f7d9-00000000000e): 77.77MB
    Install httpd package (5254009f-a4cd-6e20-f7d9-000000000008): 80.50MB
    Start and enable httpd service (5254009f-a4cd-6e20-f7d9-000000000009): 82.68MB
    Create a custom index.html file (5254009f-a4cd-6e20-f7d9-00000000000a): 82.37MB
    
    cpu:
    Gathering Facts (5254009f-a4cd-6e20-f7d9-00000000000e): 79.50%
    Install httpd package (5254009f-a4cd-6e20-f7d9-000000000008): 81.02%
    Start and enable httpd service (5254009f-a4cd-6e20-f7d9-000000000009): 97.67%
    Create a custom index.html file (5254009f-a4cd-6e20-f7d9-00000000000a): 76.24%
    
    pids:
    Gathering Facts (5254009f-a4cd-6e20-f7d9-00000000000e): 9.00
    Install httpd package (5254009f-a4cd-6e20-f7d9-000000000008): 10.00
    Start and enable httpd service (5254009f-a4cd-6e20-f7d9-000000000009): 10.00
    Create a custom index.html file (5254009f-a4cd-6e20-f7d9-00000000000a): 11.00
    
    Monday 27 September 2021  10:22:22 -0400 (0:00:01.268)       0:00:28.969 ******
    ===============================================================================
    dnf -------------------------------------------------------------------- 22.88s
    gather_facts ------------------------------------------------------------ 2.84s
    service ----------------------------------------------------------------- 1.96s
    copy -------------------------------------------------------------------- 1.27s
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    total ------------------------------------------------------------------ 28.94s
    Monday 27 September 2021  10:22:22 -0400 (0:00:01.268)       0:00:28.968 ******
    ===============================================================================
    Install httpd package ----------------------------------------------------------------------------------------------------------------------- 22.88s
    Gathering Facts ------------------------------------------------------------------------------------------------------------------------------ 2.84s
    Start and enable httpd service --------------------------------------------------------------------------------------------------------------- 1.96s
    Create a custom index.html file -------------------------------------------------------------------------------------------------------------- 1.27s
    Playbook run took 0 days, 0 hours, 0 minutes, 28 seconds

    Observe la cantidad de información que se muestra. Puede determinar cuántos recursos consumió cada tarea y cuánto tiempo llevó cada una. ¡Es increíble! Para asegurarse de que el servidor web funciona correctamente, utilice curl para ver la página principal:

    [servera]$ curl -s http://serverb/index.html
    
    Enable SysAdmin Demo:
    Ansible Profiling with Callback Plugin
    Custom Web Page

    ¡Está vivo (juego de palabras intencionado)! Luego obtenga estadísticas para eliminar el servicio httpd de la máquina de destino ejecutando el remove-webserver.yml libro de jugadas:

    [servera]$ cgexec -g cpuacct,memory,pids:ansible_profile ansible-playbook remove-webserver.yml
    
    PLAY [Demo playbook to test callback plugin - Remove] ***********************************************************************************************
    
    TASK [Gathering Facts] ******************************************************************************************************************************
    Monday 27 September 2021  10:25:16 -0400 (0:00:00.025)       0:00:00.025 ******
    Monday 27 September 2021  10:25:16 -0400 (0:00:00.024)       0:00:00.024 ******
    ok: [serverb]
    
    TASK [Stop and disable httpd service] ***************************************************************************************************************
    Monday 27 September 2021  10:25:17 -0400 (0:00:01.669)       0:00:01.695 ******
    Monday 27 September 2021  10:25:17 -0400 (0:00:01.670)       0:00:01.694 ******
    changed: [serverb]
    
    TASK [Remove httpd package] ************************************************************************************************************************
    Monday 27 September 2021  10:25:19 -0400 (0:00:02.093)       0:00:03.788 ******
    Monday 27 September 2021  10:25:19 -0400 (0:00:02.093)       0:00:03.787 ******
    changed: [serverb]
    
    PLAY RECAP ******************************************************************************************************************************************
    serverb                    : ok=3    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
    
    
    CGROUP MEMORY RECAP *********************************************************************************************************************************
    Execution Maximum: 82.04MB
    
    Gathering Facts (5254009f-a4cd-05bf-a1a8-00000000000d): 78.05MB
    Stop and disable httpd service (5254009f-a4cd-05bf-a1a8-000000000008): 81.98MB
    Remove httpd package (5254009f-a4cd-05bf-a1a8-000000000009): 80.35MB
    
    CGROUP PERF RECAP ***********************************************************************************************************************************
    Memory Execution Maximum: 82.04MB
    cpu Execution Maximum: 87.04%
    pids Execution Maximum: 10.00
    
    memory:
    Gathering Facts (5254009f-a4cd-05bf-a1a8-00000000000d): 76.88MB
    Stop and disable httpd service (5254009f-a4cd-05bf-a1a8-000000000008): 80.91MB
    Remove httpd package (5254009f-a4cd-05bf-a1a8-000000000009): 80.20MB
    
    cpu:
    Gathering Facts (5254009f-a4cd-05bf-a1a8-00000000000d): 87.04%
    Stop and disable httpd service (5254009f-a4cd-05bf-a1a8-000000000008): 82.20%
    Remove httpd package (5254009f-a4cd-05bf-a1a8-000000000009): 80.81%
    
    pids:
    Gathering Facts (5254009f-a4cd-05bf-a1a8-00000000000d): 9.00
    Stop and disable httpd service (5254009f-a4cd-05bf-a1a8-000000000008): 10.00
    Remove httpd package (5254009f-a4cd-05bf-a1a8-000000000009): 10.00
    
    Monday 27 September 2021  10:25:35 -0400 (0:00:15.336)       0:00:19.124 ******
    ===============================================================================
    dnf -------------------------------------------------------------------- 15.34s
    service ----------------------------------------------------------------- 2.09s
    gather_facts ------------------------------------------------------------ 1.67s
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    total ------------------------------------------------------------------ 19.10s
    Monday 27 September 2021  10:25:35 -0400 (0:00:15.336)       0:00:19.124 ******
    ===============================================================================
    Remove httpd package ----------------------------------------------------------------------------------------------------------------------- 15.34s
    Stop and disable httpd service --------------------------------------------------------------------------------------------------------------- 2.09s
    Gathering Facts ------------------------------------------------------------------------------------------------------------------------------ 1.67s
    Playbook run took 0 days, 0 hours, 0 minutes, 19 seconds

    Para confirmar que el libro de jugadas se ejecutó correctamente, verifique que el servidor web ya no esté activo:

    [servera]$ curl -s http://serverb/index.html
    
    [servera]$ curl -v http://serverb/index.html
    
    *   Trying 192.168.1.14...
    * TCP_NODELAY set
    * connect to 192.168.1.14 port 80 failed: Connection refused
    * Failed to connect to serverb port 80: Connection refused
    * Closing connection 0
    curl: (7) Failed to connect to serverb port 80: Connection refused

    Y así, obtiene información detallada mientras ejecuta los libros de jugadas de Ansible, lo que genera entradas más productivas para sus tareas diarias. Y lo mejor es que también puede explorar otros complementos de devolución de llamada disponibles que se pueden usar con Ansible Tower. Este es un tema para otro artículo.

    Envoltura

    Las salidas predeterminadas de los comandos ad hoc y los playbooks de Ansible están destinados a ser simples y limpios. Sin embargo, cuando necesita métricas y estadísticas posteriores a la ejecución, los complementos de devolución de llamada son útiles para explorar esta información y ayudar en la resolución de problemas.

    Estos artículos proporcionan una demostración básica de cómo funcionan los complementos de devolución de llamada de Ansible. La primera parte establece el entorno y las utilidades necesarias. La segunda parte cubre el uso de dos de estos complementos para perfilar la actividad del sistema y el uso máximo de memoria por tareas y la ejecución completa usando grupos de control. Ahora que sabes cómo hacerlo, ¡úsalo sabiamente!

    Artículos de interés

    Deja una respuesta

    Tu dirección de correo electrónico no será publicada.

    Subir