Creare un esperimento di Chaos che usa un errore basato su agente con l'interfaccia della riga di comando di Azure
È possibile usare un esperimento chaos per verificare che l'applicazione sia resiliente agli errori causando tali errori in un ambiente controllato. In questo articolo viene generato un evento di utilizzo elevato della CPU in una macchina virtuale Linux usando un esperimento di Chaos e Azure Chaos Studio. L'esecuzione di questo esperimento migliora la protezione in caso di un'applicazione che richiede un consumo sempre maggiore di risorse.
È possibile usare questi stessi passaggi per configurare ed eseguire un esperimento per qualsiasi errore basato su agente. Un errore basato su agente richiede la configurazione e l'installazione dell'agente di Chaos. Un errore diretto al servizio viene eseguito direttamente su una risorsa di Azure senza alcuna necessità di strumentazione.
Prerequisiti
- Una sottoscrizione di Azure. Se non si ha una sottoscrizione di Azure, creare un account Azure gratuito prima di iniziare.
- Una macchina virtuale che esegue un sistema operativo nell'elenco di compatibilità delle versioni. Se non è ancora stata creata una macchina virtuale, è possibile crearne una.
- Una configurazione di rete che consente di accedere tramite SSH alla macchina virtuale.
- Un'identità gestita assegnata dall'utente. Se non si ha un'identità gestita assegnata dall'utente, è possibile crearne una.
Aprire Azure Cloud Shell
Azure Cloud Shell è una shell interattiva gratuita che può essere usata per eseguire la procedura di questo articolo. Include strumenti comuni di Azure preinstallati e configurati per l'uso con l'account.
Per aprire Cloud Shell, selezionare Prova nell'angolo in alto a destra di un blocco di codice. È anche possibile aprire Cloud Shell in una scheda separata del browser visitando Bash. Selezionare Copia per copiare i blocchi di codice, incollarli in Cloud Shell e selezionare Invio per eseguirli.
Se si preferisce installare e usare l'interfaccia della riga di comando in locale, per questa esercitazione è richiesta l'interfaccia della riga di comando di Azure versione 2.0.30 o successiva. Eseguire az --version
per trovare la versione. Se è necessario eseguire l'installazione o l'aggiornamento, vedere Installare l'interfaccia della riga di comando di Azure.
Nota
Queste istruzioni usano un terminale Bash in Cloud Shell. Alcuni comandi potrebbero non funzionare come descritto se si esegue l'interfaccia della riga di comando in locale o in un terminale di PowerShell.
Assegnare l'identità gestita alle macchine virtuali
Prima di configurare Chaos Studio nella macchina virtuale, assegnare un'identità gestita assegnata dall'utente a ogni macchina virtuale o set di scalabilità di macchine virtuali in cui si intende installare l'agente. Usare il comando az vm identity assign
o az vmss identity assign
. Sostituire $VM_RESOURCE_ID
/$VMSS_RESOURCE_ID
con l'ID risorsa della macchina virtuale che si sta aggiungendo come destinazione di Chaos. Sostituire $MANAGED_IDENTITY_RESOURCE_ID
con l'ID risorsa dell'identità gestita assegnata dall'utente.
Macchina virtuale
az vm identity assign --ids $VM_RESOURCE_ID --identities $MANAGED_IDENTITY_RESOURCE_ID
Set di scalabilità di macchine virtuali
az vmss identity assign --ids $VMSS_RESOURCE_ID --identities $MANAGED_IDENTITY_RESOURCE_ID
Abilitare Chaos Studio sulla macchina virtuale
Chaos Studio non può inserire errori per una macchina virtuale, a meno che tale macchina virtuale non sia stata aggiunta prima a Chaos Studio. Per aggiungere una macchina virtuale a Chaos Studio, creare una destinazione e funzionalità nella risorsa. Quindi, installare l'agente Chaos.
Le macchine virtuali hanno due tipi di destinazione. Un tipo di destinazione abilita gli errori diretti al servizio (in cui non è necessario alcun agente). L'altro tipo di destinazione abilita gli errori basati su agente (che richiede l'installazione di un agente). L'agente di Chaos è un'applicazione installata nella macchina virtuale come estensione della macchina virtuale. Viene usato per inserire errori nel sistema operativo guest.
Abilitare la destinazione e le funzionalità di Chaos
Quindi, configurare una destinazione Microsoft Agent in ogni macchina virtuale o set di scalabilità di macchine virtuali che specifica l'identità gestita assegnata dall'utente usata dall'agente per connettersi a Chaos Studio. In questo esempio viene usata un'identità gestita per tutte le macchine virtuali. È necessario creare una destinazione tramite l'API REST. In questo esempio viene usato il comando dell'interfaccia della riga di comando az rest
per eseguire le chiamate API REST.
Modificare il codice JSON seguente sostituendo
$USER_IDENTITY_CLIENT_ID
con l'ID client dell'identità gestita. È possibile trovare l'ID client nella panoramica del portale di Azure dell'identità gestita assegnata dall'utente precedentemente creata. Sostituire$USER_IDENTITY_TENANT_ID
con l'ID tenant di Azure. È possibile trovare l'ID nel portale di Azure in Microsoft Entra ID in Informazioni sul tenant. Salvare il file JSON come file nella stessa posizione in cui si esegue l'interfaccia della riga di comando di Azure. In Cloud Shell è possibile trascinare e rilasciare il file JSON per caricarlo.{ "properties": { "identities": [ { "clientId": "$USER_IDENTITY_CLIENT_ID", "tenantId": "$USER_IDENTITY_TENANT_ID", "type": "AzureManagedIdentity" } ] } }
Creare la destinazione sostituendo
$RESOURCE_ID
con l'ID risorsa della macchina virtuale di destinazione o del set di scalabilità di macchine virtuali. Sostituiretarget.json
con il nome del file JSON creato nel passaggio precedente.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
Se viene visualizzato un errore di analisi di PowerShell, passare a un terminale Bash come consigliato per questa esercitazione, o immettere il file JSON di riferimento tra virgolette singole (
--body '@target.json'
).Copiare il GUID per agentProfileId restituito da questo comando per usarlo in un passaggio successivo.
Creare le funzionalità sostituendo
$RESOURCE_ID
con l'ID risorsa della macchina virtuale o del set di scalabilità di macchine virtuali di destinazione. Sostituire$CAPABILITY
con il nome della funzionalità di errore che si sta abilitando (ad esempioCPUPressure-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\":{}}"
Ad esempio, se si abilita la funzionalità Utilizzo elevato della 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\":{}}"
Installare l'estensione macchina virtuale di Chaos Studio
L'agente di Chaos è un'applicazione in esecuzione nelle istanze della macchina virtuale o del set di scalabilità di macchine virtuali per eseguire errori basati su agente. Durante l'installazione, configurare:
- L'agente con l'identità gestita che l'agente deve usare per eseguire l'autenticazione in Chaos Studio.
- L'ID del profilo della destinazione Microsoft Agent creata.
- In alternativa, una chiave di strumentazione di Application Insights che consente all'agente di inviare eventi di diagnostica ad Application Insights.
Prima di iniziare, verificare di disporre di quanto segue:
- agentProfileId: la proprietà restituita quando si crea la destinazione. Se questa proprietà non è disponibile, è possibile eseguire
az rest --method get --uri https://management.azure.com/$RESOURCE_ID/providers/Microsoft.Chaos/targets/Microsoft-Agent?api-version=2023-11-01
e copiare la proprietàagentProfileId
. - ClientId: ID client dell'identità gestita assegnata dall'utente usata nella destinazione. Se questa proprietà non è disponibile, è possibile eseguire
az rest --method get --uri https://management.azure.com/$RESOURCE_ID/providers/Microsoft.Chaos/targets/Microsoft-Agent?api-version=2023-11-01
e copiare la proprietàclientId
. - (In alternativa) AppInsightsKey: la chiave di strumentazione per il componente Application Insights, disponibile nella pagina Application Insights nel portale, nella sezione delle informazioni di base.
- agentProfileId: la proprietà restituita quando si crea la destinazione. Se questa proprietà non è disponibile, è possibile eseguire
Installare l'estensione della macchina virtuale di Chaos Studio. Sostituire
$VM_RESOURCE_ID
con l'ID risorsa della macchina virtuale o sostituire$SUBSCRIPTION_ID
,$RESOURCE_GROUP
e$VMSS_NAME
con queste proprietà per il set di scalabilità di macchine virtuali. Sostituire$AGENT_PROFILE_ID
con l'ID profilo dell'agente. Sostituire$USER_IDENTITY_CLIENT_ID
con l'ID client dell'identità gestita. Sostituire$APP_INSIGHTS_KEY
con la chiave di strumentazione di Application Insights. Se non si usa Application Insights, rimuovere la coppia chiave/valore.Elenco completo della configurazione dell'estensione macchina virtuale dell'agente predefinita
Ecco la configurazione minima dell'estensione VM dell'agente minima richiesta dall'utente:
{ "profile": "$AGENT_PROFILE_ID", "auth.msi.clientid": "$USER_IDENTITY_CLIENT_ID" }
Ecco tutti i valori per la configurazione dell'estensione VM dell'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. } }
Installare l'agente su una macchina virtuale
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}}'
Installare l'agente su un set di scalabilità di macchine virtuali
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}}'
Se si configura un set di scalabilità di macchine virtuali, verificare che le istanze siano state aggiornate al modello più recente. Se necessario, aggiornare tutte le istanze nel modello.
az vmss update-instances -g $RESOURCE_GROUP -n $VMSS_NAME --instance-ids *
Creare un esperimento
Dopo aver distribuito correttamente la macchina virtuale, è ora possibile creare l'esperimento. Un esperimento Chaos definisce le azioni da eseguire sulle risorse di destinazione. Le azioni sono organizzate ed eseguite in passaggi sequenziali. L'esperimento chaos definisce anche le azioni che si desidera eseguire sui rami, che vengono eseguite in parallelo.
Creare il codice JSON dell'esperimento a partire dall'esempio JSON seguente. Modificare il codice JSON in modo che corrisponda all'esperimento che si desidera eseguire usando l'API Creare un esperimento e la libreria di errori.
{ "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" } ] } }
Se si esegue in un set di scalabilità di macchine virtuali, modificare i parametri di errore in modo da includere i numeri di istanza di destinazione:
"parameters": [ { "key": "pressureLevel", "value": "95" }, { "key": "virtualMachineScaleSetInstances", "value": "[0,1,2]" } ]
È possibile identificare i numeri di istanza del set di scalabilità nel portale di Azure passando al set di scalabilità di macchine virtuali e selezionando Istanze. Il nome dell'istanza termina con il numero di istanza.
Creare l'esperimento usando l'interfaccia della riga di comando di Azure. Sostituire
$SUBSCRIPTION_ID
,$RESOURCE_GROUP
e$EXPERIMENT_NAME
con le proprietà per l'esperimento. Assicurarsi di aver salvato e caricato il codice JSON dell'esperimento. Aggiornareexperiment.json
con il nome file 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
Ogni esperimento crea un'identità gestita assegnata dal sistema corrispondente. Prendere nota dell'ID entità per questa identità nella risposta per il passaggio successivo.
Concedere all'esperimento l'autorizzazione per la macchina virtuale
Quando si crea un esperimento chaos, Chaos Studio crea un'identità gestita assegnata dal sistema che esegue errori sulle risorse di destinazione. Questa identità deve avere le autorizzazioni appropriate per la risorsa di destinazione affinché l'esperimento venga eseguito correttamente. Il ruolo Lettore è necessario per gli errori basati su agente. Altri ruoli che non dispongono dell'autorizzazione di */Lettura, ad esempio Collaboratore macchina virtuale, non concedono l'autorizzazione appropriata per gli errori basati su agente.
Concedere all'esperimento l'accesso alla macchina virtuale o al set di scalabilità di macchine virtuali usando il comando seguente. Sostituire $EXPERIMENT_PRINCIPAL_ID
con l'ID entità del passaggio precedente. Sostituire $RESOURCE_ID
con l'ID risorsa della macchina virtuale o del set di scalabilità di macchine virtuali di destinazione. Assicurarsi di usare l'ID risorsa della macchina virtuale, non l'ID risorsa dell'agente di Chaos usato nella definizione dell'esperimento. Eseguire questo comando per ogni macchina virtuale o set di scalabilità di macchine virtuali di destinazione dell'esperimento.
az role assignment create --role "Reader" --assignee-principal-type "ServicePrincipal" --assignee-object-id $EXPERIMENT_PRINCIPAL_ID --scope $RESOURCE_ID
Eseguire l'esperimento
Adesso è possibile eseguire l'esperimento. Per visualizzare l'effetto, è consigliabile aprire un grafico delle metriche di Monitoraggio di Azure con la pressione della CPU della macchina virtuale in una scheda separata del browser.
Avviare l'esperimento usando l'interfaccia della riga di comando di Azure. Sostituire
$SUBSCRIPTION_ID
,$RESOURCE_GROUP
e$EXPERIMENT_NAME
con le proprietà per l'esperimento.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 risposta include un URL di stato che è possibile usare per eseguire una query sullo stato dell'esperimento durante l'esecuzione dell'esperimento.
Passaggi successivi
Dopo aver eseguito un esperimento basato su agente, è possibile: