Configurar alertas de estado de funcionamento dos recursos com os modelos do Resource Manager
Este artigo mostra como criar Alertas de Log de Atividades de Integridade de Recursos programaticamente usando modelos do Azure Resource Manager e o Azure PowerShell.
O Azure Resource Health mantém você informado sobre o status de integridade atual e histórico de seus recursos do Azure. Os alertas do Azure Resource Health podem notificá-lo quase em tempo real quando estes recursos sofrem uma alteração no estado de funcionamento. A criação de alertas de integridade de recursos permite programaticamente que os usuários criem e personalizem alertas em massa.
Nota
Recomendamos que utilize o módulo Azure Az do PowerShell para interagir com o Azure. Para começar, consulte Instalar o Azure PowerShell. Para saber como migrar para o módulo do Az PowerShell, veja Migrar o Azure PowerShell do AzureRM para o Az.
Pré-requisitos
Para seguir as instruções nesta página, você precisa configurar algumas coisas com antecedência:
- Instale o módulo do Azure PowerShell.
- Crie ou reutilize um Grupo de Ação configurado para notificá-lo.
Instruções
Use o PowerShell para fazer logon no Azure usando sua conta e selecione a assinatura com a qual você deseja interagir.
Login-AzAccount Select-AzSubscription -Subscription <subscriptionId>
Nota
Você pode usar
Get-AzSubscription
para listar as assinaturas às quais você tem acesso.Localize e guarde o ID completo do Azure Resource Manager para o seu Grupo de Ação.
(Get-AzActionGroup -ResourceGroupName <resourceGroup> -Name <actionGroup>).Id
Crie e salve um modelo do Gerenciador de Recursos para alertas de Integridade de Recursos conforme resourcehealthalert.json, consulte Opções de modelo do Gerenciador de Recursos para alertas de Integridade de Recursos.
Crie uma nova implantação do Azure Resource Manager usando este modelo.
New-AzResourceGroupDeployment -Name ExampleDeployment -ResourceGroupName <resourceGroup> -TemplateFile <path\to\resourcehealthalert.json>
Você será solicitado a digitar o Nome do Alerta e o ID do Recurso do Grupo de Ações copiados anteriormente:
Supply values for the following parameters: (Type !? for Help.) activityLogAlertName: <Alert Name> actionGroupResourceId: /subscriptions/<subscriptionId>/resourceGroups/<resourceGroup>/providers/microsoft.insights/actionGroups/<actionGroup>
Se tudo funcionou com êxito, você receberá uma confirmação no PowerShell.
DeploymentName : ExampleDeployment ResourceGroupName : <resourceGroup> ProvisioningState : Succeeded Timestamp : 11/8/2017 2:32:00 AM Mode : Incremental TemplateLink : Parameters : Name Type Value =============== ========= ========== activityLogAlertName String <Alert Name> activityLogAlertEnabled Bool True actionGroupResourceId String /... Outputs : DeploymentDebugLogLevel :
Se você estiver planejando automatizar totalmente esse processo, basta editar o modelo do Gerenciador de Recursos para não solicitar os valores na Etapa 5.
Opções de modelo do Gerenciador de Recursos para alertas de Integridade de Recursos
Você pode usar esse modelo base como ponto de partida para criar alertas de Integridade de Recursos. Este modelo funciona como escrito e inscreve você para receber alertas para todos os eventos de integridade de recursos recém-ativados em todos os recursos em uma assinatura.
Nota
Na parte inferior deste artigo, também incluímos um modelo de alerta mais complexo que deve aumentar a relação sinal/ruído para alertas de integridade de recursos em comparação com esse modelo.
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"activityLogAlertName": {
"type": "string",
"metadata": {
"description": "Unique name (within the Resource Group) for the Activity log alert."
}
},
"actionGroupResourceId": {
"type": "string",
"metadata": {
"description": "Resource Id for the Action group."
}
}
},
"resources": [
{
"type": "Microsoft.Insights/activityLogAlerts",
"apiVersion": "2017-04-01",
"name": "[parameters('activityLogAlertName')]",
"location": "Global",
"properties": {
"enabled": true,
"scopes": [
"[subscription().id]"
],
"condition": {
"allOf": [
{
"field": "category",
"equals": "ResourceHealth"
},
{
"field": "status",
"equals": "Active"
}
]
},
"actions": {
"actionGroups":
[
{
"actionGroupId": "[parameters('actionGroupResourceId')]"
}
]
}
}
}
]
}
No entanto, um alerta amplo como este geralmente não é recomendado. Na seção a seguir, você aprenderá como definir o escopo desse alerta para se concentrar nos eventos que nos interessam.
Ajustar o âmbito do alerta
Os alertas de integridade de recursos podem ser configurados para monitorar eventos em três escopos diferentes:
- Nível de Subscrição
- Nível do Grupo de Recursos
- Nível de recursos
O modelo de alerta é configurado no nível da assinatura, mas se você quiser configurar seu alerta para notificá-lo apenas sobre determinados recursos ou recursos dentro de um determinado grupo de recursos, basta modificar a scopes
seção neste modelo.
Para um escopo de nível de grupo de recursos, a seção de escopos deve ter a seguinte aparência:
"scopes": [
"/subscriptions/<subscription id>/resourcegroups/<resource group>"
],
E para um escopo de nível de recurso, a seção de escopo deve ter a seguinte aparência:
"scopes": [
"/subscriptions/<subscription id>/resourcegroups/<resource group>/providers/<resource>"
],
Por exemplo: "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/myRG/providers/microsoft.compute/virtualmachines/myVm"
Nota
Você pode ir para o portal do Azure e examinar a URL ao exibir seu recurso do Azure para obter essa cadeia de caracteres.
Ajustar os tipos de recursos que o alertam
Os alertas ao nível da subscrição ou do grupo de recursos podem ter diferentes tipos de recursos. Se você quiser limitar os alertas a apenas provenientes de um determinado subconjunto de tipos de recursos, você pode definir isso na condition
seção do modelo da seguinte forma:
"condition": {
"allOf": [
...,
{
"anyOf": [
{
"field": "resourceType",
"equals": "MICROSOFT.COMPUTE/VIRTUALMACHINES",
"containsAny": null
},
{
"field": "resourceType",
"equals": "MICROSOFT.STORAGE/STORAGEACCOUNTS",
"containsAny": null
},
...
]
}
]
},
Aqui, usamos o anyOf
wrapper para permitir que o alerta de integridade do recurso corresponda a qualquer uma das condições que especificamos, permitindo alertas direcionados a tipos de recursos específicos.
Ajustando os eventos de Integridade do Recurso que alertam você
Quando os recursos passam por um evento de saúde, eles podem passar por uma série de etapas que representam o estado do evento de saúde: Active
, In Progress
, Updated
, e Resolved
.
Você só pode querer ser notificado quando um recurso não estiver íntegro, caso em que você deseja configurar seu alerta para notificar apenas quando o status
for Active
. No entanto, se você quiser também ser notificado sobre as outras etapas, você pode adicionar esses detalhes como:
"condition": {
"allOf": [
...,
{
"anyOf": [
{
"field": "status",
"equals": "Active"
},
{
"field": "status",
"equals": "In Progress"
},
{
"field": "status",
"equals": "Resolved"
},
{
"field": "status",
"equals": "Updated"
}
]
}
]
}
Se você quiser ser notificado para todos os quatro estágios de eventos de saúde, você pode remover essa condição todos juntos, e o alerta notificará você independentemente da status
propriedade.
Nota
Cada seção "anyOf" deve conter apenas um valor de tipo de campo.
Ajustando os alertas de integridade do recurso para evitar eventos "Desconhecidos"
O Azure Resource Health pode relatar a integridade mais recente de seus recursos monitorando-os constantemente usando executores de teste. Os estados de saúde relevantes comunicados são: Available
, Unavailable
, e Degraded
. No entanto, em situações em que o corredor e o recurso do Azure não conseguem se comunicar, um status de Unknown
integridade é relatado para o recurso e isso é considerado um evento de integridade "Ativo".
No entanto, quando um recurso relata Unknown
, é provável que seu status de integridade não tenha mudado desde o último relatório preciso. Se quiser eliminar alertas sobre Unknown
eventos, você pode especificar essa lógica no modelo:
"condition": {
"allOf": [
...,
{
"anyOf": [
{
"field": "properties.currentHealthStatus",
"equals": "Available",
"containsAny": null
},
{
"field": "properties.currentHealthStatus",
"equals": "Unavailable",
"containsAny": null
},
{
"field": "properties.currentHealthStatus",
"equals": "Degraded",
"containsAny": null
}
]
},
{
"anyOf": [
{
"field": "properties.previousHealthStatus",
"equals": "Available",
"containsAny": null
},
{
"field": "properties.previousHealthStatus",
"equals": "Unavailable",
"containsAny": null
},
{
"field": "properties.previousHealthStatus",
"equals": "Degraded",
"containsAny": null
}
]
},
]
},
Neste exemplo, estamos notificando apenas sobre eventos em que o status de integridade atual e anterior não tem Unknown
. Esta alteração pode ser uma adição útil se os seus alertas forem enviados diretamente para o seu telemóvel ou e-mail.
É possível que as currentHealthStatus
propriedades e previousHealthStatus
sejam nulas em alguns eventos. Por exemplo, quando ocorre um evento Atualizado, é provável que o status de integridade do recurso não tenha sido alterado desde o último relatório, apenas que mais informações sobre o evento estejam disponíveis (por exemplo, causa). Portanto, usar a cláusula neste exemplo pode resultar em alguns alertas não sendo acionados, porque os properties.currentHealthStatus
valores e properties.previousHealthStatus
são definidos como null.
Ajustar o alerta para evitar eventos iniciados pelo utilizador
Os eventos de integridade do recurso podem ser acionados por eventos iniciados pela plataforma e pelo usuário. Pode fazer sentido enviar uma notificação apenas quando o evento de integridade for causado pela plataforma Azure.
É fácil configurar o alerta para filtrar apenas estes tipos de eventos:
"condition": {
"allOf": [
...,
{
"field": "properties.cause",
"equals": "PlatformInitiated",
"containsAny": null
}
]
}
É possível que o campo cause seja nulo em alguns eventos. Ou seja, ocorre uma transição de integridade (por exemplo, disponível para indisponível) e o evento é registrado imediatamente para evitar atrasos de notificação. Portanto, usar a cláusula neste exemplo pode resultar em um alerta não sendo acionado, porque o valor da properties.cause
propriedade será definido como null.
Modelo de alerta Integridade do recurso completo
Aqui está um modelo de exemplo que é configurado usando os ajustes descritos na seção anterior para maximizar a relação sinal/ruído. Tenha em mente as ressalvas mencionadas acima, onde os valores de currentHealthStatus
propriedade , previousHealthStatus
e cause podem ser nulos em alguns eventos.
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"activityLogAlertName": {
"type": "string",
"metadata": {
"description": "Unique name (within the Resource Group) for the Activity log alert."
}
},
"actionGroupResourceId": {
"type": "string",
"metadata": {
"description": "Resource Id for the Action group."
}
}
},
"resources": [
{
"type": "Microsoft.Insights/activityLogAlerts",
"apiVersion": "2017-04-01",
"name": "[parameters('activityLogAlertName')]",
"location": "Global",
"properties": {
"enabled": true,
"scopes": [
"[subscription().id]"
],
"condition": {
"allOf": [
{
"field": "category",
"equals": "ResourceHealth",
"containsAny": null
},
{
"anyOf": [
{
"field": "properties.currentHealthStatus",
"equals": "Available",
"containsAny": null
},
{
"field": "properties.currentHealthStatus",
"equals": "Unavailable",
"containsAny": null
},
{
"field": "properties.currentHealthStatus",
"equals": "Degraded",
"containsAny": null
}
]
},
{
"anyOf": [
{
"field": "properties.previousHealthStatus",
"equals": "Available",
"containsAny": null
},
{
"field": "properties.previousHealthStatus",
"equals": "Unavailable",
"containsAny": null
},
{
"field": "properties.previousHealthStatus",
"equals": "Degraded",
"containsAny": null
}
]
},
{
"anyOf": [
{
"field": "properties.cause",
"equals": "PlatformInitiated",
"containsAny": null
}
]
},
{
"anyOf": [
{
"field": "status",
"equals": "Active",
"containsAny": null
},
{
"field": "status",
"equals": "Resolved",
"containsAny": null
},
{
"field": "status",
"equals": "In Progress",
"containsAny": null
},
{
"field": "status",
"equals": "Updated",
"containsAny": null
}
]
}
]
},
"actions": {
"actionGroups": [
{
"actionGroupId": "[parameters('actionGroupResourceId')]"
}
]
}
}
}
]
}
No entanto, você sabe melhor quais configurações são eficazes para você, então use as ferramentas ensinadas nesta documentação para fazer sua própria personalização.
Próximos passos
Saiba mais sobre o Resource Health:
- Descrição geral do Azure Resource Health
- Os tipos de recursos e verificações do estado de funcionamento disponíveis através do Azure Resource Health
Criar alertas de integridade do serviço: