Compartilhar 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-as em um ambiente controlado. Neste artigo, você causa uma alta porcentagem de evento de utilização de CPU em uma VM (máquina virtual) do Linux usando um teste do caos e o Azure Chaos Studio. A execução desse experimento pode ajudá-lo a se proteger de um aplicativo que fica 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 instalação do agente caos. Uma falha direta de serviço é executada diretamente em um recurso do Azure sem a necessidade de instrumentação.

Pré-requisitos

Abrir o Azure Cloud Shell

O Azure Cloud Shell é um shell interativo gratuito que pode ser usado para executar as etapas neste artigo. Ele tem ferramentas do Azure instaladas e configuradas para usar com sua conta.

Para abrir o Cloud Shell, selecione Experimentar 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 até Bash. Selecione Copiar para copiar os blocos de código, cole-o no Cloud Shell e selecione Enter para executá-lo.

Se preferir instalar e usar a CLI localmente, este tutorial exigirá a CLI do Azure versão 2.0.30 ou posterior. Execute az --version para encontrar a versão. Se você precisa instalar ou atualizar, consulte Instalar a CLI do Azure.

Observação

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

Atribuir uma 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 dimensionamento de máquinas virtuais em que você planeja instalar o agente. Use o comando az vm identity assign ou az vmss identity assign. Substitua $VM_RESOURCE_ID/$VMSS_RESOURCE_ID pela ID do recurso da VM que você está adicionando como um destino de caos. Substitua $MANAGED_IDENTITY_RESOURCE_ID pela ID do recurso de uma identidade atribuída pelo usuário.

Máquina virtual

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

Conjunto de escala de máquina virtual

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

Habilitar o Chaos Studio na máquina virtual

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

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

Habilitar o alvo e os recursos do caos

Em seguida, configure um destino Microsoft-Agent em cada VM ou conjunto de dimensionamento de máquinas virtuais que especifica a identidade gerenciada atribuída pelo usuário que o agente usará para se conectar ao Chaos Studio. Neste exemplo, usamos uma identidade gerenciada para todas as VMs. Um destino deve ser criado por meio da API REST. Neste exemplo, usamos o comando az rest da CLI para executar as chamadas à API REST.

  1. Modifique o JSON a seguir substituindo $USER_IDENTITY_CLIENT_ID pela ID do cliente de 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 pela sua ID de locatário do Azure AD. Você pode encontrá-la no portal do Azure em Microsoft Entra ID e Informações do Locatário. Salve o JSON como arquivo no mesmo local em que 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 pela ID do recurso da VM de destino ou do conjunto de dimensionamento de máquinas virtuais. Substitua target.json pelo nome do arquivo JSON que você criou 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 envolva o arquivo JSON referenciado entre aspas simples (--body '@target.json').

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

  4. Crie os recursos substituindo $RESOURCE_ID pela ID do recurso da VM de destino ou do conjunto de dimensionamento de máquinas virtuais. Substitua $CAPABILITY pelo nome da funcionalidade de falha que você está habilitando (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 habilitando a capacidade 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 da máquina virtual do Chaos Studio

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

  • O agente com a identidade gerenciada que o agente deve usar para autenticar no Chaos Studio.
  • A ID do 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 você tenha o seguinte:

    • agentProfileId: a propriedade retornada quando você cria o destino. Se você não tiver essa propriedade, poderá executar az rest --method get --uri https://management.azure.com/$RESOURCE_ID/providers/Microsoft.Chaos/targets/Microsoft-Agent?api-version=2023-11-01 e copiar a propriedade 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á executar az rest --method get --uri https://management.azure.com/$RESOURCE_ID/providers/Microsoft.Chaos/targets/Microsoft-Agent?api-version=2023-11-01 e copiar a propriedade clientId.
    • (opcionalmente) AppInsightsKey - a chave de instrumentação para seu componente do Application Insights, que pode ser encontrada 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 de sua VM ou substitua $SUBSCRIPTION_ID, $RESOURCE_GROUP e $VMSS_NAME por essas propriedades para o conjunto de dimensionamento de máquinas virtuais. Substitua $AGENT_PROFILE_ID pela ID do perfil do agente. Substitua $USER_IDENTITY_CLIENT_ID pela ID do cliente de 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 de chave/valor.

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

    Aqui está a configuração mínima de extensão de 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 de extensão de 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.
        }
    }
    

    Instale o agente em uma máquina virtual

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

    Instale o agente em um conjunto de dimensionamento de máquinas virtuais

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

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

Criar uma experiência

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

  1. Formule o JSON do experimento começando com o exemplo JSON a seguir. Modifique o JSON para corresponder ao experimento que você deseja executar usando a API Criar Experimento e a biblioteca de falhas.

    {
      "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 estiver executando em um conjunto de dimensionamento de máquinas virtuais, modifique os parâmetros de falha para incluir os números de instância para o destino:

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

    Você pode identificar os números de instância do conjunto de dimensionamento no portal do Azure acessando o conjunto de dimensionamento de máquinas virtuais 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_GROUP e $EXPERIMENT_NAME com as propriedades do experimento. Verifique se você salvou e carregou o JSON do experimento. 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 pelo sistema correspondente. Observe a ID da entidade de segurança dessa identidade na resposta para a próxima etapa.

Dê permissão de experimento à sua máquina virtual

Quando você cria um experimento de caos, o Chaos Studio cria uma identidade gerenciada atribuída pelo sistema que executa falhas nos recursos de destino. Essa identidade deve receber as 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 a permissão */Read, como Colaborador de máquina virtual, não concederão a permissão apropriada para falhas baseadas em agente.

Dê ao experimento acesso à VM ou ao conjunto de dimensionamento de máquinas virtuais usando o comando a seguir. Substitua $EXPERIMENT_PRINCIPAL_ID pela ID da entidade de segurança da etapa anterior. Substitua $RESOURCE_ID pela ID do recurso da VM de destino ou do conjunto de dimensionamento de máquinas virtuais. Use a ID do recurso da VM, não a ID do recurso do agente caos usado na definição do experimento. Execute este comando para cada máquina virtual ou conjunto de dimensionamento de máquinas virtuais direcionado ao seu experimento.

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

Executar o experimento

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 VM em uma guia separada do navegador.

  1. Inicie o experimento usando a CLI do Azure. Substitua $SUBSCRIPTION_ID, $RESOURCE_GROUP e $EXPERIMENT_NAME com as propriedades do 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 ele é executado.

Próximas etapas

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