Share via


使用代理程式型錯誤搭配 Azure CLI 建立混亂實驗

您可以使用混亂實驗,藉由在受控制的環境中造成這些失敗,來驗證應用程式是否能夠復原失敗。 在本文中,您會使用混亂實驗和 Azure Chaos Studio,在 Linux 虛擬機上造成高百分比的 CPU 使用率事件。 執行此實驗可協助您防範應用程式變得資源耗盡。

您可以使用這些相同的步驟,針對任何代理程式型錯誤設定和執行實驗。 代理程式型錯誤需要安裝和安裝混亂代理程式。 服務直接錯誤會直接針對 Azure 資源執行,而不需要檢測。

必要條件

開啟 Azure Cloud Shell

Azure Cloud Shell 是免費的互動式 Shell,可讓您用來執行本文中的步驟。 它具有預先安裝和設定的共用 Azure 工具,可與您的帳戶搭配使用。

若要開啟 Cloud Shell,請選取 程式代碼區塊右上角的 [試用 ]。 您也可以移至 Bash,在個別的瀏覽器索引標籤中開啟 Cloud Shell。 選取 [複製 ] 以複製程式代碼區塊、將其貼到 Cloud Shell 中,然後選取 Enter 來執行程式碼。

如果您想要在本機安裝和使用 CLI,本教學課程需要 Azure CLI 2.0.30 版或更新版本。 執行 az --version 以尋找版本。 如果您需要安裝或升級,請參閱安裝 Azure CLI

注意

這些指示會在 Cloud Shell 中使用 Bash 終端機。 如果您在本機或PowerShell終端機中執行CLI,某些命令可能無法如所述運作。

將受控識別指派給虛擬機

在 VM 上設定 Chaos Studio 之前,請將使用者指派的受控識別指派給您計劃安裝代理程式的每個 VM 或虛擬機擴展集。 az vm identity assign使用或 az vmss identity assign 命令。 將取代 $VM_RESOURCE_ID/$VMSS_RESOURCE_ID 為您新增為混亂目標的 VM 資源識別碼。 將取代 $MANAGED_IDENTITY_RESOURCE_ID 為使用者指派受控識別的資源標識碼。

虛擬機器

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

虛擬機器擴展集

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

在您的虛擬機上啟用 Chaos Studio

Chaos Studio 無法對 VM 插入錯誤,除非該 VM 已先新增至 Chaos Studio。 若要將 VM 新增至 Chaos Studio,請在 資源上建立目標和功能 。 然後,您會安裝混亂代理程式。

虛擬機有兩種目標類型。 一個目標類型可啟用服務直接錯誤(不需要代理程式)。 其他目標類型會啟用代理程式型錯誤(這需要安裝代理程式)。 混亂代理程式是安裝在 VM 上作為 VM 擴充功能的應用程式。 您可以使用它在客體作業系統中插入錯誤。

啟用混亂目標和功能

接下來,在每個 VM 或虛擬機擴展集上設定 Microsoft 代理程式目標,以指定代理程式用來連線到 Chaos Studio 的使用者指派受控識別。 在此範例中,我們會針對所有 VM 使用一個受控識別。 必須透過 REST API 建立目標。 在此範例中 az rest ,我們使用 CLI 命令來執行 REST API 呼叫。

  1. 將 取代 $USER_IDENTITY_CLIENT_ID 為受控識別的用戶端標識碼,以修改下列 JSON。 您可以在所建立使用者指派受控識別的 Azure 入口網站 概觀中找到用戶端識別碼。 將取代 $USER_IDENTITY_TENANT_ID 為您的 Azure 租使用者標識碼。 您可以在 [租使用者資訊] 底下的 [Microsoft Entra ID] 底下的 [Azure 入口網站 中找到它。 將 JSON 儲存為您執行 Azure CLI 的相同位置中的檔案。 在 Cloud Shell 中,您可以拖放 JSON 檔案以上傳它。

    {
      "properties": {
        "identities": [
          {
            "clientId": "$USER_IDENTITY_CLIENT_ID",
            "tenantId": "$USER_IDENTITY_TENANT_ID",
            "type": "AzureManagedIdentity"
          }
        ]
      }
    }
    
  2. 將 取代 $RESOURCE_ID 為目標 VM 或虛擬機擴展集的資源識別碼,以建立目標。 將 取代 target.json 為您在上一個步驟中建立的 JSON 檔名。

    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
    

    如果您收到 PowerShell 剖析錯誤,請視本教學課程的建議切換到 Bash 終端機,或以單引弧括住參考的 JSON 檔案(--body '@target.json')。

  3. 複製此命令傳回之 agentProfileIdGUID,以供稍後步驟使用。

  4. 使用目標 VM 或虛擬機擴展集的資源識別碼取代 $RESOURCE_ID 來建立功能。 將 取代 $CAPABILITY 為您 開啟 的錯誤功能名稱(例如 , 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\":{}}"
    

    例如,如果您要啟用 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\":{}}"
    

安裝 Chaos Studio 虛擬機擴充功能

混亂代理程式是在 VM 或虛擬機擴展集實例中執行以執行代理程式型錯誤的應用程式。 在安裝期間,您可以設定:

  • 代理程式應用來向 Chaos Studio 進行驗證的受控識別代理程式。
  • 您所建立之 Microsoft-Agent 目標的設定文件識別碼。
  • 選擇性地是 Application Insights 檢測密鑰,可讓代理程式將診斷事件傳送至 Application Insights。
  1. 開始之前,請確定您有下列詳細資料:

    • agentProfileId:當您建立目標時所傳回的屬性。 如果您沒有這個屬性,您可以執行 az rest --method get --uri https://management.azure.com/$RESOURCE_ID/providers/Microsoft.Chaos/targets/Microsoft-Agent?api-version=2023-11-01 並複製 agentProfileId 屬性。
    • ClientId:目標中使用的使用者指派受控識別的用戶端標識碼。 如果您沒有這個屬性,您可以執行 az rest --method get --uri https://management.azure.com/$RESOURCE_ID/providers/Microsoft.Chaos/targets/Microsoft-Agent?api-version=2023-11-01 並複製 clientId 屬性。
    • (選擇性)AppInsightsKey:Application Insights 元件的檢測密鑰,您可以在入口網站的 [Essentials] 下方的 [Application Insights] 頁面上找到此密鑰。
  2. 安裝 Chaos Studio VM 擴充功能。 將 取代$VM_RESOURCE_ID為 VM 的資源識別碼,或將 $SUBSCRIPTION_ID$RESOURCE_GROUP$VMSS_NAME 取代為虛擬機擴展集的那些屬性。 將取代 $AGENT_PROFILE_ID 為代理程式設定檔識別碼。 將取代 $USER_IDENTITY_CLIENT_ID 為您受控識別的用戶端標識碼。 將取代 $APP_INSIGHTS_KEY 為您的 Application Insights 檢測密鑰。 如果您未使用 Application Insights,請移除該機碼/值組。

    默認代理程式虛擬機擴充功能組態的完整清單

    以下是 使用者所需的最小代理程式 VM 擴充 功能設定:

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

    以下是 代理程式 VM 擴充功能組態的所有值

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

    在虛擬機上安裝代理程式

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

    在虛擬機擴展集上安裝代理程式

    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. 如果您要設定虛擬機擴展集,請確認實例已升級至最新的模型。 如有需要,請升級模型中的所有實例。

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

建立實驗

成功部署 VM 之後,您現在可以建立實驗。 混亂實驗會定義您想要針對目標資源採取的動作。 動作會以循序步驟組織並執行。 混亂實驗也會定義您想要針對平行執行的分支採取的動作。

  1. 從下列 JSON 範例開始,制定實驗 JSON。 修改 JSON 以對應至您想要使用 建立實驗 API錯誤連結庫執行的實驗。

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

    如果您針對虛擬機擴展集執行,請修改錯誤參數以包含要設為目標的實例編號:

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

    您可以移至虛擬機擴展集,然後選取 [實例],以識別 Azure 入口網站 中的擴展集實例編號。 實例名稱會在實例編號中結束。

  2. 使用 Azure CLI 建立實驗。 將、 $RESOURCE_GROUP$EXPERIMENT_NAME 取代$SUBSCRIPTION_ID為您實驗的屬性。 請確定您已儲存並上傳實驗 JSON。 使用您的 JSON 檔名進行更新 experiment.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
    

    每個實驗都會建立對應的系統指派受控識別。 在下一個步驟的回應中,記下此身分識別的主體標識碼。

授與虛擬機的實驗許可權

當您建立混亂實驗時,Chaos Studio 會建立系統指派的受控識別,以針對目標資源執行錯誤。 此身分識別必須授 與目標資源的適當許可權 ,實驗才能順利執行。 代理程式型錯誤需要讀取器角色。 沒有 */讀取許可權的其他角色,例如虛擬機參與者,不會授與代理程式型錯誤的適當許可權。

使用下列命令,為您的 VM 或虛擬機擴展集提供實驗存取權。 將取代 $EXPERIMENT_PRINCIPAL_ID 為上一個步驟中的主體標識碼。 將取代 $RESOURCE_ID 為目標 VM 或虛擬機擴展集的資源識別碼。 請務必使用 VM 的資源識別碼,而不是實驗定義中使用的混亂代理程式資源識別碼。 針對實驗中目標的每個 VM 或虛擬機擴展集執行此命令。

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

執行您的實驗

您現在已準備好執行實驗。 若要查看效果,建議您在不同的瀏覽器索引標籤中開啟 具有 VM CPU 壓力的 Azure 監視器計量圖表

  1. 使用 Azure CLI 啟動實驗。 將、 $RESOURCE_GROUP$EXPERIMENT_NAME 取代$SUBSCRIPTION_ID為您實驗的屬性。

    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. 回應包含狀態 URL,您可以在實驗執行時用來查詢實驗狀態。

下一步

現在您已執行代理程式型實驗,您已準備好: