Tworzenie eksperymentu chaosu korzystającego z błędu opartego na agencie za pomocą interfejsu wiersza polecenia platformy Azure

Możesz użyć eksperymentu chaosu, aby sprawdzić, czy aplikacja jest odporna na błędy, powodując te błędy w kontrolowanym środowisku. W tym artykule wystąpi duże zdarzenie wykorzystania procesora CPU na maszynie wirtualnej z systemem Linux przy użyciu eksperymentu chaosu i usługi Azure Chaos Studio. Uruchom ten eksperyment, aby pomóc w obronie aplikacji przed zagęszczonej zasobami.

Możesz użyć tych samych kroków, aby skonfigurować i uruchomić eksperyment dla dowolnego błędu opartego na agencie. Błąd oparty na agencie wymaga instalacji i instalacji agenta chaosu. Błąd bezpośredni usługi działa bezpośrednio w odniesieniu do zasobu platformy Azure bez konieczności instrumentacji.

Wymagania wstępne

Otwórz usługę Azure Cloud Shell

Usługa Azure Cloud Shell to bezpłatna interaktywna powłoka, której można użyć do wykonania kroków opisanych w tym artykule. Udostępnia ona wstępnie zainstalowane i najczęściej używane narzędzia platformy Azure, które są skonfigurowane do użycia na koncie.

Aby otworzyć usługę Cloud Shell, wybierz pozycję Wypróbuj w prawym górnym rogu bloku kodu. Możesz również otworzyć usługę Cloud Shell na osobnej karcie przeglądarki, przechodząc do powłoki Bash. Wybierz pozycję Kopiuj , aby skopiować bloki kodu, wklej go w usłudze Cloud Shell, a następnie wybierz klawisz Enter , aby go uruchomić.

Jeśli wolisz zainstalować interfejs wiersza polecenia i korzystać z niego lokalnie, ten samouczek wymaga interfejsu wiersza polecenia platformy Azure w wersji 2.0.30 lub nowszej. Uruchom polecenie az --version, aby dowiedzieć się, jaka wersja jest używana. Jeśli konieczna będzie instalacja lub uaktualnienie, zobacz Instalowanie interfejsu wiersza polecenia platformy Azure.

Uwaga

Te instrukcje używają terminalu powłoki Bash w usłudze Cloud Shell. Niektóre polecenia mogą nie działać zgodnie z opisem, jeśli interfejs wiersza polecenia jest uruchamiany lokalnie lub w terminalu programu PowerShell.

Przypisywanie tożsamości zarządzanej do maszyny wirtualnej

Przed skonfigurowaniem programu Chaos Studio na maszynie wirtualnej przypisz tożsamość zarządzaną przypisaną przez użytkownika do każdej maszyny wirtualnej lub zestawu skalowania maszyn wirtualnych, w którym planujesz zainstalować agenta. az vm identity assign Użyj polecenia oraz vmss identity assign. Zastąp $VM_RESOURCE_ID/$VMSS_RESOURCE_ID element identyfikatorem zasobu maszyny wirtualnej, którą dodajesz jako element docelowy chaosu. Zastąp $MANAGED_IDENTITY_RESOURCE_ID element identyfikatorem zasobu tożsamości zarządzanej przypisanej przez użytkownika.

Maszyna wirtualna

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

Zestaw skalowania maszyn wirtualnych

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

Włączanie programu Chaos Studio na maszynie wirtualnej

Program Chaos Studio nie może wstrzyknąć błędów na maszynie wirtualnej, chyba że maszyna wirtualna została najpierw dodana do programu Chaos Studio. Aby dodać maszynę wirtualną do programu Chaos Studio, utwórz element docelowy i możliwości w zasobie. Następnie instalujesz agenta chaosu.

Maszyny wirtualne mają dwa typy docelowe. Jeden typ docelowy włącza błędy bezpośrednie usługi (jeśli nie jest wymagany żaden agent). Drugi typ docelowy umożliwia błędy oparte na agencie (co wymaga instalacji agenta). Agent chaosu to aplikacja zainstalowana na maszynie wirtualnej jako rozszerzenie maszyny wirtualnej. Służy do wstrzykiwania błędów w systemie operacyjnym gościa.

Włączanie celu chaosu i możliwości

Następnie skonfiguruj element docelowy programu Microsoft-Agent na każdej maszynie wirtualnej lub zestawie skalowania maszyn wirtualnych, który określa tożsamość zarządzaną przypisaną przez użytkownika, której agent używa do nawiązywania połączenia z programem Chaos Studio. W tym przykładzie używamy jednej tożsamości zarządzanej dla wszystkich maszyn wirtualnych. Element docelowy musi zostać utworzony za pośrednictwem interfejsu API REST. W tym przykładzie używamy polecenia interfejsu wiersza polecenia do wykonywania wywołań interfejsu az rest API REST.

  1. Zmodyfikuj następujący kod JSON, zastępując $USER_IDENTITY_CLIENT_ID element identyfikatorem klienta tożsamości zarządzanej. Identyfikator klienta można znaleźć w przeglądzie utworzonej tożsamości zarządzanej przypisanej przez użytkownika w witrynie Azure Portal. Zastąp $USER_IDENTITY_TENANT_ID element identyfikatorem dzierżawy platformy Azure. Możesz go znaleźć w witrynie Azure Portal w obszarze Microsoft Entra ID w obszarze Informacje o dzierżawie. Zapisz kod JSON jako plik w tej samej lokalizacji, w której używasz interfejsu wiersza polecenia platformy Azure. W usłudze Cloud Shell możesz przeciągać i upuszczać plik JSON, aby go przekazać.

    {
      "properties": {
        "identities": [
          {
            "clientId": "$USER_IDENTITY_CLIENT_ID",
            "tenantId": "$USER_IDENTITY_TENANT_ID",
            "type": "AzureManagedIdentity"
          }
        ]
      }
    }
    
  2. Utwórz element docelowy, zastępując $RESOURCE_ID element identyfikatorem zasobu docelowej maszyny wirtualnej lub zestawu skalowania maszyn wirtualnych. Zastąp target.json ciąg nazwą pliku JSON utworzonego w poprzednim kroku.

    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
    

    Jeśli wystąpi błąd analizowania programu PowerShell, przełącz się do terminalu powłoki Bash zgodnie z zaleceniami dla tego samouczka lub umieść przywoływalny plik JSON w pojedynczym cudzysłowie (--body '@target.json').

  3. Skopiuj identyfikator GUID agentProfileId zwrócony przez to polecenie do użycia w późniejszym kroku.

  4. Utwórz możliwości, zastępując $RESOURCE_ID element identyfikatorem zasobu docelowej maszyny wirtualnej lub zestawu skalowania maszyn wirtualnych. Zastąp $CAPABILITYciąg nazwą funkcji błędów, którą włączasz (na przykład 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\":{}}"
    

    Jeśli na przykład włączasz możliwość wykorzystania procesora 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\":{}}"
    

Instalowanie rozszerzenia maszyny wirtualnej programu Chaos Studio

Agent chaosu to aplikacja uruchamiana na maszynie wirtualnej lub w wystąpieniach zestawu skalowania maszyn wirtualnych w celu wykonywania błędów opartych na agencie. Podczas instalacji konfigurujesz:

  • Agent z tożsamością zarządzaną, która powinna być używana przez agenta do uwierzytelniania w programie Chaos Studio.
  • Identyfikator profilu utworzonego elementu docelowego programu Microsoft-Agent.
  • Opcjonalnie klucz instrumentacji usługi Application Szczegółowe informacje, który umożliwia agentowi wysyłanie zdarzeń diagnostycznych do usługi Application Szczegółowe informacje.
  1. Przed rozpoczęciem upewnij się, że masz następujące szczegóły:

    • agentProfileId: właściwość zwrócona podczas tworzenia obiektu docelowego. Jeśli nie masz tej właściwości, możesz uruchomić az rest --method get --uri https://management.azure.com/$RESOURCE_ID/providers/Microsoft.Chaos/targets/Microsoft-Agent?api-version=2023-11-01 i skopiować agentProfileId właściwość.
    • ClientId: identyfikator klienta tożsamości zarządzanej przypisanej przez użytkownika używany w obiekcie docelowym. Jeśli nie masz tej właściwości, możesz uruchomić az rest --method get --uri https://management.azure.com/$RESOURCE_ID/providers/Microsoft.Chaos/targets/Microsoft-Agent?api-version=2023-11-01 i skopiować clientId właściwość.
    • (Opcjonalnie) App Szczegółowe informacje Key: klucz instrumentacji składnika Application Szczegółowe informacje, który można znaleźć na stronie Application Szczegółowe informacje w portalu w obszarze Podstawy.
  2. Zainstaluj rozszerzenie maszyny wirtualnej programu Chaos Studio. Zastąp $VM_RESOURCE_ID element identyfikatorem zasobu maszyny wirtualnej lub zastąp $SUBSCRIPTION_IDciąg , $RESOURCE_GROUPi $VMSS_NAME właściwościami zestawu skalowania maszyn wirtualnych. Zastąp $AGENT_PROFILE_ID element identyfikatorem profilu agenta. Zastąp element $USER_IDENTITY_CLIENT_ID identyfikatorem klienta tożsamości zarządzanej. Zastąp $APP_INSIGHTS_KEY element kluczem instrumentacji Szczegółowe informacje aplikacji. Jeśli nie używasz Szczegółowe informacje aplikacji, usuń parę klucz/wartość.

    Pełna lista domyślnej konfiguracji rozszerzenia maszyny wirtualnej agenta

    Poniżej przedstawiono minimalną konfigurację rozszerzenia maszyny wirtualnej agenta wymaganą przez użytkownika:

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

    Poniżej przedstawiono wszystkie wartości konfiguracji rozszerzenia maszyny wirtualnej agenta

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

    Instalowanie agenta na maszynie wirtualnej

    Windows

    az vm extension set --ids $VM_RESOURCE_ID --name ChaosWindowsAgent --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}}'
    

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

    Instalowanie agenta w zestawie skalowania maszyn wirtualnych

    Windows

    az vmss extension set --subscription $SUBSCRIPTION_ID --resource-group $RESOURCE_GROUP --vmss-name $VMSS_NAME --name ChaosWindowsAgent --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}}'
    

    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. Jeśli konfigurujesz zestaw skalowania maszyn wirtualnych, sprawdź, czy wystąpienia zostały uaktualnione do najnowszego modelu. W razie potrzeby uaktualnij wszystkie wystąpienia w modelu.

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

Tworzenie eksperymentu

Po pomyślnym wdrożeniu maszyny wirtualnej możesz teraz utworzyć eksperyment. Eksperyment chaosu definiuje akcje, które chcesz wykonać względem zasobów docelowych. Akcje są zorganizowane i uruchamiane w krokach sekwencyjnych. Eksperyment chaosu definiuje również akcje, które mają być wykonywane względem gałęzi, które są uruchamiane równolegle.

  1. Sformułuj kod JSON eksperymentu, zaczynając od poniższego przykładu JSON. Zmodyfikuj kod JSON, aby odpowiadał eksperymentowi, który chcesz uruchomić przy użyciu interfejsu API tworzenia eksperymentu i biblioteki błędów.

    {
      "identity": {
        "type": "SystemAssigned"
      },
      "location": "centralus",
      "properties": {
        "selectors": [
          {
            "id": "Selector1",
            "targets": [
              {
                "id": "/subscriptions/b65f2fec-d6b2-4edd-817e-9339d8c01dc4/resourceGroups/myRG/providers/Microsoft.Compute/virtualMachines/myWindowsVM/providers/Microsoft.Chaos/targets/Microsoft-Agent",
                "type": "ChaosTarget"
              },
              {
                "id": "/subscriptions/b65f2fec-d6b2-4edd-817e-9339d8c01dc4/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"
          }
        ]
      }
    }
    

    Jeśli korzystasz z zestawu skalowania maszyn wirtualnych, zmodyfikuj parametry błędów, aby uwzględnić numery wystąpień na wartość docelową:

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

    Numery wystąpień zestawu skalowania można zidentyfikować w witrynie Azure Portal, przechodząc do zestawu skalowania maszyn wirtualnych i wybierając pozycję Wystąpienia. Nazwa wystąpienia kończy się numerem wystąpienia.

  2. Utwórz eksperyment przy użyciu interfejsu wiersza polecenia platformy Azure. Zastąp $SUBSCRIPTION_IDwartości , $RESOURCE_GROUPi $EXPERIMENT_NAME właściwościami eksperymentu. Upewnij się, że plik JSON eksperymentu został zapisany i przekazany. Zaktualizuj experiment.json plik za pomocą nazwy pliku 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
    

    Każdy eksperyment tworzy odpowiednią tożsamość zarządzaną przypisaną przez system. Zanotuj identyfikator podmiotu zabezpieczeń dla tej tożsamości w odpowiedzi na następny krok.

Nadaj eksperymentowi uprawnienie do maszyny wirtualnej

Podczas tworzenia eksperymentu chaosu program Chaos Studio tworzy tożsamość zarządzaną przypisaną przez system, która wykonuje błędy względem zasobów docelowych. Ta tożsamość musi mieć odpowiednie uprawnienia do zasobu docelowego, aby eksperyment został pomyślnie uruchomiony. Rola Czytelnik jest wymagana w przypadku błędów opartych na agencie. Inne role, które nie mają uprawnień */odczyt, takich jak Współautor maszyny wirtualnej, nie będą udzielać odpowiednich uprawnień dla błędów opartych na agencie.

Nadaj eksperymentowi dostęp do maszyny wirtualnej lub zestawu skalowania maszyn wirtualnych przy użyciu następującego polecenia. Zastąp $EXPERIMENT_PRINCIPAL_ID element identyfikatorem podmiotu zabezpieczeń z poprzedniego kroku. Zastąp $RESOURCE_ID element identyfikatorem zasobu docelowej maszyny wirtualnej lub zestawu skalowania maszyn wirtualnych. Pamiętaj, aby użyć identyfikatora zasobu maszyny wirtualnej, a nie identyfikatora zasobu agenta chaosu użytego w definicji eksperymentu. Uruchom to polecenie dla każdej maszyny wirtualnej lub zestawu skalowania maszyn wirtualnych przeznaczonych w eksperymencie.

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

Uruchamianie eksperymentu

Teraz możesz przystąpić do uruchamiania eksperymentu. Aby zobaczyć efekt, zalecamy otwarcie wykresu metryk usługi Azure Monitor z użyciem procesora CPU maszyny wirtualnej na osobnej karcie przeglądarki.

  1. Rozpocznij eksperyment przy użyciu interfejsu wiersza polecenia platformy Azure. Zastąp $SUBSCRIPTION_IDwartości , $RESOURCE_GROUPi $EXPERIMENT_NAME właściwościami eksperymentu.

    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. Odpowiedź zawiera adres URL stanu, którego można użyć do wykonywania zapytań dotyczących stanu eksperymentu podczas uruchamiania eksperymentu.

Następne kroki

Teraz, po uruchomieniu eksperymentu opartego na agencie, możesz wykonać następujące czynności: