Freigeben über


Erstellen eines Chaosexperiments, das einen agentbasierten Fehler verwendet, mit der Azure CLI

Sie können ein Chaos-Experiment verwenden, um zu überprüfen, ob Ihre Anwendung fehlerresistent ist, indem Sie diese Fehler in einer kontrollierten Umgebung verursachen. In diesem Artikel werden Sie ein Ereignis mit hoher prozentualer CPU-Auslastung auf einem virtuellen Linux-Computer (VM) mithilfe eines Chaosexperiments und Azure Chaos Studio auslösen. Das Durchführen dieses Experiments kann Ihnen helfen, eine Anwendung vor Ressourcenmangel zu schützen.

Sie können dieselben Schritte für die Einrichtung und Durchführung eines Experiments für beliebige Agent-basierte Fehler verwenden. Ein Agent-basierter Fehler erfordert die Einrichtung und Installation des Chaos-Agents. Ein direkter Dienstfehler wird direkt für eine Azure-Ressource ausgeführt. Eine Instrumentierung ist nicht erforderlich.

Voraussetzungen

Öffnen von Azure Cloud Shell

Azure Cloud Shell ist eine kostenlose interaktive Shell, mit der Sie die Schritte in diesem Artikel ausführen können. Sie verfügt über allgemeine vorinstallierte Tools und ist für die Verwendung mit Ihrem Konto konfiguriert.

Wählen Sie zum Öffnen von Cloud Shell oben rechts in einem Codeblock die Option Ausprobieren aus. Sie können Cloud Shell auch auf einer separaten Browserregisterkarte öffnen, indem Sie zu Bash wechseln. Wählen Sie Kopieren aus, um die Codeblöcke zu kopieren. Fügen Sie die Blöcke anschließend in Cloud Shell ein, und wählen Sie Eingabe, um sie auszuführen.

Wenn Sie die Befehlszeilenschnittstelle lieber lokal installieren und verwenden möchten, benötigen Sie für dieses Tutorial mindestens die Azure CLI-Version 2.0.30. Führen Sie az --version aus, um die Version zu ermitteln. Informationen zum Durchführen einer Installation oder eines Upgrades finden Sei bei Bedarf unter Installieren der Azure CLI.

Hinweis

In diesen Anweisungen wird ein Bash-Terminal in Cloud Shell verwendet. Einige Befehle funktionieren möglicherweise nicht wie beschrieben, wenn Sie die CLI lokal oder in einem PowerShell-Terminal ausführen.

Weisen Sie der virtuellen Maschine eine Identität zu

Bevor Sie Chaos Studio auf dem virtuellen Computer einrichten, weisen Sie jedem virtuellen Computer oder jeder VM-Skalierungsgruppe eine benutzerseitig zugewiesene verwaltete Identität zu, in der Sie den Agent installieren möchten. Verwenden Sie den Befehl az vm identity assign oder az vmss identity assign. Ersetzen Sie $VM_RESOURCE_ID/$VMSS_RESOURCE_ID durch die Ressourcen-ID des virtuellen Computers, die Sie als Chaosziel hinzufügen. Ersetzen Sie $MANAGED_IDENTITY_RESOURCE_ID durch die Ressourcen-ID der benutzerseitig zugewiesenen verwalteten Identität.

Virtueller Computer

az vm identity assign --ids $VM_RESOURCE_ID --identities $MANAGED_IDENTITY_RESOURCE_ID

VM-Skalierungsgruppe

az vmss identity assign --ids $VMSS_RESOURCE_ID --identities $MANAGED_IDENTITY_RESOURCE_ID

Aktivieren Sie Chaos Studio auf Ihrem virtuellen Rechner

Chaos Studio kann erst dann Fehler in einen virtuellen Computer einfügen, wenn er zu Chaos Studio hinzugefügt wurde. Um einen virtuellen Computer zu Chaos Studio hinzuzufügen, erstellen Sie ein Ziel und Funktionen für die Ressource. Danach installieren Sie den Chaos-Agent.

Virtuelle Computer verfügen über zwei Zieltypen. Ein Zieltyp ermöglicht direkte Dienstfehler (bei denen kein Agent erforderlich ist). Der andere Zieltyp ermöglicht Agent-basierte Fehler (was die Installation eines Agents erfordert). Der Chaos-Agent ist eine Anwendung, die auf Ihrem virtuellen Computer als VM-Erweiterung installiert ist. Sie verwenden ihn zum Einfügen von Fehlern in das Gastbetriebssystem.

Aktivieren von Chaos-Ziel und -Fähigkeiten

Als Nächstes richten Sie auf jedem virtuellen Computer oder in jeder VM-Skalierungsgruppe ein Microsoft-Agent-Ziel ein, das die benutzerseitig zugewiesene verwaltete Identität angibt, die der Agent für die Verbindung mit Chaos Studio benötigt. In diesem Beispiel verwenden wir eine verwaltete Identität für alle VMs. Ein Ziel muss über die REST-API erstellt werden. In diesem Beispiel verwenden wir den az rest CLI-Befehl, um die REST-API-Aufrufe auszuführen.

  1. Ändern Sie den folgenden JSON-Code, indem Sie $USER_IDENTITY_CLIENT_ID durch die Client-ID Ihrer verwalteten Identität ersetzen. Sie finden die Client-ID in der Übersicht des Azure-Portals über die von Ihnen erstellte benutzerseitig zugewiesene verwaltete Identität. Ersetzen Sie $USER_IDENTITY_TENANT_ID durch die Azure-Mandanten-ID. Sie finden sie im Azure-Portal unter Microsoft Entra ID unter Mandanteninformationen. Speichern Sie das JSON-Datenformat als Datei an demselben Speicherort, an dem Sie die Azure CLI ausführen. In Cloud Shell können Sie die JSON-Datei per Drag & Drop ziehen und ablegen, um sie hochzuladen.

    {
      "properties": {
        "identities": [
          {
            "clientId": "$USER_IDENTITY_CLIENT_ID",
            "tenantId": "$USER_IDENTITY_TENANT_ID",
            "type": "AzureManagedIdentity"
          }
        ]
      }
    }
    
  2. Erstellen Sie das Ziel, indem Sie $RESOURCE_ID durch die Ressourcen-ID des virtuellen Zielcomputers oder der VM-Skalierungsgruppe ersetzen. Ersetzen Sie target.json durch den Namen der im vorherigen Schritt erstellten JSON Datei.

    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
    

    Wenn Sie einen PowerShell-Analysefehler erhalten, wechseln Sie wie für dieses Tutorial empfohlen zu einem Bash-Terminal oder setzen Sie die JSON-Datei, auf die verwiesen wird, in einfache Anführungszeichen (--body '@target.json').

  3. Kopieren Sie die GUID für die agentProfileId, die von diesem Befehl zur Verwendung in einem späteren Schritt zurückgegeben wird.

  4. Erstellen Sie die Funktionen, indem Sie $RESOURCE_ID durch die Ressourcen-ID des virtuellen Zielcomputers oder der VM-Skalierungsgruppe ersetzen. Ersetzen Sie $CAPABILITY durch den Namen der Fehlerfunktion, die Sie aktivieren, (z. B. 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\":{}}"
    

    Wenn Sie z. B. die CPU-Auslastungsfunktion aktivieren:

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

Installieren der Chaos Studio-VM-Erweiterung

Der Chaos-Agent ist eine Anwendung, die auf Ihrem virtuellen Computer oder in Ihrer VM-Skalierungsgruppe ausgeführt wird, um Agent-basierte Fehler auszuführen. Während der Installation konfigurieren Sie Folgendes:

  • Den Agent mit der verwalteten Identität, die der Agent für die Authentifizierung bei Chaos Studio verwenden sollte.
  • Die Profil-ID des von Ihnen erstellten Microsoft-Agent-Ziels.
  • Optional kann ein Application Insights-Instrumentierungsschlüssel verwendet werden, mit dem der Agent Diagnoseereignisse an Application Insights senden kann.
  1. Bevor Sie beginnen, stellen Sie sicher, dass Sie über die folgenden Details verfügen:

    • agentProfileId: Die Eigenschaft, die beim Erstellen des Ziels zurückgegeben wird. Wenn Sie nicht über diese Eigenschaft verfügen, können Sie die Eigenschaft ausführen az rest --method get --uri https://management.azure.com/$RESOURCE_ID/providers/Microsoft.Chaos/targets/Microsoft-Agent?api-version=2023-11-01 und agentProfileId kopieren.
    • ClientId: Die Client-ID der benutzerseitig zugewiesenen verwalteten Identität, die im Ziel verwendet wird. Wenn Sie nicht über diese Eigenschaft verfügen, können Sie die Eigenschaft ausführen az rest --method get --uri https://management.azure.com/$RESOURCE_ID/providers/Microsoft.Chaos/targets/Microsoft-Agent?api-version=2023-11-01 und clientId kopieren.
    • (Optional) AppInsightsKey: Der Instrumentierungsschlüssel für Ihre Application Insights-Komponente, den Sie im Portal auf der Seite „Application Insights“ unter Essentials finden.
  2. Installieren Sie die Chaos Studio-VM-Erweiterung. Ersetzen Sie $VM_RESOURCE_ID durch die Ressourcen-ID Ihres virtuellen Computers, oder ersetzen Sie $SUBSCRIPTION_ID ,$RESOURCE_GROUP, und $VMSS_NAMEdurch diese Eigenschaften für Ihre VM-Skalierungsgruppe. Ersetzen Sie $AGENT_PROFILE_ID durch die Agent-Profil-ID. Ersetzen Sie $USER_IDENTITY_CLIENT_ID durch die Client-ID Ihrer verwalteten Identität. Ersetzen Sie $APP_INSIGHTS_KEY durch Ihren Application Insights-Instrumentierungsschlüssel. Wenn Sie Application Insights nicht verwenden, entfernen Sie dieses Schlüssel-Wert-Paar.

    Vollständige Liste der Standardkonfiguration der VM-Erweiterung für den Agent

    Dies ist die Mindestkonfiguration der VM-Erweiterung für den Agent, die vom bzw. von der Benutzer*in benötigt wird:

    {
        "profile": "$AGENT_PROFILE_ID",
        "auth.msi.clientid": "$USER_IDENTITY_CLIENT_ID"
    }
    

    Dies sind alle Werte für die Konfiguration der VM-Erweiterung für den Agent

     {
        "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.
        }
    }
    

    Installieren Sie den Agent auf der virtuellen Maschine

    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}}'
    

    Installieren Sie den Agent auf der VMSS

    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. Wenn Sie eine VM-Skalierungsgruppe einrichten, überprüfen Sie, ob die Instanzen auf das neueste Modell aktualisiert wurden. Aktualisieren Sie bei Bedarf alle Instanzen im Modell.

    az vmss update-instances -g $RESOURCE_GROUP -n $VMSS_NAME --instance-ids *
    

Erstellen eines Experiments

Nachdem Sie Ihren virtuellen Computer erfolgreich bereitgestellt haben, können Sie nun Ihr Experiment erstellen. Ein Chaosexperiment definiert die Aktionen, die Sie gegen Zielressourcen ergreifen möchten. Die Aktionen werden in sequenziellen Schritten organisiert und ausgeführt. Das Chaosexperiment definiert auch die Aktionen, die Sie gegen Branches ausführen möchten, die parallel ausgeführt werden.

  1. Erstellen Sie Ihr JSON-Experiment-Datenformat, beginnend mit dem folgenden JSON-Beispiel. Ändern Sie das JSON-Datenformat so, dass es dem Experiment entspricht, das Sie mithilfe der API zum Erstellen von Experimenten und der Fehlerbibliothek durchführen möchten.

    {
      "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"
          }
        ]
      }
    }
    

    Wenn Sie eine VM-Skalierungsgruppe ausführen, ändern Sie die Fehlerparameter so, dass sie die Nummern der Instanzen enthalten, auf die Sie abzielen:

    "parameters": [
      {
        "key": "pressureLevel",
        "value": "95"
      },
      {
        "key": "virtualMachineScaleSetInstances",
        "value": "[0,1,2]"
      }
    ]
    

    Sie können die Instanznummern der Skalierungsgruppe im Azure-Portal identifizieren, indem Sie zu Ihrer VM-Skalierungsgruppe wechseln und Instanzen auswählen. Der Instanzname endet mit der Instanznummer.

  2. Erstellen Sie das Experiment mithilfe der Azure CLI. Ersetzen Sie $SUBSCRIPTION_ID, $RESOURCE_GROUP und $EXPERIMENT_NAME durch die Eigenschaften für Ihr Experiment. Stellen Sie sicher, dass Sie Ihr JSON-Experiment-Datenformat gespeichert und hochgeladen haben. Aktualisieren Sie experiment.json mit Ihrem JSON-Dateinamen.

    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
    

    Jede Simulation erstellt eine entsprechende systemseitig zugewiesene verwaltete Identität. Notieren Sie sich die Prinzipal-ID für diese Identität in der Antwort für den nächsten Schritt.

Erteilen der Experimentberechtigung für Ihren virtuellen Computer

Wenn Sie ein Chaosexperiment erstellen, erzeugt Chaos Studio eine dem System zugewiesene verwaltete Identität, die Fehler gegen Ihre Zielressourcen ausführt. Diese Identität muss mit entsprechenden Rechten für die Zielressource ausgestattet sein, damit das Experiment erfolgreich durchgeführt werden kann. Die Leserrolle ist für Agent-basierte Fehler erforderlich. Andere Rollen, die nicht über die Berechtigung „*/Read“ verfügen, z. B. „Mitwirkende*r von virtuellen Computern“, erteilen keine entsprechende Berechtigung für Agent-basierte Fehler.

Gewähren Sie dem Experiment Zugriff auf Ihren virtuellen Computer oder Ihre VM-Skalierungsgruppe, indem Sie den folgenden Befehl verwenden. Ersetzen Sie $EXPERIMENT_PRINCIPAL_ID durch die Prinzipal-ID aus dem vorherigen Schritt. Ersetzen Sie $RESOURCE_ID durch die Ressourcen-ID des virtuellen Zielcomputers oder der VM-Skalierungsgruppe. Verwenden Sie unbedingt die Ressourcen-ID des virtuellen Computers, nicht die Ressourcen-ID des Chaos-Agents, der in der Experimentdefinition verwendet wird. Führen Sie diesen Befehl für jeden virtuellen Computer oder jede VM-Skalierungsgruppe aus, der bzw. die in Ihrem Experiment als Ziel verwendet wird.

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

Führen Sie Ihr Experiment durch

Sie sind nun bereit, Ihr Experiment durchzuführen. Um die Auswirkungen zu sehen, empfehlen wir, ein Azure Monitor-Metriken-Diagramm mit der CPU-Auslastung Ihres virtuellen Computers in einer separaten Browserregisterkarte zu öffnen.

  1. Starten Sie das Experiment mithilfe der Azure CLI. Ersetzen Sie $SUBSCRIPTION_ID, $RESOURCE_GROUP und $EXPERIMENT_NAME durch die Eigenschaften für Ihr Experiment.

    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. Die Antwort enthält eine Status-URL, mit der Sie den Simulationsstatus während der Ausführung der Simulation abfragen können.

Nächste Schritte

Nun, da Sie ein Agent-basiertes Experiment durchgeführt haben, können Sie Folgendes tun: