Creación de un experimento de caos que usa un error basado en agente con la CLI de Azure
Puede usar un experimento de caos para comprobar que la aplicación es resistente a los errores provocando esos errores en un entorno controlado. En este artículo, se produce un alto porcentaje de eventos de uso de CPU en una máquina virtual Linux mediante un experimento de caos y Azure Chaos Studio. Ejecutar este experimento le puede ayudar a defenderse ante el hecho de que una aplicación se quede sin recursos.
Estos mismos pasos se pueden usar para configurar y ejecutar un experimento para cualquier error basado en agente. Un error basado en agente requiere la configuración y la instalación del agente de caos. Un error directo de servicio se ejecuta directamente en un recurso de Azure sin necesidad de instrumentación.
Requisitos previos
- Suscripción a Azure. Si no tiene una suscripción a Azure, cree una cuenta gratuita de Azure antes de empezar.
- Una máquina virtual Linux que ejecute un sistema operativo de la lista de compatibilidad de versiones. Si no tiene ninguna máquina virtual, puede crear una.
- Una configuración de red que le permita acceder mediante SSH a su máquina virtual.
- Una identidad administrada asignada por el usuario. Si no tiene ninguna identidad administrada asignada por el usuario, puede crear una.
Apertura de Azure Cloud Shell
Azure Cloud Shell es un shell interactivo gratuito que puede usar para ejecutar los pasos de este artículo. Tiene las herramientas comunes de Azure preinstaladas y configuradas para usarlas en la cuenta.
Para abrir Cloud Shell, seleccione Probarlo en la esquina superior derecha de un bloque de código. También puede abrir Cloud Shell en una pestaña independiente desde Bash. Seleccione Copiar para copiar los bloques de código, péguelos en Cloud Shell y, luego, seleccione Entrar para ejecutarlos.
Si prefiere instalar y usar la CLI en un entorno local, para este tutorial se requiere la versión 2.0.30 de la CLI de Azure o una versión posterior. Ejecute az --version
para encontrar la versión. Si necesita instalarla o actualizarla, vea Instalación de la CLI de Azure.
Nota:
Estas instrucciones usan un terminal de Bash en Azure Cloud Shell. Es posible que algunos comandos no funcionen tal como se describe si la CLI se ejecuta localmente o en un terminal de PowerShell.
Asignación de una identidad administrada a la máquina virtual
Antes de configurar Chaos Studio en la máquina virtual, asigne una identidad administrada asignada por el usuario a cada máquina virtual o conjunto de escalado de máquinas virtuales donde vaya a instalar el agente. Use el comando az vm identity assign
o el comando az vmss identity assign
. Reemplace $VM_RESOURCE_ID
/$VMSS_RESOURCE_ID
por el identificador de recurso de la máquina virtual que va a agregar como destino de caos. Reemplace $MANAGED_IDENTITY_RESOURCE_ID
por el identificador de recurso de la identidad administrada asignada por el usuario.
Máquina virtual
az vm identity assign --ids $VM_RESOURCE_ID --identities $MANAGED_IDENTITY_RESOURCE_ID
Conjunto de escalado de máquina virtual
az vmss identity assign --ids $VMSS_RESOURCE_ID --identities $MANAGED_IDENTITY_RESOURCE_ID
Habilitación de Chaos Studio en una máquina virtual
Chaos Studio no puede insertar errores en una máquina virtual a menos que esa máquina virtual se haya agregado primero a Chaos Studio. Para agregar una máquina virtual a Chaos Studio, cree un destino y funcionalidades en el recurso. A continuación, instale el agente de caos.
Las máquinas virtuales tienen dos tipos de destino. Un tipo de destino habilita los errores directos del servicio (donde no se requiere ningún agente). El otro tipo de destino habilita los errores basados en agente (lo que requiere la instalación de un agente). El agente de caos es una aplicación instalada en la máquina virtual como una extensión de máquina virtual. Se usa para insertar errores en el sistema operativo invitado.
Habilitación del destino y las funcionalidades de caos
A continuación, configure un destino Microsoft-Agent en cada máquina virtual o conjunto de escalado de máquinas virtuales que especifique la identidad administrada asignada por el usuario que el agente usará para conectarse a Chaos Studio. En este ejemplo, usamos una identidad administrada para todas las máquinas virtuales. Se debe crear un destino mediante la API REST. En este ejemplo, se usa el comando az rest
de la CLI para ejecutar las llamadas a la API REST.
Modifique el siguiente código JSON reemplazando
$USER_IDENTITY_CLIENT_ID
por el id. de cliente de la identidad administrada. Encontrará el id. de cliente en la información general de Azure Portal de la identidad administrada asignada por el usuario que creó. Reemplace$USER_IDENTITY_TENANT_ID
por el id. de inquilino de Azure AD. Lo encontrará en Azure Portal en Microsoft Entra ID, Información del inquilino. Guarde el JSON como un archivo en la misma ubicación donde se ejecuta la CLI de Azure. En Cloud Shell, puede arrastrar y colocar el archivo JSON para cargarlo.{ "properties": { "identities": [ { "clientId": "$USER_IDENTITY_CLIENT_ID", "tenantId": "$USER_IDENTITY_TENANT_ID", "type": "AzureManagedIdentity" } ] } }
Cree el destino reemplazando
$RESOURCE_ID
por el id. de recurso de la máquina virtual o el conjunto de escalado de máquinas virtuales de destino. Sustituyatarget.json
por el nombre del archivo JSON que creó en el paso anterior.az rest --method put --uri https://management.azure.com/$RESOURCE_ID/providers/Microsoft.Chaos/targets/Microsoft-Agent?api-version=2023-11-01 --body @target.json --query properties.agentProfileId -o tsv
Si recibe un error de análisis de PowerShell, cambie a un terminal de Bash, como se recomienda para este tutorial, o entrecomille el archivo JSON de referencia con comillas simples (
--body '@target.json'
).Copie el GUID del agentProfileId devuelto por este comando para usarlo en un paso posterior.
Cree las funcionalidades reemplazando
$RESOURCE_ID
por el id. de recurso de la máquina virtual o el conjunto de escalado de máquinas virtuales de destino. Reemplace$CAPABILITY
por el nombre de la funcionalidad de error que va a habilitar (por ejemplo,CPUPressure-1.0
).az rest --method put --url "https://management.azure.com/$RESOURCE_ID/providers/Microsoft.Chaos/targets/Microsoft-Agent/capabilities/$CAPABILITY?api-version=2023-11-01" --body "{\"properties\":{}}"
Por ejemplo, si va a habilitar la funcionalidad de presión de CPU:
az rest --method put --url "https://management.azure.com/subscriptions/b65f2fec-d6b2-4edd-817e-9339d8c01dc4/resourceGroups/myRG/providers/Microsoft.Compute/virtualMachines/myVM/providers/Microsoft.Chaos/targets/Microsoft-Agent/capabilities/CPUPressure-1.0?api-version=2023-11-01" --body "{\"properties\":{}}"
Instalación de la extensión de máquina virtual de Chaos Studio
El agente de caos es una aplicación que se ejecuta en las instancias de máquina virtual o conjunto de escalado de máquinas virtuales para ejecutar errores basados en agente. Durante la instalación, configure lo siguiente:
- Agente con la identidad administrada que el agente debe usar para autenticarse en Chaos Studio.
- Id. de perfil del destino Microsoft-Agent que creó.
- Opcionalmente, una clave de instrumentación de Application Insights que permita al agente enviar eventos de diagnóstico a Application Insights.
Antes de comenzar, asegúrese de que dispone de los siguientes datos:
- agentProfileId: la propiedad devuelta al crear el destino. Si no tiene esta propiedad, puede ejecutar
az rest --method get --uri https://management.azure.com/$RESOURCE_ID/providers/Microsoft.Chaos/targets/Microsoft-Agent?api-version=2023-11-01
y copiar la propiedadagentProfileId
. - ClientId: el id. de cliente de la identidad administrada asignada por el usuario que se usa en el destino. Si no tiene esta propiedad, puede ejecutar
az rest --method get --uri https://management.azure.com/$RESOURCE_ID/providers/Microsoft.Chaos/targets/Microsoft-Agent?api-version=2023-11-01
y copiar la propiedadclientId
. - (Opcionalmente) AppInsightsKey: la clave de instrumentación del componente de Application Insights, que encontrará en la página de Application Insights del portal, en Essentials.
- agentProfileId: la propiedad devuelta al crear el destino. Si no tiene esta propiedad, puede ejecutar
Instale la extensión de máquina virtual de Chaos Studio. Reemplace
$VM_RESOURCE_ID
por el identificador de recurso de la máquina virtual o reemplace$SUBSCRIPTION_ID
,$RESOURCE_GROUP
y$VMSS_NAME
por esas propiedades para el conjunto de escalado de máquinas virtuales. Reemplace$AGENT_PROFILE_ID
por el id. de perfil del agente. Reemplace$USER_IDENTITY_CLIENT_ID
por el id. de cliente de la identidad administrada. Reemplace$APP_INSIGHTS_KEY
por la clave de instrumentación de Application Insights. Si no usa Application Insights, elimine ese par clave/valor.Lista completa de la configuración predeterminada de la extensión de máquina virtual del agente
Esta es la configuración mínima de la extensión de máquina virtual del agente requerida por el usuario:
{ "profile": "$AGENT_PROFILE_ID", "auth.msi.clientid": "$USER_IDENTITY_CLIENT_ID" }
Estos son todos los valores de la configuración de la extensión de máquina virtual del agente:
{ "profile": "$AGENT_PROFILE_ID", "auth.msi.clientid": "$USER_IDENTITY_CLIENT_ID", "appinsightskey": "$APP_INSIGHTS_KEY", "overrides": { "region": string, default to be null "logLevel": { "default" : string , default to be Information }, "checkCertRevocation": boolean, default to be false. } }
Instalación del agente en una máquina virtual
Windows
az vm extension set --ids $VM_RESOURCE_ID --name ChaosWindowsAgent --publisher Microsoft.Azure.Chaos --version 1.1 --settings '{"profile": "$AGENT_PROFILE_ID", "auth.msi.clientid":"$USER_IDENTITY_CLIENT_ID", "appinsightskey":"$APP_INSIGHTS_KEY","Overrides":{"CheckCertRevocation":true}}'
Linux
az vm extension set --ids $VM_RESOURCE_ID --name ChaosLinuxAgent --publisher Microsoft.Azure.Chaos --version 1.0 --settings '{"profile": "$AGENT_PROFILE_ID", "auth.msi.clientid":"$USER_IDENTITY_CLIENT_ID", "appinsightskey":"$APP_INSIGHTS_KEY","Overrides":{"CheckCertRevocation":true}}'
Instalación del agente en un conjunto de escalado de máquinas virtuales
Windows
az vmss extension set --subscription $SUBSCRIPTION_ID --resource-group $RESOURCE_GROUP --vmss-name $VMSS_NAME --name ChaosWindowsAgent --publisher Microsoft.Azure.Chaos --version 1.1 --settings '{"profile": "$AGENT_PROFILE_ID", "auth.msi.clientid":"$USER_IDENTITY_CLIENT_ID", "appinsightskey":"$APP_INSIGHTS_KEY","Overrides":{"CheckCertRevocation":true}}'
Linux
az vmss extension set --subscription $SUBSCRIPTION_ID --resource-group $RESOURCE_GROUP --vmss-name $VMSS_NAME --name ChaosLinuxAgent --publisher Microsoft.Azure.Chaos --version 1.0 --settings '{"profile": "$AGENT_PROFILE_ID", "auth.msi.clientid":"$USER_IDENTITY_CLIENT_ID", "appinsightskey":"$APP_INSIGHTS_KEY","Overrides":{"CheckCertRevocation":true}}'
Si configura un conjunto de escalado de máquinas virtuales, compruebe que las instancias se hayan actualizado al modelo más reciente. Si es necesario, actualice todas las instancias del modelo.
az vmss update-instances -g $RESOURCE_GROUP -n $VMSS_NAME --instance-ids *
Creación de un experimento
Después de implementar correctamente la máquina virtual, puede crear el experimento. Un experimento de caos define las acciones que se desean realizar en los recursos de destino. Las acciones se organizan y ejecutan en pasos secuenciales. El experimento de caos también define las acciones que se desean realizar en las ramas, que se ejecutan en paralelo.
Formule el JSON del experimento a partir del siguiente ejemplo de JSON. Modifique el JSON para que se corresponda con el experimento que desea ejecutar mediante la API Crear experimento y la biblioteca de errores.
{ "identity": { "type": "SystemAssigned" }, "location": "centralus", "properties": { "selectors": [ { "id": "Selector1", "targets": [ { "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/myRG/providers/Microsoft.Compute/virtualMachines/myWindowsVM/providers/Microsoft.Chaos/targets/Microsoft-Agent", "type": "ChaosTarget" }, { "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/myRG/providers/Microsoft.Compute/virtualMachines/myLinuxVM/providers/Microsoft.Chaos/targets/Microsoft-Agent", "type": "ChaosTarget" } ], "type": "List" } ], "steps": [ { "branches": [ { "actions": [ { "duration": "PT10M", "name": "urn:csci:microsoft:agent:cpuPressure/1.0", "parameters": [ { "key": "pressureLevel", "value": "95" } ], "selectorId": "Selector1", "type": "continuous" } ], "name": "Branch 1" } ], "name": "Step 1" } ] } }
Si se va a ejecutar en un conjunto de escalado de máquinas virtuales, modifique los parámetros de error para incluir los números de instancia de destino:
"parameters": [ { "key": "pressureLevel", "value": "95" }, { "key": "virtualMachineScaleSetInstances", "value": "[0,1,2]" } ]
Para identificar los números de instancia del conjunto de escalado en Azure Portal, vaya a su conjunto de escalado de máquinas virtuales y seleccione Instancias. El número de la instancia está al final del nombre de la instancia.
Cree el experimento mediante la CLI de Azure. Reemplace
$SUBSCRIPTION_ID
,$RESOURCE_GROUP
y$EXPERIMENT_NAME
por las propiedades del experimento. Asegúrese de haber guardado y cargado el JSON del experimento. Actualiceexperiment.json
con el nombre del archivo JSON.az rest --method put --uri https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.Chaos/experiments/$EXPERIMENT_NAME?api-version=2023-11-01 --body @experiment.json
Cada experimento crea una identidad administrada asignada por el sistema correspondiente. Observe el id. principal de esta identidad en la respuesta del paso siguiente.
Concesión del permiso del experimento a la máquina virtual
Al crear un experimento de caos, Chaos Studio crea una identidad administrada asignada por el sistema que ejecuta errores en los recursos de destino. Esta identidad debe tener los permisos adecuados en el recurso de destino para que el experimento se ejecute correctamente. El rol Lector es necesario para los errores basados en agente. Otros roles que no tengan el permiso */Lectura, como el de colaborador de la máquina virtual, no concederán el permiso adecuado para los errores basados en agente.
Proporcione al experimento acceso a la máquina virtual o al conjunto de escalado de máquinas virtuales mediante el siguiente comando. Reemplace $EXPERIMENT_PRINCIPAL_ID
por el id. principal del paso anterior. Reemplace $RESOURCE_ID
por el id. de recurso de la máquina virtual o el conjunto de escalado de máquinas virtuales de destino. Asegúrese de usar el id. de recurso de la máquina virtual, no el id. de recurso del agente de caos usado en la definición del experimento. Ejecute este comando para cada máquina virtual o conjunto de escalado de máquinas virtuales de destino en el experimento.
az role assignment create --role "Reader" --assignee-principal-type "ServicePrincipal" --assignee-object-id $EXPERIMENT_PRINCIPAL_ID --scope $RESOURCE_ID
Ejecutar el experimento
Ahora ya puede ejecutar el experimento. Para ver el efecto, recomendamos abrir un gráfico de métricas de Azure Monitor con la presión de CPU de la máquina virtual en una pestaña independiente del explorador.
Inicie el experimento mediante la CLI de Azure. Reemplace
$SUBSCRIPTION_ID
,$RESOURCE_GROUP
y$EXPERIMENT_NAME
por las propiedades del experimento.az rest --method post --uri https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.Chaos/experiments/$EXPERIMENT_NAME/start?api-version=2023-11-01
La respuesta incluye una dirección URL de estado que puede usar para consultar el estado del experimento mientras se ejecuta.
Pasos siguientes
Ahora que ha ejecutado un experimento basado en agente, podrá hacer lo siguiente: