Share via


Criar um experimento de caos que usa uma falha baseada em agente com a CLI do Azure

Você pode usar um experimento de caos para verificar se seu aplicativo é resiliente a falhas, causando essas falhas em um ambiente controlado. Neste artigo, você causa uma alta % do evento de utilização da CPU em uma máquina virtual (VM) Linux usando um experimento de caos e o Azure Chaos Studio. Execute este experimento para ajudá-lo a se defender contra um aplicativo de ficar sem recursos.

Você pode usar essas mesmas etapas para configurar e executar um experimento para qualquer falha baseada em agente. Uma falha baseada em agente requer a configuração e a instalação do agente do caos. Uma falha direta de serviço é executada diretamente em um recurso do Azure sem qualquer necessidade de instrumentação.

Pré-requisitos

  • Uma subscrição do Azure. Se não tiver uma subscrição do Azure, crie uma conta gratuita do Azure antes de começar.
  • Uma máquina virtual executando um sistema operacional na lista de compatibilidade de versão. Se você não tiver uma VM, poderá criar uma.
  • Uma configuração de rede que permite que você SSH em sua VM.
  • Uma identidade gerenciada atribuída pelo usuário. Se você não tiver uma identidade gerenciada atribuída pelo usuário, poderá criar uma.

Abrir o Azure Cloud Shell

O Azure Cloud Shell é um shell interativo gratuito que você pode usar para executar as etapas neste artigo. Tem as ferramentas comuns do Azure pré-instaladas e configuradas para utilização com a sua conta.

Para abrir o Cloud Shell, selecione Experimente no canto superior direito de um bloco de código. Você também pode abrir o Cloud Shell em uma guia separada do navegador indo para Bash. Selecione Copiar para copiar os blocos de código, cole-o no Cloud Shell e selecione Enter para executá-lo.

Se você preferir instalar e usar a CLI localmente, este tutorial requer a CLI do Azure versão 2.0.30 ou posterior. Executar az --version para localizar a versão. Se precisar de instalar ou atualizar, veja Install Azure CLI (Instalar o Azure CLI).

Nota

Estas instruções usam um terminal Bash no Cloud Shell. Alguns comandos podem não funcionar como descrito se você executar a CLI localmente ou em um terminal do PowerShell.

Atribuir identidade gerenciada à máquina virtual

Antes de configurar o Chaos Studio na VM, atribua uma identidade gerenciada atribuída pelo usuário a cada VM ou conjunto de escala de máquina virtual onde você planeja instalar o agente. Use o az vm identity assign comando ou az vmss identity assign . Substitua $VM_RESOURCE_ID/$VMSS_RESOURCE_ID pelo ID de recurso da VM que você está adicionando como um destino de caos. Substitua $MANAGED_IDENTITY_RESOURCE_ID pelo ID de recurso da identidade gerenciada atribuída pelo usuário.

Máquina virtual

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

Conjuntos de dimensionamento de máquinas virtuais

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

Habilite o Chaos Studio em sua máquina virtual

O Chaos Studio não pode injetar falhas em uma VM, a menos que essa VM tenha sido adicionada ao Chaos Studio primeiro. Para adicionar uma VM ao Chaos Studio, crie um destino e recursos no recurso. Em seguida, você instala o agente do caos.

As máquinas virtuais têm dois tipos de destino. Um tipo de destino permite falhas diretas de serviço (onde nenhum agente é necessário). O outro tipo de destino permite falhas baseadas em agente (o que requer a instalação de um agente). O agente de caos é um aplicativo instalado em sua VM como uma extensão de VM. Você o usa para injetar falhas no sistema operacional convidado.

Habilite o alvo e os recursos do caos

Em seguida, configure um destino Microsoft-Agent em cada VM ou conjunto de escala de máquina virtual que especifique a identidade gerenciada atribuída pelo usuário que o agente usa para se conectar ao Chaos Studio. Neste exemplo, usamos uma identidade gerenciada para todas as VMs. Um destino deve ser criado via API REST. Neste exemplo, usamos o az rest comando CLI para executar as chamadas de API REST.

  1. Modifique o JSON a seguir substituindo $USER_IDENTITY_CLIENT_ID pelo ID do cliente da sua identidade gerenciada. Você pode encontrar a ID do cliente na visão geral do portal do Azure da identidade gerenciada atribuída pelo usuário que você criou. Substitua $USER_IDENTITY_TENANT_ID por sua ID de locatário do Azure. Você pode encontrá-lo no portal do Azure em Microsoft Entra ID em Informações do locatário. Salve o JSON como um arquivo no mesmo local onde você está executando a CLI do Azure. No Cloud Shell, você pode arrastar e soltar o arquivo JSON para carregá-lo.

    {
      "properties": {
        "identities": [
          {
            "clientId": "$USER_IDENTITY_CLIENT_ID",
            "tenantId": "$USER_IDENTITY_TENANT_ID",
            "type": "AzureManagedIdentity"
          }
        ]
      }
    }
    
  2. Crie o destino substituindo $RESOURCE_ID pelo ID do recurso da VM de destino ou do conjunto de dimensionamento da máquina virtual. Substitua target.json pelo nome do arquivo JSON criado na etapa anterior.

    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 você receber um erro de análise do PowerShell, alterne para um terminal Bash conforme recomendado para este tutorial ou coloque o arquivo JSON referenciado entre aspas simples (--body '@target.json').

  3. Copie o GUID do agentProfileId retornado por este comando para uso em uma etapa posterior.

  4. Crie os recursos substituindo $RESOURCE_ID pelo ID do recurso da VM de destino ou do conjunto de dimensionamento da máquina virtual. Substitua $CAPABILITYpelo nome do recurso de falha que você está ativando (por exemplo, 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\":{}}"
    

    Por exemplo, se você estiver ativando o recurso de pressão da 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\":{}}"
    

Instalar a extensão de máquina virtual Chaos Studio

O agente de caos é um aplicativo que é executado em sua VM ou máquina virtual dimensionar instâncias de conjunto para executar falhas baseadas em agente. Durante a instalação, você configura:

  • O agente com a identidade gerenciada que o agente deve usar para se autenticar no Chaos Studio.
  • A ID de perfil do destino Microsoft-Agent que você criou.
  • Opcionalmente, uma chave de instrumentação do Application Insights que permite que o agente envie eventos de diagnóstico para o Application Insights.
  1. Antes de começar, certifique-se de que tem os seguintes detalhes:

    • agentProfileId: A propriedade retornada quando você cria o destino. Se você não tiver essa propriedade, poderá executá-la az rest --method get --uri https://management.azure.com/$RESOURCE_ID/providers/Microsoft.Chaos/targets/Microsoft-Agent?api-version=2023-11-01 e copiá-la agentProfileId .
    • ClientId: A ID do cliente da identidade gerenciada atribuída pelo usuário usada no destino. Se você não tiver essa propriedade, poderá executá-la az rest --method get --uri https://management.azure.com/$RESOURCE_ID/providers/Microsoft.Chaos/targets/Microsoft-Agent?api-version=2023-11-01 e copiá-la clientId .
    • (Opcionalmente) AppInsightsKey: a chave de instrumentação para o componente Application Insights, que você pode encontrar na página Application Insights no portal em Essentials.
  2. Instale a extensão de VM do Chaos Studio. Substitua $VM_RESOURCE_ID pela ID do recurso da sua VM ou substitua $SUBSCRIPTION_ID, $RESOURCE_GROUPe $VMSS_NAME por essas propriedades para o seu conjunto de dimensionamento de máquina virtual. Substitua $AGENT_PROFILE_ID pelo ID do perfil do agente. Substitua $USER_IDENTITY_CLIENT_ID pelo ID do cliente da sua identidade gerenciada. Substitua $APP_INSIGHTS_KEY pela chave de instrumentação do Application Insights. Se você não estiver usando o Application Insights, remova esse par chave/valor.

    Lista completa da configuração padrão da extensão da máquina virtual do Agente

    Aqui está a configuração mínima de extensão vm do agente exigida pelo usuário:

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

    Aqui estão todos os valores para a configuração da extensão vm do 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.
        }
    }
    

    Instalar o agente em uma máquina virtual

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

    Instalar o agente em um conjunto de dimensionamento de máquina virtual

    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. Se você estiver configurando um conjunto de dimensionamento de máquina virtual, verifique se as instâncias foram atualizadas para o modelo mais recente. Se necessário, atualize todas as instâncias no modelo.

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

Criar uma experimentação

Depois de implantar com êxito sua VM, agora você pode criar seu experimento. Um experimento de caos define as ações que você deseja tomar em relação aos recursos de destino. As ações são organizadas e executadas em etapas sequenciais. O experimento do caos também define as ações que você deseja tomar contra ramificações, que são executadas em paralelo.

  1. Formule seu experimento JSON começando com o seguinte exemplo de JSON. Modifique o JSON para corresponder ao experimento que você deseja executar usando a API Create Experiment e a biblioteca de falhas.

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

    Se você estiver executando em um conjunto de dimensionamento de máquina virtual, modifique os parâmetros de falha para incluir os números de instância a serem direcionados:

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

    Você pode identificar números de instância do conjunto de escala no portal do Azure acessando seu conjunto de escala de máquina virtual e selecionando Instâncias. O nome da instância termina no número da instância.

  2. Crie o experimento usando a CLI do Azure. Substitua $SUBSCRIPTION_ID, $RESOURCE_GROUPe $EXPERIMENT_NAME pelas propriedades do seu experimento. Certifique-se de que guardou e carregou a sua experiência JSON. Atualize experiment.json com seu nome de arquivo 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
    

    Cada experimento cria uma identidade gerenciada atribuída ao sistema correspondente. Observe a ID principal dessa identidade na resposta para a próxima etapa.

Dê permissão ao experimento para sua máquina virtual

Quando você cria um experimento de caos, o Chaos Studio cria uma identidade gerenciada atribuída ao sistema que executa falhas contra seus recursos de destino. Essa identidade deve receber permissões apropriadas para o recurso de destino para que o experimento seja executado com êxito. A função Leitor é necessária para falhas baseadas em agente. Outras funções que não têm */permissão de Ler, como Colaborador de Máquina Virtual, não concederão permissão apropriada para falhas baseadas em agente.

Dê ao experimento acesso à sua VM ou conjunto de escala de máquina virtual usando o comando a seguir. Substitua $EXPERIMENT_PRINCIPAL_ID pelo ID principal da etapa anterior. Substitua $RESOURCE_ID pela ID do recurso da VM de destino ou do conjunto de dimensionamento da máquina virtual. Certifique-se de usar a ID de recurso da VM, não a ID de recurso do agente de caos usado na definição de experimento. Execute este comando para cada VM ou conjunto de dimensionamento de máquina virtual direcionado em seu experimento.

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

Execute a sua experiência

Agora você está pronto para executar seu experimento. Para ver o efeito, recomendamos que você abra um gráfico de métricas do Azure Monitor com a pressão da CPU da sua VM em uma guia separada do navegador.

  1. Inicie o experimento usando a CLI do Azure. Substitua $SUBSCRIPTION_ID, $RESOURCE_GROUPe $EXPERIMENT_NAME pelas propriedades do seu experimento.

    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. A resposta inclui uma URL de status que você pode usar para consultar o status do experimento à medida que o experimento é executado.

Próximos passos

Agora que você executou um experimento baseado em agente, está pronto para: