Como hacer un Análisis de Canario con Kayenta

October 08, 2021
Redactado por
Ismael Hernández Muñoz
Colaborador
Las opiniones expresadas por los colaboradores de Twilio son propias
Revisado por
Lina Calderón
Colaborador
Las opiniones expresadas por los colaboradores de Twilio son propias

Un Canary Deployment o despliegue de canario es una estrategia de despliegue de software usada para reducir el riesgo de desplegar una nueva versión de una aplicación o servicio en producción. La nueva versión, llamada canario, se distribuye inicialmente a un subconjunto de los usuarios.

La aplicación es monitoreada en busca de errores u otras anomalías que puedan haber sido introducidas por la nueva versión del software y, si ninguna se detecta, entonces la nueva versión puede ser distribuida al resto de la infraestructura para que sea visible por todos los usuarios. Este proceso se explica con el siguiente diagrama:

diagram demonstrating the differences between software versions for two test groups

Sin embargo, el monitoreo requerido para determinar si una nueva versión puede ser distribuida a todos puede ser difícil. Para estar seguros de que los nuevos cambios no introducen ningún problema, los desarrolladores deben analizar métricas como el uso de recursos del sistema, la latencia, o errores de la aplicación.

Las métricas producidas por la versión canario se comparan con la versión anterior en busca de diferencias significativas entre ellas. Este proceso de monitoreo y análisis puede requerir mucho tiempo, además de ser propenso a errores humanos.

Aquí es donde Kayenta entra en juego. Kayenta es una herramienta de código abierto desarrollada por Netflix que realiza análisis de canario de forma automatizada. Recoge una lista de métricas producidas por el canario y la versión anterior, y las compara usando métodos estadísticos para obtener un resultado global.

En este artículo aprenderemos cómo automatizar los análisis de canarios usando Kayenta, para hacer los despliegues más rápidos y seguros.

Requisitos previos

Configuración del entorno del proyecto

Para descargar Kayenta, clona el repositorio de Github:

git clone https://github.com/spinnaker/kayenta

También usaremos Referee, una UI para Kayenta. Para descargarlo, clona el repositorio de Github:

git clone https://github.com/Nike-Inc/referee

También será necesario tener una infraestructura con dos servidores para desplegar las dos versiones. Estos servidores pueden ser instancias de  Amazon EC2, por ejemplo. Tus instancias deben tener instalado y configurado el datadog-agent para que puedan emitir métricas a Datadog.

Kayenta Configuration

En primer lugar debemos configurar Kayenta para que sepa donde almacenar los resultados y que tipo de métricas debe analizar.  Para ello, navega al archivo de configuración que se encuentra en la carpeta kayenta-web/config. Abre el archivo kayenta.yml en un editor de texto. Para habilitar el almacenamiento local, añade las siguientes líneas a la sección de memory del archivo

memory:
    enabled: true
    accounts:
      - name: in-memory-store-account
        supportedTypes:
          - OBJECT_STORE
          - CONFIGURATION_STORE

A continuación añade las siguientes líneas para que Kayenta pueda usar Datadog para obtener las métricas. Asegúrate de usar tus propios valores para la clave API y la application key.

datadog:
    enabled: true
    metadataCachingIntervalMS: 900000
    accounts:
      - name: datadog-account
        apiKey: YOUR_DATADOG_API_KEY
        applicationKey: YOUR_DATADOG_APP_KEY
        supportedTypes:
          - METRICS_STORE
        endpoint.baseUrl: https://app.datadoghq.com

Ejecuta Kayenta y Referee

El siguiente paso es construir y ejecutar Kayenta y Referee.

Para construir Kayenta, ejecuta el siguiente comando en una terminal desde el archivo raíz de Kayenta:

cp kayenta-web/config/kayenta.yml ~/.spinnaker/kayenta.yml
docker-compose up

Para construir Referee, abre una nueva ventana en la terminal, navega al archivo raíz de Referee y ejecuta lo siguiente:

yarn && yarn bootstrap
yarn start

Deberías ver lo siguiente en  http://localhost:3000/:

localhost 3000 displaying the referee dashboard

Empezar un análisis de canario

En este momento ya estamos preparados para empezar un análisis. En la página  http://localhost:3000/, haz clic en Configuration y elige la opción de Create a New Kayenta Canary Config. Seleccione Datadog como el tipo de métricas y da a tu configuración un nombre y una descripción.

screenshot of the referee configuration metadata page

A continuación añadiremos la lista de métricas que queremos analizar.

Haz click en el botón de Add Group para crear un grupo. Los grupos se usan para la puntuación global del análisis y para agrupar tus métricas siguiendo algún criterio.

screenshot of the referee metrics add group section

Ahora, haz click en Add metric y rellena el formulario. En este ejemplo lo rellenamos con Groups con el valor “Grupo demo”,  Name como “Consumo de CPU”, Fail On con el valor “Increase” (esto significa que si los valores del canario aumentan con respecto a la versión anterior, la métrica fallará) y la consulta de Datadog, que para el consumo de CPU es “system.cpu.user”. El valor ${scope} dentro de la consulta se usa a modo de plantilla, que será automáticamente generada por Kayenta durante el análisis.

dashboard to configure metrics for "grupo demo" with the name "consumo de CPU"

Haz click en el botón de Save Metric en la esquina inferior derecha cuando termines.

Una vez que hayas añadido todas las métricas que quieres analizar, da un peso a tus grupos. Puedes pesarlos en base al número de métricas que tenga cada uno, o lo importantes que son. Si tienes múltiples grupos, asegúrate de que suman 100.

screenshot of the referee scoring page

Ahora, haz click en Test Config para avanzar al último paso. Aquí es donde definiremos el alcance del canario y la versión anterior, y la duración del análisis.

Selecciona A-B en testing type para comparar distintos scopes y rellena el formulario. El control scope y experiment scope deben contener la etiqueta usada para identificar los hosts del canario y la versión anterior. En este ejemplo se ha usado la etiqueta host de Datadog.

Introduce la localización de los hosts y dales un tiempo inicial y final al análisis.

screenshot of the referee testing type and scopes page

Haz click en  Run Manual Execution. Los resultados aparecerán en segundos. Como puedes ver en el siguiente ejemplo, el consumo de CPU para el canario y la versión anterior sigue una distribución similar, no hay una pérdida significativa en el rendimiento, por lo que el resultado es Pass.

example analysis of the CPU usage between baseline and canary after running manual execution

Siguientes pasos para análisis de canarios

¡Felicidades en tu primer análisis de canario! Si eres un desarrollador trabajando en servicios o aplicaciones que requieren una disponibilidad muy alta, entonces sabes lo importante que es tener un pipeline de despliegue seguro.

Si te gustaría integrar Kayenta en tus despliegues, o simplemente quieres aprender más, puedes leer este blog de Netflix sobre Análisis de Canarios Automatizado o este artículo en Medium sobre análisis automatizado de canario para despliegue.

Yana Pan happy joy happy dance duck GIF

Ismael Hernández Muñoz es un Software Development Engineer Intern en el equipo de Video. Durante su internship, ayudó a su equipo haciendo sus despliegues más seguros y menos propensos a errores. Le apasiona aprender nuevas tecnologías y crecer como ingeniero. Puede ser contactado a través de LinkedIn.