Condividi tramite


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

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.

  1. 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"
          }
        ]
      }
    }
    
  2. Creare la destinazione sostituendo $RESOURCE_ID con l'ID risorsa della macchina virtuale di destinazione o del set di scalabilità di macchine virtuali. Sostituire target.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').

  3. Copiare il GUID per agentProfileId restituito da questo comando per usarlo in un passaggio successivo.

  4. 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 esempio 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\":{}}"
    

    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.
  1. 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.
  2. 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}}'
    
  3. 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.

  1. 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.

  2. 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. Aggiornare experiment.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.

  1. 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
    
  2. 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: