Creare errori basati su agente con l'interfaccia della riga di comando di Azure (versione classica)

Importante

Gli esperimenti (versione classica) vengono sostituiti da aree di lavoro Chaos Studio, il modello di risorse corrente per Azure Chaos Studio. È ancora Chaos Studio, con un nuovo modo per definire ed eseguire i test. Microsoft non aggiunge più funzionalità a Esperimenti (versione classica) e prende in considerazione solo correzioni critiche, come gli aggiornamenti della sicurezza, da applicare tramite backport a questo modello. Usare aree di lavoro per nuovi test di resilienza. Per spostare gli esperimenti esistenti, segui Passare da Experiments (versione classica) alle aree di lavoro di Chaos Studio.

Questa guida di interfaccia della riga di comando di Azure crea errori basati su agenti tramite gli esperimenti di Azure Chaos Studio (versione classica). Per i test della CPU dei modelli correnti, utilizzare la guida scenario di stress della CPU di Workspaces e la guida CLI di Workspaces. Controllare i requisiti dello scenario prima di scegliere un modello.

È possibile usare un esperimento chaos per verificare che l'applicazione sia resiliente agli errori causando tali errori in un ambiente controllato. In questo articolo si genera un evento con un'elevata percentuale di utilizzo della CPU in una macchina virtuale (VM) Linux usando un esperimento Chaos e Azure Chaos Studio. Esegui questo esperimento per proteggerti dal rischio che un'applicazione resti priva 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. Sostituisci $VM_RESOURCE_ID/$VMSS_RESOURCE_ID con l'ID della risorsa della macchina virtuale che stai aggiungendo come destinazione 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à delle 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. Installare quindi Chaos Studio Agent.

Le macchine virtuali hanno due tipi di destinazione. Un tipo di target consente guasti diretti al servizio (per i quali non è richiesto alcun agente). L'altro tipo di destinazione abilita gli errori basati su agente, che richiedono 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.

Abilita il target e le funzionalità di Chaos

Quindi, configura un target Microsoft-Agent su ogni macchina virtuale o set di scalabilità di macchine virtuali che specifica l'identità gestita assegnata dall’utente che l'agente usa 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, utilizziamo il comando CLI az rest per eseguire le chiamate all'API REST.

  1. Modificare il codice JSON seguente sostituendo $USER_IDENTITY_CLIENT_ID con l'ID client dell'identità gestita. Puoi trovare l'ID client nella pagina Panoramica del portale di Azure dell'identità gestita assegnata dall'utente che hai creato. 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. Crea la destinazione sostituendo $RESOURCE_ID con l'ID della risorsa della VM 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 VM di destinazione o del set di scalabilità di macchine virtuali. 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à Pressione 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

Chaos Agent è un'applicazione che viene eseguita nelle istanze della macchina virtuale (VM) o del set di scalabilità di macchine virtuali per eseguire guasti basati su agente. Durante l'installazione, si configurano:

  • 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 che hai creato.
  • 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: L'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 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 in 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 sta configurando 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 l'esecuzione riguarda un set di scalabilità di macchine virtuali, modificare i parametri dell'errore in modo da includere i numeri delle istanze da impostare come 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. Aggiorna experiment.json con il nome del 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. Annotare l'ID principal di 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. Per gli errori basati su agente è necessario il ruolo Lettore. Altri ruoli che non dispongono dell'autorizzazione */Read, ad esempio Collaboratore macchine virtuali, 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 della risorsa della VM di destinazione o del set di scalabilità di macchine virtuali. Assicurarsi di usare l'ID risorsa della macchina virtuale, non l'ID risorsa dell'agente di Chaos usato nella definizione dell'esperimento. Esegui questo comando per ogni VM o set di scalabilità di macchine virtuali a cui è destinato l'esperimento.

az role assignment create --role "Reader" --assignee-principal-type "ServicePrincipal" --assignee-object-id $EXPERIMENT_PRINCIPAL_ID --scope $RESOURCE_ID 

Esegui il tuo 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

Ora che hai eseguito un esperimento basato su agenti, sei pronto a: