Configurar alertas de estado de funcionamento dos recursos com os modelos do Resource Manager
Este artigo mostrará como criar alertas de log de atividade 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 do Azure Az PowerShell para interagir com o Azure. Veja Instalar o Azure PowerShell para começar. 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ê precisará configurar algumas coisas com antecedência:
- Você precisa instalar o módulo do Azure PowerShell
- Você precisa criar ou reutilizar um Grupo de Ação configurado para notificá-lo
Instruções
Usando o PowerShell, faça logon no Azure usando sua conta e selecione a assinatura com a qual você deseja interagir
Login-AzAccount Select-AzSubscription -Subscription <subscriptionId>
Você pode usar
Get-AzSubscription
para listar as assinaturas às quais você tem acesso.Localizar e guardar 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 como
resourcehealthalert.json
(veja os detalhes abaixo)Criar 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 sucesso, 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 :
Observe que, 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 funcionará como escrito e irá inscrevê-lo para receber alertas para todos os eventos de integridade de recursos recém-ativados em todos os recursos em uma assinatura.
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. Saiba como podemos definir o escopo deste alerta para nos concentrarmos nos eventos que nos interessam abaixo.
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 no modelo acima.
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/d37urb3e-ed41-4670-9c19-02a1d2808ff9/resourcegroups/myRG/providers/microsoft.compute/virtualmachines/myVm"
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 wrapper para permitir que o anyOf
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 irá notificá-lo independentemente da status
propriedade.
Nota
Cada seção "anyOf" deve conter apenas um valor de tipo de campo.
Ajustar os alertas de Estado de Funcionamento 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: "Disponível", "Indisponível" e "Degradado". No entanto, em situações em que o corredor e o recurso do Azure não conseguem se comunicar, um status de integridade "Desconhecido" é relatado para o recurso e isso é considerado um evento de integridade "Ativo".
No entanto, quando um recurso relata "Desconhecido", é provável que seu status de integridade não tenha mudado desde o último relatório preciso. Se quiser eliminar alertas sobre eventos "Desconhecidos", 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 "Desconhecido". Esta alteração pode ser uma adição útil se os seus alertas forem enviados diretamente para o seu telemóvel ou e-mail.
Observe que é possível que as propriedades currentHealthStatus 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 informações adicionais do evento estejam disponíveis (por exemplo, causa). Portanto, usar a cláusula acima pode resultar em alguns alertas não sendo acionados, porque os valores properties.currentHealthStatus e properties.previousHealthStatus serão definidos como null.
Ajustando o alerta para evitar eventos iniciados pelo usuário
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
}
]
}
Observe que é 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 na notificação. Portanto, usar a cláusula acima pode resultar em um alerta não sendo acionado, porque o valor da propriedade properties.cause será definido como null.
Modelo de alerta Integridade do recurso completo
Usando os diferentes ajustes descritos na seção anterior, aqui está um modelo de exemplo que é configurado para maximizar a relação sinal/ruído. Tenha em mente as advertências observadas acima, onde os valores de propriedade currentHealthStatus, 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ê saberá 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: