使用 Azure Monitor 创建、查看和管理日志警报

概述

通过日志警报,用户可以使用 Log Analytics 查询按每个设置的频率评估资源日志,并根据结果触发警报。 规则可以使用操作组触发一个或多个操作。 详细了解日志警报的功能和术语

本文说明如何使用 Azure Monitor 创建和管理日志警报。 警报规则由三个组件定义:

  • 目标:要监视的特定 Azure 资源。
  • 条件:要评估的逻辑。 如果满足,则触发警报。
  • 操作:通知或自动化 - 电子邮件、短信、Webhook 等。

也可以使用 Azure 资源管理器模板创建日志预警规则,该方法在单独的文章中进行了介绍。

备注

可以将 Log Analytics 工作区中的日志数据发送到 Azure Monitor 指标存储。 指标警报具有不同的行为,该行为可能更可取,具体取决于你要使用的数据。 要了解如何将日志路由到指标,请参阅日志的指标警报

使用 Azure 门户创建日志警报规则

以下是开始编写警报查询的步骤:

  1. 转到想要对其发出警报的资源。 请考虑尽可能通过选择订阅或资源组范围来设置多个资源的警报规则。 对多个资源发出警报可降低成本,并减少管理多个警报规则的需要。

  2. 在“监视器”下,选择“日志” 。

  3. 查询可以指示问题的日志数据。 可以使用警报查询示例主题来了解可发现的内容或开始编写你自己的查询。 此外,了解如何创建优化的警报查询

  4. 按“+ 新建预警规则”按钮启动警报创建流。

    Log Analytics - 设置警报

备注

建议在对日志使用资源访问模式时大规模创建警报,该模式在使用资源组或订阅范围的多个资源上运行。 大规模警报会减少规则管理开销。 为了能够以资源为目标,请在结果中包含“资源 ID”列。 详细了解如何按维度拆分警报

Log Analytics 和 Application Insights 的日志警报

  1. 如果查询语法正确,将以图表形式显示查询的历史数据,同时显示用于调整图表时间段(从过去六小时到过去一周)的选项。

    如果查询结果包含汇总数据或项目特定列(不包含时间列),则图表将显示单个值。

    配置警报规则

  2. 使用“时段”选项,选择评估指定条件的时间范围。

  3. 日志警报可以基于两种类型的“度量值”

    1. 结果数 - 查询返回的记录的计数。
    2. 指标度量 - 使用通过按选择的表达式和 bin() 选择分组的汇总计算得出的聚合值。 例如:
    // Reported errors
    union Event, Syslog // Event table stores Windows event records, Syslog stores Linux records
    | where EventLevelName == "Error" // EventLevelName is used in the Event (Windows) records
    or SeverityLevel== "err" // SeverityLevel is used in Syslog (Linux) records
    | summarize AggregatedValue = count() by Computer, bin(TimeGenerated, 15m)
    
  4. 对于指标度量警报逻辑,可以选择使用“聚合对象”选项来指定如何按维度拆分警报。 行分组表达式必须唯一且已排序。

    备注

    由于 bin() 可能导致不均匀的时间间隔,因此,警报服务会自动将 bin() 函数转换为针对运行时的相应时间的 bin_at() 函数,以确保生成针对确定时间点的结果。

    备注

    按警报维度拆分这一做法仅适用于当前的 scheduledQueryRules API。 仅在 API 2020-05-01-preview 及更高版本中支持大规模的以资源为中心的警报。

    “聚合基于”选项

  5. 接下来,根据预览数据设置“运算符”、“阈值”“频率”

  6. 还可以选择使用“总计或连续违规次数”来设置触发警报的违规次数

  7. 选择“完成” 。

  8. 定义“预警规则名称”、“描述”,然后选择警报“严重性” 。 这些详细信息将用于所有警报操作。 此外,可以通过选择“创建后启用规则”,选择在创建后不激活该预警规则。

  9. 如需选择是否要在触发警报后的一段时间内阻止规则操作,可以使用“阻止警报”选项。 该规则仍会运行并创建警报,但不会触发操作,从而避免干扰。 静音操作值必须大于警报频率才能生效。

    对日志警报禁止显示警报

  10. 指定预警规则是否应在满足警报条件时触发一个或多个“操作组”

    备注

    有关可以执行的操作的限制,请参阅 Azure 订阅服务限制

  11. 可以选择在日志预警规则中自定义操作:

    • 自定义电子邮件主题:替代电子邮件操作的电子邮件主题。 无法修改邮件正文,并且该字段不能用于电子邮件地址。
    • 包含自定义 JSON 有效负载:假定操作组包含 Webhook 操作,则替代操作组使用的 Webhook JSON。 详细了解用于日志警报的 Webhook 操作

    日志警报的操作替代

  12. 如果正确设置了所有字段,则可以单击“创建预警规则”按钮,并创建一个警报。

    几分钟后,警报将处于活动状态,并按前面所述进行触发。

    创建规则

通过警报管理为 Log Analytics 和 Application Insights 创建日志警报

备注

以资源为中心的日志当前不支持从警报管理创建

  1. 门户中,选择“Monitor”,然后选择“警报” 。

    监视

  2. 选择“新建预警规则”。

    添加警报

  3. 随即显示“创建警报”窗格。 它有四个部分:

    • 应用警报的资源。
    • 要检查的条件。
    • 条件为 true 时要执行的操作。
    • 命名和描述警报的详细信息。

    创建规则

  4. 按“选择资源”按钮。 选择“订阅”和“资源类型”进行筛选,然后选择一个资源 。 确保资源具有可用的日志。

    选择资源

  5. 接下来,使用添加“条件”按钮查看可用于该资源的信号选项列表。 选择“自定义日志搜索”选项。

    选择资源 - 自定义日志搜索

    备注

    警报门户列出了 Log Analytics 和 Application Insights 中保存的查询,这些查询可用作模板警报查询。

  6. 选择后,在“搜索查询”字段中编写、粘贴或编辑警报查询。

  7. 继续执行最后一部分中所述的后续步骤。

所有其他资源类型的日志警报

备注

当前不对 API 版本 2020-05-01-preview 和以资源为中心的日志警报收取额外费用。 未来将公布预览版中的功能的定价以及开始计费之前提供的通知。 如果你选择在通知期后继续使用新 API 版本和以资源为中心的日志警报,则将按照适用的费率缴费。

  1. 从“条件”选项卡开始:

    1. 请检查“度量值”聚合类型”“聚合粒度”是否正确 。

      1. 默认情况下,该规则将计算过去 5 分钟内的结果数。
      2. 如果我们检测到汇总查询结果,则该规则将在几秒钟内自动更新以捕获该结果。
    2. 如果需要,可以选择按维度拆分警报

      • 资源 ID 列(如果已检测到)将自动选中,并将触发的警报的上下文更改为记录的资源。
      • 可以取消选择资源 ID 列以触发针对订阅或资源组的警报。 如果查询结果基于交叉资源,则取消选择非常有用。 例如,用于检查资源组中是否 80% 的虚拟机的 CPU 使用率都很高的查询。
      • 对于使用维度表的任何数字或文本列类型,还可以最多选择六个更多拆分。
      • 警报根据基于唯一组合的拆分单独触发,警报有效负载包括此信息。

      选择聚合参数和拆分

    3. “预览”图表显示一段时间内的查询评估结果。 可以更改图表时间段,或选择按维度进行的唯一警报拆分产生的时序。

      预览图表

    4. 接下来,根据预览数据设置“警报逻辑”、“运算符”、“阈值”“频率”

      预览具有阈值和警报逻辑的图表

    5. 可以选择在“高级选项”部分中设置“触发警报的违规次数”

      高级选项

  2. 在“操作”选项卡中,选择或创建所需的操作组

    “操作”选项卡

  3. 在“详细信息”选项卡中,定义“预警规则详细信息”和“项目详细信息” 。 可以选择设置是否“立即开始运行”,或是否在预警规则触发后的一段时间内“将操作设置为静音”

    备注

    日志预警规则当前是无状态的,并且每次创建警报时都会触发操作,除非定义了静音。

    “详细信息”选项卡

  4. 在“标记”选项卡中,在预警规则资源上设置任何必需的标记。

    “标记”选项卡

  5. 在“审核 + 创建”选项卡中,将运行验证并告知所有问题。 审核并批准规则定义。

  6. 如果所有字段均正确,请选择“创建”按钮,然后完成预警规则的创建。 可以从警报管理查看所有警报。

    “审核并创建”选项卡

在 Azure 门户中查看和管理日志警报

  1. 门户中,选择相关资源或“Monitor”服务。 然后,在“Monitor”部分中选择“警报”。

  2. 警报管理将显示触发的所有警报。 详细了解警报管理

    备注

    日志预警规则当前为无状态且未解析

  3. 在顶部栏中选择“管理预警规则”按钮以编辑规则:

     管理警报规则

使用 PowerShell 管理日志警报

备注

本文已经过更新,以便使用 Azure Az PowerShell 模块。 若要与 Azure 交互,建议使用的 PowerShell 模块是 Az PowerShell 模块。 若要开始使用 Az PowerShell 模块,请参阅安装 Azure PowerShell。 若要了解如何迁移到 Az PowerShell 模块,请参阅 将 Azure PowerShell 从 AzureRM 迁移到 Az

备注

API 版本 2020-05-01-preview 当前不支持 PowerShell

下面列出的 PowerShell cmdlet 可用于使用计划查询规则 API 来管理规则。

备注

ScheduledQueryRules PowerShell cmdlets 只能管理在当前计划查询规则 API 中创建的规则。

以下是使用 PowerShell 创建日志预警规则的示例步骤:

$source = New-AzScheduledQueryRuleSource -Query 'Heartbeat | summarize AggregatedValue = count() by bin(TimeGenerated, 5m), _ResourceId' -DataSourceId "/subscriptions/a123d7efg-123c-1234-5678-a12bc3defgh4/resourceGroups/contosoRG/providers/microsoft.OperationalInsights/workspaces/servicews"

$schedule = New-AzScheduledQueryRuleSchedule -FrequencyInMinutes 15 -TimeWindowInMinutes 30

$metricTrigger = New-AzScheduledQueryRuleLogMetricTrigger -ThresholdOperator "GreaterThan" -Threshold 2 -MetricTriggerType "Consecutive" -MetricColumn "_ResourceId"

$triggerCondition = New-AzScheduledQueryRuleTriggerCondition -ThresholdOperator "LessThan" -Threshold 5 -MetricTrigger $metricTrigger

$aznsActionGroup = New-AzScheduledQueryRuleAznsActionGroup -ActionGroup "/subscriptions/a123d7efg-123c-1234-5678-a12bc3defgh4/resourceGroups/contosoRG/providers/microsoft.insights/actiongroups/sampleAG" -EmailSubject "Custom email subject" -CustomWebhookPayload "{ `"alert`":`"#alertrulename`", `"IncludeSearchResults`":true }"

$alertingAction = New-AzScheduledQueryRuleAlertingAction -AznsAction $aznsActionGroup -Severity "3" -Trigger $triggerCondition

New-AzScheduledQueryRule -ResourceGroupName "contosoRG" -Location "Region Name for your Application Insights App or Log Analytics Workspace" -Action $alertingAction -Enabled $true -Description "Alert description" -Schedule $schedule -Source $source -Name "Alert Name"

以下是使用 PowerShell 通过跨资源查询创建日志预警规则的示例步骤:

$authorized = @ ("/subscriptions/a123d7efg-123c-1234-5678-a12bc3defgh4/resourceGroups/contosoRG/providers/microsoft.OperationalInsights/workspaces/servicewsCrossExample", "/subscriptions/a123d7efg-123c-1234-5678-a12bc3defgh4/resourceGroups/contosoRG/providers/microsoft.insights/components/serviceAppInsights")

$source = New-AzScheduledQueryRuleSource -Query 'Heartbeat | summarize AggregatedValue = count() by bin(TimeGenerated, 5m), _ResourceId' -DataSourceId "/subscriptions/a123d7efg-123c-1234-5678-a12bc3defgh4/resourceGroups/contosoRG/providers/microsoft.OperationalInsights/workspaces/servicews" -AuthorizedResource $authorized

$schedule = New-AzScheduledQueryRuleSchedule -FrequencyInMinutes 15 -TimeWindowInMinutes 30

$metricTrigger = New-AzScheduledQueryRuleLogMetricTrigger -ThresholdOperator "GreaterThan" -Threshold 2 -MetricTriggerType "Consecutive" -MetricColumn "_ResourceId"

$triggerCondition = New-AzScheduledQueryRuleTriggerCondition -ThresholdOperator "LessThan" -Threshold 5 -MetricTrigger $metricTrigger

$aznsActionGroup = New-AzScheduledQueryRuleAznsActionGroup -ActionGroup "/subscriptions/a123d7efg-123c-1234-5678-a12bc3defgh4/resourceGroups/contosoRG/providers/microsoft.insights/actiongroups/sampleAG" -EmailSubject "Custom email subject" -CustomWebhookPayload "{ `"alert`":`"#alertrulename`", `"IncludeSearchResults`":true }"

$alertingAction = New-AzScheduledQueryRuleAlertingAction -AznsAction $aznsActionGroup -Severity "3" -Trigger $triggerCondition
New-AzScheduledQueryRule -ResourceGroupName "contosoRG" -Location "Region Name for your Application Insights App or Log Analytics Workspace" -Action $alertingAction -Enabled $true -Description "Alert description" -Schedule $schedule -Source $source -Name "Alert Name" 

还可以通过 PowerShell 使用模板和参数文件创建日志警报:

Connect-AzAccount -Environment AzureChinaCloud

Select-AzSubscription -SubscriptionName <yourSubscriptionName>

New-AzResourceGroupDeployment -Name AlertDeployment -ResourceGroupName ResourceGroupofTargetResource `
  -TemplateFile mylogalerttemplate.json -TemplateParameterFile mylogalerttemplate.parameters.json

使用 CLI 管理日志警报

备注

Azure CLI 支持仅适用于 scheduledQueryRules API 版本 2020-05-01-preview 和更高版本。 以前的 API 版本可将 Azure 资源管理器 CLI 与模板配合使用,如下所述。

可以将 Azure 资源管理器 CLI 与模板文件一起使用:

az cloud set -n AzureChinaCloud

az login

az deployment group create \
    --name AlertDeployment \
    --resource-group ResourceGroupofTargetResource \
    --template-file mylogalerttemplate.json \
    --parameters @mylogalerttemplate.parameters.json

创建成功后,将返回 201。 更新成功后,将返回 200。

后续步骤