Criar um alerta de métrica nos Registos do Azure Monitor

Descrição geral

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.

Os Alertas de Métricas para Logs permitem que você aproveite os recursos de alertas métricos em um conjunto predefinido de logs nos Logs do Azure Monitor. Os logs monitorados, que podem ser coletados do Azure ou de computadores locais, são convertidos em métricas e, em seguida, monitorados com regras de alerta de métrica como qualquer outra métrica. Os logs suportados do Log Analytics são os seguintes:

Há muitos benefícios em usar Alertas de Métrica para Logs em vez de alertas de pesquisa de log baseados em consulta no Azure, alguns deles estão listados abaixo:

  • Os Alertas Métricos oferecem capacidade de monitoramento quase em tempo real e os Alertas Métricos para Logs bifurcam os dados da fonte de log para garantir o mesmo.
  • Os alertas métricos são stateful - notificando apenas uma vez quando o alerta é disparado e uma vez quando o alerta é resolvido; ao contrário dos alertas de pesquisa de registo, que são sem estado e continuam a disparar a cada intervalo se a condição de alerta for cumprida.
  • Os Alertas Métricos para Log fornecem múltiplas dimensões, permitindo a filtragem para valores específicos como Computadores, Tipo de SO, etc. mais simples; sem a necessidade de definir uma consulta complexa no Log Analytics.

Nota

A métrica e/ou dimensão específica só será mostrada se existirem dados para ela no período escolhido. Essas métricas estão disponíveis para clientes com espaços de trabalho do Azure Log Analytics.

Métricas e dimensões suportadas para logs

Os alertas de métricas suportam alertas para métricas que usam dimensões. Você pode usar dimensões para filtrar sua métrica para o nível certo. A lista completa de métricas suportadas para Logs é equivalente à lista de métricas do espaço de trabalho do Log Analytics.

Nota

Para exibir uma métrica com suporte extraída de um espaço de trabalho do Log Analytics por meio do Azure Monitor - Métricas, um alerta de métrica para log deve ser criado nessa métrica específica. As dimensões escolhidas no alerta de métrica para logs - só aparecerão para exploração por meio do Azure Monitor - Métricas.

Criação de alerta de métrica para o Log Analytics

Os dados métricos de logs populares são canalizados antes de serem processados no Log Analytics para o Azure Monitor - Métricas. Isso permite que os usuários aproveitem os recursos da plataforma métrica, bem como o alerta métrico - incluindo ter alertas com frequência tão baixa quanto 1 minuto. Abaixo estão listados os meios de criar um alerta métrico para logs.

Pré-requisitos para o Metric Alert for Logs

Antes que a Métrica para Logs coletados nos dados do Log Analytics funcione, o seguinte deve ser configurado e disponível:

  1. Espaço de trabalho do Ative Log Analytics: um espaço de trabalho válido e ativo do Log Analytics deve estar presente. Para obter mais informações, consulte Criar um espaço de trabalho do Log Analytics no portal do Azure.
  2. O agente está configurado para o Espaço de Trabalho do Log Analytics: o agente precisa ser configurado para VMs do Azure (e/ou) VMs locais para enviar dados para o Espaço de Trabalho do Log Analytics usado na etapa anterior. Para obter mais informações, consulte Log Analytics - Visão geral do agente.
  3. A solução Log Analytics suportada está instalada: a solução Log Analytics deve ser configurada e enviar dados para o espaço de trabalho do Log Analytics - as soluções suportadas são Contadores de desempenho para Windows & Linux, registros de pulsação para integridade do agente, gerenciamento de atualizações e dados de eventos.
  4. Soluções do Log Analytics configuradas para enviar logs: a solução do Log Analytics deve ter os logs/dados necessários correspondentes às métricas suportadas para espaços de trabalho do Log Analytics habilitados. Por exemplo, para % de memória disponível, o contador dele deve ser configurado na solução Contadores de desempenho primeiro.

Configurando o alerta métrico para logs

Os alertas de métricas podem ser criados e gerenciados usando o portal do Azure, Modelos do Gerenciador de Recursos, API REST, PowerShell e CLI do Azure. Como o Metric Alerts for Logs, é uma variante de alertas de métrica - uma vez que os pré-requisitos estejam concluídos, o alerta de métrica para logs pode ser criado para o espaço de trabalho especificado do Log Analytics. Todas as características e funcionalidades dos alertas métricos também serão aplicáveis aos alertas métricos para logs, incluindo esquema de carga útil, limites de cota aplicáveis e preço faturado.

Para obter detalhes passo a passo e exemplos - consulte criando e gerenciando alertas métricos. Especificamente, para Alertas de métricas para logs - siga as instruções para gerenciar alertas de métricas e garanta o seguinte:

  • O alerta de destino para métrica é um espaço de trabalho válido do Log Analytics
  • O sinal escolhido para o alerta de métrica para o espaço de trabalho selecionado do Log Analytics é do tipo Metric
  • Filtrar para condições específicas ou recursos usando filtros de dimensão; As métricas para logs são multidimensionais
  • Ao configurar a Lógica de Sinal, um único alerta pode ser criado para abranger vários valores de dimensão (como Computador)
  • Se não estiver usando o portal do Azure para criar um alerta de métrica para o espaço de trabalho selecionado do Log Analytics, o usuário deve primeiro criar manualmente uma regra explícita para converter dados de log em uma métrica usando o Azure Monitor - Regras de Consulta Agendada.

Nota

Ao criar um alerta de métrica para log por meio do portal do Azure - uma regra correspondente para converter dados de log em métrica por meio do Azure Monitor - as Regras de Consulta Agendada são criadas automaticamente em segundo plano, sem a necessidade de qualquer intervenção ou ação do usuário. Para alerta de métrica para logs criados usando meios diferentes do portal do Azure, consulte a seção Modelo de recurso para alertas de métrica para logs sobre meios de exemplo de criação de uma regra de conversão de log para métrica baseada em ScheduledQueryRule antes da criação do alerta de métrica - caso contrário, não haverá dados para o alerta de métrica nos logs criados.

Modelo de recurso para alertas métricos para logs

Como dito anteriormente, o processo de criação de alertas métricos para logs tem duas vertentes:

  1. Criar uma regra para extrair métricas de logs suportados usando a API scheduledQueryRule
  2. Criar um alerta de métrica para a métrica extraída do log (na etapa 1) e do espaço de trabalho do Log Analytics como um recurso de destino

Alertas métricos para logs com limite estático

Para conseguir o mesmo, pode-se usar o modelo de exemplo do Azure Resource Manager abaixo - onde a criação de um alerta de métrica de limite estático depende da criação bem-sucedida da regra para extrair métricas de logs por meio de scheduledQueryRule.

{
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "convertRuleName": {
            "type": "string",
            "minLength": 1,
            "metadata": {
                "description": "Name of the rule to convert log to metric"
            }
        },
        "convertRuleDescription": {
            "type": "string",
            "minLength": 1,
            "metadata": {
                "description": "Description for log converted to metric"
            }
        },
        "convertRuleRegion": {
            "type": "string",
            "minLength": 1,
            "metadata": {
                "description": "Name of the region used by workspace"
            }
        },
        "convertRuleStatus": {
            "type": "string",
            "defaultValue": "true",
            "metadata": {
                "description": "Specifies whether the log conversion rule is enabled"
            }
        },
        "convertRuleMetric": {
            "type": "string",
            "minLength": 1,
            "metadata": {
                "description": "Name of the metric once extraction done from logs."
            }
        },
        "alertName": {
            "type": "string",
            "minLength": 1,
            "metadata": {
                "description": "Name of the alert"
            }
        },
        "alertDescription": {
            "type": "string",
            "defaultValue": "This is a metric alert",
            "metadata": {
                "description": "Description of alert"
            }
        },
        "alertSeverity": {
            "type": "int",
            "defaultValue": 3,
            "allowedValues": [
                0,
                1,
                2,
                3,
                4
            ],
            "metadata": {
                "description": "Severity of alert {0,1,2,3,4}"
            }
        },
        "isEnabled": {
            "type": "bool",
            "defaultValue": true,
            "metadata": {
                "description": "Specifies whether the alert is enabled"
            }
        },
        "resourceId": {
            "type": "string",
            "minLength": 1,
            "metadata": {
                "description": "Full Resource ID of the resource emitting the metric that will be used for the comparison. For example: /subscriptions/00000000-0000-0000-0000-0000-00000000/resourceGroups/ResourceGroupName/providers/Microsoft.OperationalInsights/workspaces/workspaceName"
            }
        },
        "metricName": {
            "type": "string",
            "minLength": 1,
            "metadata": {
                "description": "Name of the metric used in the comparison to activate the alert."
            }
        },
        "operator": {
            "type": "string",
            "defaultValue": "GreaterThan",
            "allowedValues": [
                "Equals",
                "NotEquals",
                "GreaterThan",
                "GreaterThanOrEqual",
                "LessThan",
                "LessThanOrEqual"
            ],
            "metadata": {
                "description": "Operator comparing the current value with the threshold value."
            }
        },
        "threshold": {
            "type": "string",
            "defaultValue": "0",
            "metadata": {
                "description": "The threshold value at which the alert is activated."
            }
        },
        "timeAggregation": {
            "type": "string",
            "defaultValue": "Average",
            "allowedValues": [
                "Average",
                "Minimum",
                "Maximum",
                "Total"
            ],
            "metadata": {
                "description": "How the data that is collected should be combined over time."
            }
        },
        "windowSize": {
            "type": "string",
            "defaultValue": "PT5M",
            "metadata": {
                "description": "Period of time used to monitor alert activity based on the threshold. Must be between five minutes and one day. ISO 8601 duration format."
            }
        },
        "evaluationFrequency": {
            "type": "string",
            "defaultValue": "PT1M",
            "metadata": {
                "description": "how often the metric alert is evaluated represented in ISO 8601 duration format"
            }
        },
        "actionGroupId": {
            "type": "string",
            "defaultValue": "",
            "metadata": {
                "description": "The ID of the action group that is triggered when the alert is activated or deactivated"
            }
        }
    },
    "variables": {
        "convertRuleSourceWorkspace": {
            "SourceId": "/subscriptions/1234-56789-1234-567a/resourceGroups/resourceGroupName/providers/Microsoft.OperationalInsights/workspaces/workspaceName"
        }
    },
    "resources": [
        {
            "name": "[parameters('convertRuleName')]",
            "type": "Microsoft.Insights/scheduledQueryRules",
            "apiVersion": "2018-04-16",
            "location": "[parameters('convertRuleRegion')]",
            "properties": {
                "description": "[parameters('convertRuleDescription')]",
                "enabled": "[parameters('convertRuleStatus')]",
                "source": {
                    "dataSourceId": "[variables('convertRuleSourceWorkspace').SourceId]"
                },
                "action": {
                    "odata.type": "Microsoft.WindowsAzure.Management.Monitoring.Alerts.Models.Microsoft.AppInsights.Nexus.DataContracts.Resources.ScheduledQueryRules.LogToMetricAction",
                    "criteria": [{
                            "metricName": "[parameters('convertRuleMetric')]",
                            "dimensions": []
                        }
                    ]
                }
            }
        },
        {
            "name": "[parameters('alertName')]",
            "type": "Microsoft.Insights/metricAlerts",
            "location": "global",
            "apiVersion": "2018-03-01",
            "tags": {},
            "dependsOn":["[resourceId('Microsoft.Insights/scheduledQueryRules',parameters('convertRuleName'))]"],
            "properties": {
                "description": "[parameters('alertDescription')]",
                "severity": "[parameters('alertSeverity')]",
                "enabled": "[parameters('isEnabled')]",
                "scopes": ["[parameters('resourceId')]"],
                "evaluationFrequency":"[parameters('evaluationFrequency')]",
                "windowSize": "[parameters('windowSize')]",
                "criteria": {
                    "odata.type": "Microsoft.Azure.Monitor.SingleResourceMultipleMetricCriteria",
                    "allOf": [
                        {
                            "name" : "1st criterion",
                            "metricName": "[parameters('metricName')]",
                            "dimensions":[],
                            "operator": "[parameters('operator')]",
                            "threshold" : "[parameters('threshold')]",
                            "timeAggregation": "[parameters('timeAggregation')]"
                        }
                    ]
                },
                "actions": [
                    {
                        "actionGroupId": "[parameters('actionGroupId')]"
                    }
                ]
            }
        }
    ]
}

Digamos que o JSON acima seja salvo como metricfromLogsAlertStatic.json - então ele pode ser acoplado a um arquivo JSON de parâmetro para a criação baseada em Modelo de Recurso. Um arquivo JSON de parâmetro de exemplo está listado abaixo:

{
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "convertRuleName": {
            "value": "TestLogtoMetricRule" 
        },
        "convertRuleDescription": {
            "value": "Test rule to extract metrics from logs via template"
        },
        "convertRuleRegion": {
            "value": "West Central US"
        },
        "convertRuleStatus": {
            "value": "true"
        },
        "convertRuleMetric": {
            "value": "Average_% Idle Time"
        },
        "alertName": {
            "value": "TestMetricAlertonLog"
        },
        "alertDescription": {
            "value": "New multi-dimensional metric alert created via template"
        },
        "alertSeverity": {
            "value":3
        },
        "isEnabled": {
            "value": true
        },
        "resourceId": {
            "value": "/subscriptions/1234-56789-1234-567a/resourceGroups/myRG/providers/Microsoft.OperationalInsights/workspaces/workspaceName"
        },
        "metricName":{
            "value": "Average_% Idle Time"
        },
        "operator": {
            "value": "GreaterThan"
        },
        "threshold":{
            "value": "1"
        },
        "timeAggregation":{
            "value": "Average"
        },
        "actionGroupId": {
            "value": "/subscriptions/1234-56789-1234-567a/resourceGroups/myRG/providers/microsoft.insights/actionGroups/actionGroupName"
        }
    }
}

Supondo que o arquivo de parâmetros acima seja salvo como metricfromLogsAlertStatic.parameters.json; em seguida, pode-se criar um alerta de métrica para logs usando o Modelo de Recursos para criação no portal do Azure.

Como alternativa, pode-se usar o comando do Azure PowerShell abaixo também:

New-AzResourceGroupDeployment -ResourceGroupName "myRG" -TemplateFile metricfromLogsAlertStatic.json TemplateParameterFile metricfromLogsAlertStatic.parameters.json

Ou use implantar o Modelo de Recursos usando a CLI do Azure:

az deployment group create --resource-group myRG --template-file metricfromLogsAlertStatic.json --parameters @metricfromLogsAlertStatic.parameters.json

Alertas métricos para logs com limites dinâmicos

Para conseguir o mesmo, pode-se usar o modelo de exemplo do Azure Resource Manager abaixo - onde a criação de um alerta de métrica de Limites Dinâmicos depende da criação bem-sucedida da regra para extrair métricas de logs por meio de scheduledQueryRule.

{
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "convertRuleName": {
            "type": "string",
            "minLength": 1,
            "metadata": {
                "description": "Name of the rule to convert log to metric"
            }
        },
        "convertRuleDescription": {
            "type": "string",
            "minLength": 1,
            "metadata": {
                "description": "Description for log converted to metric"
            }
        },
        "convertRuleRegion": {
            "type": "string",
            "minLength": 1,
            "metadata": {
                "description": "Name of the region used by workspace"
            }
        },
        "convertRuleStatus": {
            "type": "string",
            "defaultValue": "true",
            "metadata": {
                "description": "Specifies whether the log conversion rule is enabled"
            }
        },
        "convertRuleMetric": {
            "type": "string",
            "minLength": 1,
            "metadata": {
                "description": "Name of the metric once extraction done from logs."
            }
        },
        "alertName": {
            "type": "string",
            "minLength": 1,
            "metadata": {
                "description": "Name of the alert"
            }
        },
        "alertDescription": {
            "type": "string",
            "defaultValue": "This is a metric alert",
            "metadata": {
                "description": "Description of alert"
            }
        },
        "alertSeverity": {
            "type": "int",
            "defaultValue": 3,
            "allowedValues": [
                0,
                1,
                2,
                3,
                4
            ],
            "metadata": {
                "description": "Severity of alert {0,1,2,3,4}"
            }
        },
        "isEnabled": {
            "type": "bool",
            "defaultValue": true,
            "metadata": {
                "description": "Specifies whether the alert is enabled"
            }
        },
        "resourceId": {
            "type": "string",
            "minLength": 1,
            "metadata": {
                "description": "Full Resource ID of the resource emitting the metric that will be used for the comparison. For example: /subscriptions/00000000-0000-0000-0000-0000-00000000/resourceGroups/ResourceGroupName/providers/Microsoft.OperationalInsights/workspaces/workspaceName"
            }
        },
        "metricName": {
            "type": "string",
            "minLength": 1,
            "metadata": {
                "description": "Name of the metric used in the comparison to activate the alert."
            }
        },
        "operator": {
            "type": "string",
            "defaultValue": "GreaterOrLessThan",
            "allowedValues": [
                "GreaterThan",
                "LessThan",
                "GreaterOrLessThan"
            ],
            "metadata": {
                "description": "Operator comparing the current value with the threshold value."
            }
        },
        "alertSensitivity": {
            "type": "string",
            "defaultValue": "Medium",
            "allowedValues": [
                "High",
                "Medium",
                "Low"
            ],
            "metadata": {
                "description": "Tunes how 'noisy' the Dynamic Thresholds alerts will be: 'High' will result in more alerts while 'Low' will result in fewer alerts."
            }
        },
        "numberOfEvaluationPeriods": {
            "type": "string",
            "defaultValue": "4",
            "metadata": {
                "description": "The number of periods to check in the alert evaluation."
            }
        },
        "minFailingPeriodsToAlert": {
            "type": "string",
            "defaultValue": "3",
            "metadata": {
                "description": "The number of unhealthy periods to alert on (must be lower or equal to numberOfEvaluationPeriods)."
            }
        },
        "timeAggregation": {
            "type": "string",
            "defaultValue": "Average",
            "allowedValues": [
                "Average",
                "Minimum",
                "Maximum",
                "Total"
            ],
            "metadata": {
                "description": "How the data that is collected should be combined over time."
            }
        },
        "windowSize": {
            "type": "string",
            "defaultValue": "PT5M",
            "metadata": {
                "description": "Period of time used to monitor alert activity based on the threshold. Must be between five minutes and one day. ISO 8601 duration format."
            }
        },
        "evaluationFrequency": {
            "type": "string",
            "defaultValue": "PT1M",
            "metadata": {
                "description": "how often the metric alert is evaluated represented in ISO 8601 duration format"
            }
        },
        "actionGroupId": {
            "type": "string",
            "defaultValue": "",
            "metadata": {
                "description": "The ID of the action group that is triggered when the alert is activated or deactivated"
            }
        }
    },
    "variables": {
        "convertRuleSourceWorkspace": {
            "SourceId": "/subscriptions/1234-56789-1234-567a/resourceGroups/resourceGroupName/providers/Microsoft.OperationalInsights/workspaces/workspaceName"
        }
    },
    "resources": [
        {
            "name": "[parameters('convertRuleName')]",
            "type": "Microsoft.Insights/scheduledQueryRules",
            "apiVersion": "2018-04-16",
            "location": "[parameters('convertRuleRegion')]",
            "properties": {
                "description": "[parameters('convertRuleDescription')]",
                "enabled": "[parameters('convertRuleStatus')]",
                "source": {
                    "dataSourceId": "[variables('convertRuleSourceWorkspace').SourceId]"
                },
                "action": {
                    "odata.type": "Microsoft.WindowsAzure.Management.Monitoring.Alerts.Models.Microsoft.AppInsights.Nexus.DataContracts.Resources.ScheduledQueryRules.LogToMetricAction",
                    "criteria": [{
                            "metricName": "[parameters('convertRuleMetric')]",
                            "dimensions": []
                        }
                    ]
                }
            }
        },
        {
            "name": "[parameters('alertName')]",
            "type": "Microsoft.Insights/metricAlerts",
            "location": "global",
            "apiVersion": "2018-03-01",
            "tags": {},
            "dependsOn":["[resourceId('Microsoft.Insights/scheduledQueryRules',parameters('convertRuleName'))]"],
            "properties": {
                "description": "[parameters('alertDescription')]",
                "severity": "[parameters('alertSeverity')]",
                "enabled": "[parameters('isEnabled')]",
                "scopes": ["[parameters('resourceId')]"],
                "evaluationFrequency":"[parameters('evaluationFrequency')]",
                "windowSize": "[parameters('windowSize')]",
                "criteria": {
                    "odata.type": "Microsoft.Azure.Monitor.MultipleResourceMultipleMetricCriteria",
                    "allOf": [
                        {
                            "criterionType": "DynamicThresholdCriterion",
                            "name" : "1st criterion",
                            "metricName": "[parameters('metricName')]",
                            "dimensions":[],
                            "operator": "[parameters('operator')]",
                            "alertSensitivity": "[parameters('alertSensitivity')]",
                            "failingPeriods": {
                                "numberOfEvaluationPeriods": "[parameters('numberOfEvaluationPeriods')]",
                                "minFailingPeriodsToAlert": "[parameters('minFailingPeriodsToAlert')]"
                            },
                            "timeAggregation": "[parameters('timeAggregation')]"
                        }
                    ]
                },
                "actions": [
                    {
                        "actionGroupId": "[parameters('actionGroupId')]"
                    }
                ]
            }
        }
    ]
}

Digamos que o JSON acima seja salvo como metricfromLogsAlertDynamic.json - então ele pode ser acoplado a um arquivo JSON de parâmetro para a criação baseada em Modelo de Recurso. Um arquivo JSON de parâmetro de exemplo está listado abaixo:

{
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "convertRuleName": {
            "value": "TestLogtoMetricRule"
        },
        "convertRuleDescription": {
            "value": "Test rule to extract metrics from logs via template"
        },
        "convertRuleRegion": {
            "value": "West Central US"
        },
        "convertRuleStatus": {
            "value": "true"
        },
        "convertRuleMetric": {
            "value": "Average_% Idle Time"
        },
        "alertName": {
            "value": "TestMetricAlertonLog"
        },
        "alertDescription": {
            "value": "New multi-dimensional metric alert created via template"
        },
        "alertSeverity": {
            "value":3
        },
        "isEnabled": {
            "value": true
        },
        "resourceId": {
            "value": "/subscriptions/1234-56789-1234-567a/resourceGroups/myRG/providers/Microsoft.OperationalInsights/workspaces/workspaceName"
        },
        "metricName":{
            "value": "Average_% Idle Time"
        },
        "operator": {
            "value": "GreaterOrLessThan"
          },
          "alertSensitivity": {
              "value": "Medium"
          },
          "numberOfEvaluationPeriods": {
              "value": "4"
          },
          "minFailingPeriodsToAlert": {
              "value": "3"
          },
        "timeAggregation":{
            "value": "Average"
        },
        "actionGroupId": {
            "value": "/subscriptions/1234-56789-1234-567a/resourceGroups/myRG/providers/microsoft.insights/actionGroups/actionGroupName"
        }
    }
}

Supondo que o arquivo de parâmetros acima seja salvo como metricfromLogsAlertDynamic.parameters.json; em seguida, pode-se criar um alerta de métrica para logs usando o Modelo de Recursos para criação no portal do Azure.

Como alternativa, pode-se usar o comando do Azure PowerShell abaixo também:

New-AzResourceGroupDeployment -ResourceGroupName "myRG" -TemplateFile metricfromLogsAlertDynamic.json TemplateParameterFile metricfromLogsAlertDynamic.parameters.json

Ou use implantar o Modelo de Recursos usando a CLI do Azure:

az deployment group create --resource-group myRG --template-file metricfromLogsAlertDynamic.json --parameters @metricfromLogsAlertDynamic.parameters.json

Próximos passos