Usar um alerta para disparar um runbook de Automação do Azure
Você pode usar o Azure Monitor para monitorar métricas e logs de nível básico para a maioria dos serviços no Azure. Você pode chamar runbooks de Automação do Azure usando grupos de ação para automatizar tarefas com base em alertas. Este artigo mostra como configurar e executar um runbook usando alertas.
Pré-requisitos
- Uma conta da Automatização do Azure com, pelo menos, uma identidade gerida atribuída pelo utilizador. Para obter mais informações, consulte Usando uma identidade gerenciada atribuída pelo usuário para uma conta de Automação do Azure.
- Módulos Az:
Az.Accounts
eAz.Compute
importados para a conta de automação. Para mais informações, consulte Importar módulos Az. - Uma máquina virtual do Azure.
- O módulo Azure Az PowerShell instalado em sua máquina. Para instalar ou atualizar, consulte Como instalar o módulo Azure Az PowerShell.
- Uma familiaridade geral com runbooks de automação.
Tipos de alerta
Você pode usar runbooks de automação com três tipos de alerta:
- Alertas comuns
- Alertas do registo de atividades
- Alertas métricos quase em tempo real
Nota
O esquema de alerta comum padroniza a experiência de consumo para notificações de alerta no Azure. Historicamente, os três tipos de alerta no Azure (métrica, log e log de atividades) tinham seus próprios modelos de email, esquemas de webhook, etc. Para saber mais, consulte Esquema de alerta comum.
Quando um alerta chama um runbook, a chamada real é uma solicitação HTTP POST para o webhook. O corpo da solicitação POST contém um objeto formatado em JSON que tem propriedades úteis relacionadas ao alerta. A tabela a seguir lista links para o esquema de carga útil para cada tipo de alerta:
Alerta | Description | Esquema de carga útil |
---|---|---|
Alerta comum | O esquema de alerta comum que padroniza a experiência de consumo para notificações de alerta no Azure hoje. | Esquema de carga útil de alerta comum. |
Alerta de registo de atividades | Envia uma notificação quando qualquer novo evento no log de atividades do Azure corresponde a condições específicas. Por exemplo, quando uma Delete VM operação ocorre em myProductionResourceGroup ou quando um novo evento de Integridade do Serviço do Azure com um status Ativo aparece. |
Esquema de carga útil de alerta do registro de atividades |
Alerta métrico quase em tempo real | Envia uma notificação mais rapidamente do que os alertas de métrica quando uma ou mais métricas no nível da plataforma atendem às condições especificadas. Por exemplo, quando o valor de % de CPU em uma VM é maior que 90 e o valor de Network In é maior que 500 MB nos últimos 5 minutos. | Esquema de carga útil de alerta métrico quase em tempo real |
Como os dados fornecidos por cada tipo de alerta são diferentes, cada tipo de alerta é tratado de forma diferente. Na próxima seção, você aprenderá a criar um runbook para lidar com diferentes tipos de alertas.
Atribuir permissões a identidades geridas
Atribua permissões à identidade gerenciada apropriada para permitir que ela pare uma máquina virtual. O runbook pode usar a identidade gerenciada atribuída pelo sistema da conta de automação ou uma identidade gerenciada atribuída pelo usuário. São fornecidas etapas para atribuir permissões a cada identidade. As etapas abaixo usam o PowerShell. Se preferir usar o Portal, consulte Atribuir funções do Azure usando o portal do Azure.
Entre no Azure interativamente usando o cmdlet Connect-AzAccount e siga as instruções.
# Sign in to your Azure subscription $sub = Get-AzSubscription -ErrorAction SilentlyContinue if(-not($sub)) { Connect-AzAccount } # If you have multiple subscriptions, set the one to use # Select-AzSubscription -SubscriptionId <SUBSCRIPTIONID>
Forneça um valor apropriado para as variáveis abaixo e, em seguida, execute o script.
$resourceGroup = "resourceGroup" $automationAccount = "AutomationAccount" $userAssignedManagedIdentity = "userAssignedManagedIdentity"
Use o cmdlet do PowerShell New-AzRoleAssignment para atribuir uma função à identidade gerenciada atribuída ao sistema.
$SAMI = (Get-AzAutomationAccount -ResourceGroupName $resourceGroup -Name $automationAccount).Identity.PrincipalId New-AzRoleAssignment ` -ObjectId $SAMI ` -ResourceGroupName $resourceGroup ` -RoleDefinitionName "DevTest Labs User"
Atribua uma função a uma identidade gerenciada atribuída pelo usuário.
$UAMI = (Get-AzUserAssignedIdentity -ResourceGroupName $resourceGroup -Name $userAssignedManagedIdentity) New-AzRoleAssignment ` -ObjectId $UAMI.PrincipalId ` -ResourceGroupName $resourceGroup ` -RoleDefinitionName "DevTest Labs User"
Para a identidade gerenciada atribuída ao sistema, mostre
ClientId
e registre o valor para uso posterior.$UAMI.ClientId
Criar um runbook para lidar com alertas
Para usar a automação com alertas, você precisa de um runbook que gerencie a carga JSON de alerta que é passada para o runbook. O runbook de exemplo a seguir deve ser chamado a partir de um alerta do Azure.
Conforme descrito na seção anterior, cada tipo de alerta tem um esquema diferente. O script obtém os dados do webhook de um alerta no WebhookData
parâmetro de entrada runbook. Em seguida, o script avalia a carga JSON para determinar qual tipo de alerta está sendo usado.
Este exemplo utiliza um alerta de uma máquina virtual (VM) do Azure. Ele extrai os dados da VM da carga útil, especificamente do recurso de destino do alerta acionado e, em seguida, utiliza essas informações para parar a VM. A conexão deve ser configurada na conta de automação onde o runbook é executado. Ao usar alertas para disparar runbooks, é importante verificar o status do alerta no runbook que é acionado. O runbook é acionado sempre que o alerta muda de estado. Os alertas têm vários estados, sendo os dois mais comuns Ativado e Resolvido. Verifique o estado na lógica do runbook para garantir que o runbook não seja executado mais de uma vez. O exemplo neste artigo mostra como procurar alertas apenas com o estado Ativado.
O runbook usa a identidade gerenciada atribuída ao sistema da conta de automação para autenticar com o Azure para executar a ação de gerenciamento na VM. O runbook pode ser facilmente modificado para usar uma identidade gerenciada atribuída pelo usuário.
Nota
Recomendamos que você use o acesso à rede pública, pois não é possível usar um alerta do Azure (métrica, log e log de atividades) para acionar um webhook de Automação quando a conta de Automação estiver usando links privados e configurada com Acesso público definido como Desabilitar.
Use este exemplo para criar um runbook chamado Stop-AzureVmInResponsetoVMAlert. Você pode modificar o script do PowerShell e usá-lo com muitos recursos diferentes.
Entre no portal do Azure e navegue até sua conta de automação.
Em Automação de processos, selecione Runbooks.
Selecione + Criar um runbook.
- Nomeie o runbook
Stop-AzureVmInResponsetoVMAlert
. - Na lista suspensa Tipo de runbook, selecione PowerShell.
- Selecione Criar.
- Nomeie o runbook
No editor de runbook, cole o seguinte código:
[OutputType("PSAzureOperationResponse")] param ( [Parameter (Mandatory=$false)] [object] $WebhookData ) $ErrorActionPreference = "stop" if ($WebhookData) { # Get the data object from WebhookData $WebhookBody = (ConvertFrom-Json -InputObject $WebhookData.RequestBody) # Get the info needed to identify the VM (depends on the payload schema) $schemaId = $WebhookBody.schemaId Write-Verbose "schemaId: $schemaId" -Verbose if ($schemaId -eq "azureMonitorCommonAlertSchema") { # This is the common Metric Alert schema (released March 2019) $Essentials = [object] ($WebhookBody.data).essentials # Get the first target only as this script doesn't handle multiple $alertTargetIdArray = (($Essentials.alertTargetIds)[0]).Split("/") $SubId = ($alertTargetIdArray)[2] $ResourceGroupName = ($alertTargetIdArray)[4] $ResourceType = ($alertTargetIdArray)[6] + "/" + ($alertTargetIdArray)[7] $ResourceName = ($alertTargetIdArray)[-1] $status = $Essentials.monitorCondition } elseif ($schemaId -eq "AzureMonitorMetricAlert") { # This is the near-real-time Metric Alert schema $AlertContext = [object] ($WebhookBody.data).context $SubId = $AlertContext.subscriptionId $ResourceGroupName = $AlertContext.resourceGroupName $ResourceType = $AlertContext.resourceType $ResourceName = $AlertContext.resourceName $status = ($WebhookBody.data).status } elseif ($schemaId -eq "Microsoft.Insights/activityLogs") { # This is the Activity Log Alert schema $AlertContext = [object] (($WebhookBody.data).context).activityLog $SubId = $AlertContext.subscriptionId $ResourceGroupName = $AlertContext.resourceGroupName $ResourceType = $AlertContext.resourceType $ResourceName = (($AlertContext.resourceId).Split("/"))[-1] $status = ($WebhookBody.data).status } elseif ($schemaId -eq $null) { # This is the original Metric Alert schema $AlertContext = [object] $WebhookBody.context $SubId = $AlertContext.subscriptionId $ResourceGroupName = $AlertContext.resourceGroupName $ResourceType = $AlertContext.resourceType $ResourceName = $AlertContext.resourceName $status = $WebhookBody.status } else { # Schema not supported Write-Error "The alert data schema - $schemaId - is not supported." } Write-Verbose "status: $status" -Verbose if (($status -eq "Activated") -or ($status -eq "Fired")) { Write-Verbose "resourceType: $ResourceType" -Verbose Write-Verbose "resourceName: $ResourceName" -Verbose Write-Verbose "resourceGroupName: $ResourceGroupName" -Verbose Write-Verbose "subscriptionId: $SubId" -Verbose # Determine code path depending on the resourceType if ($ResourceType -eq "Microsoft.Compute/virtualMachines") { # This is an Resource Manager VM Write-Verbose "This is an Resource Manager VM." -Verbose # Ensures you do not inherit an AzContext in your runbook Disable-AzContextAutosave -Scope Process # Connect to Azure with system-assigned managed identity $AzureContext = (Connect-AzAccount -Identity).context # set and store context $AzureContext = Set-AzContext -SubscriptionName $AzureContext.Subscription -DefaultProfile $AzureContext # Stop the Resource Manager VM Write-Verbose "Stopping the VM - $ResourceName - in resource group - $ResourceGroupName -" -Verbose Stop-AzVM -Name $ResourceName -ResourceGroupName $ResourceGroupName -DefaultProfile $AzureContext -Force # [OutputType(PSAzureOperationResponse")] } else { # ResourceType not supported Write-Error "$ResourceType is not a supported resource type for this runbook." } } else { # The alert status was not 'Activated' or 'Fired' so no action taken Write-Verbose ("No action taken. Alert status: " + $status) -Verbose } } else { # Error Write-Error "This runbook is meant to be started from an Azure alert webhook only." }
Se você quiser que o runbook seja executado com a identidade gerenciada atribuída ao sistema, deixe o código como está. Se preferir usar uma identidade gerenciada atribuída pelo usuário, então:
- Da linha 78, retire,
$AzureContext = (Connect-AzAccount -Identity).context
- Substitua-o por
$AzureContext = (Connect-AzAccount -Identity -AccountId <ClientId>).context
, e - Introduza o ID de Cliente obtido anteriormente.
- Da linha 78, retire,
Selecione Salvar, Publicar e, em seguida, Sim quando solicitado.
Feche a página Runbook para retornar à página Conta de automação.
Criar o alerta
Os alertas usam grupos de ações, que são conjuntos de ações que são acionadas pelo alerta. Os runbooks são apenas uma das muitas ações que você pode usar com grupos de ação.
Na sua conta de Automação, em Monitorização, selecione Alertas.
Selecione + Nova Regra de Alerta para abrir a página Criar regra de alerta.
Em Escopo, selecione Editar recurso.
Na página Selecionar um recurso, na lista suspensa Filtrar por tipo de recurso, selecione Máquinas virtuais.
Marque a caixa ao lado da(s) máquina(s) virtual(is) que você deseja monitorar. Em seguida, selecione Concluído para retornar à página Criar regra de alerta.
Em Condição, selecione Adicionar condição.
Na página Selecione um sinal, digite
Percentage CPU
na caixa de texto de pesquisa e selecione Porcentagem de CPU nos resultados.Na página Configurar lógica de sinal, em Valor de limite, insira um valor baixo inicial para fins de teste, como
5
. Você pode voltar e atualizar esse valor depois de confirmar que o alerta funciona conforme o esperado. Em seguida, selecione Concluído para retornar à página Criar regra de alerta.Em Ações, selecione Adicionar grupos de ações e, em seguida, +Criar grupo de ações.
Na página Criar grupo de ações :
Na guia Noções básicas, insira um Nome do grupo de ações e Nome para exibição.
Na guia Ações, na caixa de texto Nome, digite um nome. Em seguida, na lista suspensa Tipo de ação , selecione Runbook de automação para abrir a página Configurar runbook .
Para o item de origem Runbook, selecione Usuário.
Na lista suspensa Assinatura, selecione sua assinatura.
Na lista suspensa Conta de automação, selecione sua conta de automação.
Na lista suspensa Runbook, selecione Stop-AzureVmInResponsetoVMAlert.
Para o item Habilitar o esquema de alerta comum, selecione Sim.
Selecione OK para retornar à página Criar grupo de ações .
Selecione Rever + criar e, em seguida, Criar para regressar à página Criar regra de alerta.
Em Detalhes da regra de alerta, para a caixa de texto Nome da regra de alerta.
Selecione Criar regra de alerta. Você pode usar o grupo de ações nos alertas de registro de atividades e alertas quase em tempo real que você criar.
Verificação
Verifique se sua VM está em execução. Navegue até o runbook Stop-AzureVmInResponsetoVMAlert e observe a lista de Trabalhos Recentes para preencher. Quando um trabalho concluído aparecer, selecione-o e revise a saída. Verifique também se a sua VM parou.
Operações comuns de gerenciamento de VM do Azure
A Automação do Azure fornece scripts para operações comuns de gerenciamento de VM do Azure, como reiniciar VM, parar VM, excluir VM, escalar cenários para cima e para baixo na galeria Runbook. Os scripts também podem ser encontrados no repositório GitHub de Automação do Azure Você também pode usar esses scripts conforme mencionado nas etapas acima.
Operações de gerenciamento de VM do Azure | Detalhes |
---|---|
Stop-Azure-VM-On-Alert | Este runbook interromperá uma VM do Azure Resource Manager em resposta a um gatilho de alerta do Azure. O recurso de destino do alerta acionado deve ser a VM a ser interrompida. Isso é passado em um parâmetro de entrada da carga útil de alerta acionada. O runbook deve ser chamado a partir de um alerta do Azure por meio de um webhook. A versão mais recente do módulo Az deve ser adicionada à conta de automação. A Identidade Gerenciada deve ser habilitada e o acesso do colaborador à conta de automação deve ser dado. |
Restart-Azure-VM-On-Alert | Este runbook interromperá uma VM do Azure Resource Manager em resposta a um gatilho de alerta do Azure. O recurso de destino do alerta acionado deve ser a VM a ser reiniciada. Isso é passado em um parâmetro de entrada da carga útil de alerta acionada. O runbook deve ser chamado a partir de um alerta do Azure por meio de um webhook. A versão mais recente do módulo Az deve ser adicionada à conta de automação. A Identidade Gerenciada deve ser habilitada e o acesso do colaborador à conta de automação deve ser dado. |
Excluir-Azure-VM-On-Alert | Este runbook interromperá uma VM do Azure Resource Manager em resposta a um gatilho de alerta do Azure. O recurso de destino do alerta acionado deve ser a VM a ser excluída. Isso é passado em um parâmetro de entrada da carga útil de alerta acionada. O runbook deve ser chamado a partir de um alerta do Azure por meio de um webhook. A versão mais recente do módulo Az deve ser adicionada à conta de automação. A Identidade Gerenciada deve ser habilitada e o acesso do colaborador à conta de automação deve ser dado. |
ScaleDown-Azure-VM-On-Alert | Este runbook interromperá uma VM do Azure Resource Manager em resposta a um gatilho de alerta do Azure. O recurso de destino do alerta acionado deve ser a VM para reduzir a escala. Isso é passado em um parâmetro de entrada da carga útil de alerta acionada. O runbook deve ser chamado a partir de um alerta do Azure por meio de um webhook. A versão mais recente do módulo Az deve ser adicionada à conta de automação. A Identidade Gerenciada deve ser habilitada e o acesso do colaborador à conta de automação deve ser dado. |
ScaleUp-Azure-VM-On-Alert | Este runbook interromperá uma VM do Azure Resource Manager em resposta a um gatilho de alerta do Azure. O recurso de destino do alerta acionado deve ser a VM a ser dimensionada. Isso é passado em um parâmetro de entrada da carga útil de alerta acionada. O runbook deve ser chamado a partir de um alerta do Azure por meio de um webhook. A versão mais recente do módulo Az deve ser adicionada à conta de automação. A Identidade Gerenciada deve ser habilitada e o acesso do colaborador à conta de automação deve ser dado. |
Próximos passos
- Saiba mais sobre como criar orçamento e associá-lo ao runbook de automação.
- Descubra diferentes maneiras de iniciar um runbook, consulte Iniciar um runbook.
- Crie um alerta de registro de atividades, consulte Criar alertas de registro de atividades.
- Saiba como criar um alerta quase em tempo real, consulte Criar uma regra de alerta no portal do Azure.