创建或编辑日志搜索预警规则
本文介绍了如何在 Azure Monitor 中创建新的日志搜索警报规则或编辑现有日志搜索警报规则。 若要详细了解警报,请参阅警报概述。
警报规则将要监视的资源、来自资源的监视数据以及要触发警报的条件组合在一起。 然后,可以定义操作组和警报处理规则以确定触发警报时会发生的情况。
由这些警报规则触发的警报会包含使用通用警报架构的有效负载。
先决条件
若要创建或编辑警报规则,你必须具有以下权限:
- 对预警规则的目标资源的读取权限。
- 对在其中创建预警规则的资源组的写入权限。 如果从 Azure 门户中创建预警规则,则默认在目标资源所在的同一资源组中创建预警规则。
- 对关联到预警规则的任何操作组的读取权限(如果适用)。
在 Azure 门户中访问警报规则向导
可通过多种方式创建或编辑警报规则。
从门户主页创建或编辑警报规则
- 在 Azure 门户中,选择“监视”。
- 在左侧窗格中,选择“警报”。
- 选择“+ 创建”>“警报规则”。
从特定资源创建或编辑警报规则
- 在 Azure 门户中,转到资源。
- 在左侧窗格中,选择“警报”。
- 选择“+ 创建”>“警报规则”。
编辑现有警报规则
在 Azure 门户中,从主页或特定资源的左侧窗格中选择“警报”。
选择“警报规则”。
选择要编辑的警报规则,然后选择“编辑”。
选择警报规则的任一选项卡以编辑设置。
配置警报规则的范围
在“选择资源”窗格中,设置警报规则的范围。 可以按订阅、资源类型或资源位置进行筛选。
选择“应用”。
配置警报规则条件
在“条件”选项卡上,在选择“信号名称”字段时,选择“自定义日志搜索”。 或者,如果要为条件选择其他信号,请选择“查看所有信号”。
(可选)如果在上一步中选择了“查看所有信号”,请使用“选择信号”窗格搜索信号名称或筛选信号列表。 筛选依据:
- 信号类型:选择“日志搜索”。
- 信号源:发送“自定义日志搜索”和“日志(已保存的查询)”信号的服务。 选择信号名称,然后选择“应用”。
在“日志”窗格中,编写一个查询,用于返回要为其创建警报的日志事件。 若要使用其中一个预定义的警报规则查询,请展开“日志”窗格旁边的“架构和筛选器”窗格。 然后选择“查询”选项卡,并选择其中一个查询。
请注意日志搜索警报规则查询存在以下限制:
- 日志搜索警报规则查询不支持
bag_unpack()
、pivot()
和narrow()
。 - 日志搜索警报规则查询仅支持 ago() 中使用时间跨度文本。
AggregatedValue
是保留字。 它不能在日志搜索警报规则查询中使用。- 日志搜索警报规则属性中所有数据的总大小不能超过 64 KB。
- 在 KQL 查询中为日志搜索警报定义自定义函数时,请务必谨慎使用包含相对时间子句(例如 now())的函数代码。 相对时间子句未在日志搜索警报 KQL 查询本身中进行定义的自定义函数可能会在查询结果中引入不一致,从而可能影响警报评估的准确性和可靠性。 因此:
- 为了确保警报准确且及时,请始终直接在日志搜索警报 KQL 查询中定义相对时间子句。
- 如果函数内部需要时间范围,则应将其作为参数传递,并在函数中使用。
- 日志搜索警报规则查询不支持
(可选)如果正在查询 Azure 数据资源管理器或 Azure Resource Graph 群集,Log Analytics 工作区无法自动标识带有事件时间戳的列。 我们建议在查询中添加时间范围筛选器。 例如:
adx('https://help.chinaeast2.kusto.chinacloudapi.cn/Samples').table | where MyTS >= ago(5m) and MyTS <= now()
arg("").Resources | where type =~ 'Microsoft.Compute/virtualMachines' | project _ResourceId=tolower(id), tags
示例日志搜索警报查询可用于 Azure 数据资源管理器和 Resource Graph。
选择“运行”以运行警报。
“预览”部分显示查询结果。 完成查询编辑后,选择“继续编辑警报”。
此时将打开“条件”选项卡,其中已填充日志查询。 默认情况下,该规则将计算过去 5 分钟内的结果数。 如果系统检测到汇总的查询结果,将使用该信息自动更新规则。
在“度量”部分选择以下字段的值:
字段 说明 度量 日志搜索警报可以度量可用于各种监视方案的两种指标:
表行数:可以使用返回的行数来处理 Windows 事件日志、Syslog 和应用程序异常等事件。
数值列的计算:可以使用基于任何数值列的计算来包含任意数量的资源。 例如 CPU 百分比。聚合类型 对多个记录执行的计算,以通过使用聚合粒度将这些记录聚合为一个数值。 例如:总计、平均值、最小值和最大值。 聚合粒度 用于将多条记录聚合为一个数值的间隔。 (可选)在“按维度拆分”部分中,可以借助维度为触发的警报提供上下文。
维度是查询结果中包含其他数据的列。 使用维度时,警报规则按维度值对查询结果进行分组,并单独评估每个组的结果。 如果满足条件,规则将为该组触发警报。 警报有效负载包括触发该警报的组合。
每个警报规则最多可以应用六个维度。 维度只能是字符串或数值列。 如果要使用不是数字或字符串类型的列作为维度,则必须在查询中将其转换为字符串或数值。 如果你选择多个维度值,则由组合产生的每个时序将触发它自身的警报,并将单独收费。
例如:
- 可以使用维度来监视运行网站或应用的多个实例上的 CPU 使用情况。 将单独监视每个实例,并针对 CPU 使用率超过配置值的每个实例发送通知。
- 需要将某个条件应用于范围内的多个资源时,你也可以决定不按维度拆分。 例如,如果需要在资源组范围内至少有五台计算机的 CPU 使用率高于配置值时触发警报,则不会使用维度。
通常,如果警报规则范围是工作区,则会在工作区上触发警报。 如果需要为每个受影响的 Azure 资源创建单独的警报,可以:
使用 Azure 资源管理器“Azure 资源 ID”列作为维度。 使用此选项时,则会在使用“Azure 资源 ID”列作为维度的工作区上触发警报。
在“Azure 资源 ID”属性中将警报指定为维度。 使用此选项,可让查询返回的资源成为警报目标。 然后会在查询返回的资源(例如虚拟机或存储帐户)上触警报,而不是在工作区上触发。
使用此选项时,如果工作区从多个订阅中的资源获取数据,则可以在不同于警报规则订阅的订阅中的资源上触发警报。
选择以下字段的值:
字段 说明 维度名称 维度可以是数字列或字符串列。 维度用于监视特定的时序,并提供触发的警报的上下文。 运算符 对维度名称和值使用的运算符。 维度值 维度值基于过去 48 小时的数据。 选择“添加自定义值”以添加自定义维度值。 包括所有未来值 选择此字段可包含添加到所选维度的所有未来值。 在“警报逻辑”部分,选择以下字段的值:
字段 说明 运算符 查询结果将转换为数字。 在此字段中,选择用于将数字与阈值进行比较的运算符。 阈值 阈值的数值。 评估频率 运行查询的频率。 可以将其设置为从一分钟到一天(24 小时)之中的任意时间。 注意
频率不是警报每天运行的特定时间, 而是警报规则多久运行一次。
使用“一分钟”警报规则频率有一些限制。 将警报规则频率设置为一分钟时,将执行内部操作来优化查询。 如果此操作包含不受支持的操作,则可能会导致查询失败。 不支持查询的最常见原因是:
- 查询包含
search
、union
或take
(限制)操作。 - 查询包含
ingestion_time()
函数。 - 查询使用
adx
模式。 - 查询调用了调用其他表的函数。
示例日志搜索警报查询可用于 Azure 数据资源管理器和 Resource Graph。
- 查询包含
(可选)在“高级选项”部分,可以指定触发警报之前所要达到的失败次数和警报评估期。 例如,如果将“聚合粒度”设置为 5 分钟,则可以指定仅当过去一小时内发生了 3 次失败(15 分钟)才触发警报。 应用程序业务策略确定了此设置。
在“触发警报之前的违规次数”下选择以下字段的值:
字段 说明 违规次数 触发警报的冲突数。 评估期 发生冲突的时间段。 替代查询时间范围 如果希望警报评估期不同于查询时间范围,请在此处输入时间范围。
警报时间范围限制为最多两天。 即使查询包含时间范围超过 2 天的ago
命令,也会应用最大时间范围(2 天)。 例如,即使查询文本包含ago(7d)
,查询也最多只能扫描 2 天内的数据。 如果查询需要的数据多于警报评估,则可以手动更改时间范围。 如果查询包含ago
命令,它将自动更改为 2 天(48 小时)。注意
如果你或你的管理员分配了“关于 Log Analytics 工作区的 Azure 日志搜索警报应使用客户管理的密钥”Azure 策略,则必须选择“检查工作区链接存储”。 否则,规则创建将失败,因为它不符合策略要求。
“预览”图表显示一段时间内查询评估的结果。 可以更改图表时间段,或选择按维度进行的唯一警报拆分产生的时序。
选择“完成” 。 从此刻开始,你可以随时选择“查看 + 创建”按钮。
配置警报规则操作
在“操作”选项卡中,选择或创建所需的操作组。
配置警报规则详细信息
在“详细信息”选项卡的“项目详细信息”下,选择“订阅”和“资源组”的值。
在“警报规则详细信息”下:
选择“严重性”的值。
输入“警报规则名称”和“警报规则说明”的值。
注意
使用标识的规则不能在“警报规则名称”的值中包含有分号 (;) 字符。
选择“区域”的值。
在“标识”部分中,选择日志搜索警报规则在发送日志查询时用于身份验证的标识。
选择标识时,请注意以下几点:
- 如果要将查询发送到 Azure 数据资源管理器或 Resource Graph,则需要使用托管标识。
- 如果希望能够查看或编辑与警报规则关联的权限,请使用托管标识。
- 如果不使用托管标识,则警报规则权限将基于上次编辑规则时最后一个编辑规则的用户的权限。
- 请使用托管标识以帮助你避免规则无法按预期工作的情况,因为最后编辑规则的用户不一定对添加到规则范围内的所有资源都具有权限。
与规则关联的标识必须具有以下角色:
- 如果查询要访问 Log Analytics 工作区,则必须为该标识分配查询访问的所有工作区的读取者角色。 如果要创建以资源为中心的日志搜索警报,警报规则可能会访问多个工作区,标识必须对所有这些工作区都具有读取者角色。
- 如果要查询 Azure 数据资源管理器或 Resource Graph 群集,则必须为查询访问的所有数据源添加读取者角色。 例如,如果查询以资源为中心,则需要对该资源具有读取者角色。
- 如果查询要访问远程 Azure 数据资源管理器群集,则必须为该标识分配以下角色:
- 对查询访问的所有数据源的读取者角色。 例如,如果查询使用
adx()
函数调用远程 Azure 数据资源管理器群集,则它需要对该 Azure 数据资源管理器群集具有读取者角色。 - 对查询访问的所有数据库的数据库查看者角色。
- 对查询访问的所有数据源的读取者角色。 例如,如果查询使用
有关托管标识的详细信息,请参阅 Azure 资源的托管标识。
为警报规则使用的标识选择下列选项之一:
标识选项 说明 无 警报规则权限基于上次编辑规则时最后一个编辑规则的用户的权限。 启用系统分配的托管标识 Azure 为此警报规则创建新的专用标识。 此标识没有权限,在删除规则时会自动删除。 创建规则后,必须为此标识分配访问查询所需的工作区和数据源的权限。 若要详细了解如何分配权限,请参阅使用 Azure 门户分配 Azure 角色。 不支持使用链接存储的日志搜索警报规则。 启用用户分配的托管标识 在创建警报规则之前,你将创建一个标识,并为其分配用于查询日志的适当权限。 这是一个常规的 Azure 标识。 你可以在多个警报规则中使用同一个标识。 删除规则时不会删除该标识。 选择此类型的标识时,将打开一个窗格,供你选择规则的关联标识。 (可选)“高级选项”部分中,可以设置多个选项:
字段 说明 创建时启用 选择此选项可使警报规则在创建完成后立即开始运行。 自动解决警报 选择此项可使警报成为有状态警报。 如果警报为有状态的警报,当在特定时间范围内不再满足条件时,将解决警报。 时间范围因警报频率而异:
1 分钟:10 分钟内未满足警报条件。
5 到 15 分钟:在三个频率周期内未满足警报条件。
15 分钟到 11 个小时:在两个频率周期内未满足警报条件。
11 - 12 小时:一个频率周期内未满足警报条件。
请注意,监控状态日志搜索警报存在这些限制。静音操作 选择此选项可以设置在再次触发警报操作之前等待的时间段。 在出现的“静音操作时长”字段中,选择在触发警报后和再次触发操作之前的等待时间。 检查工作区链接存储 如果为警报配置了工作区链接存储,请选择此选项。 如果未配置任何链接存储,则不会创建该规则。 -
(可选)在“自定义属性”部分,如果此警报规则包含操作组,则可以添加自己的属性以包含在警报通知有效负载中。 可以在操作组调用的操作(例如 Webhook、Azure 函数或逻辑应用操作)中使用这些属性。
使用静态文本、从警报有效负载中提取的动态值或两者的组合,将自定义属性指定为键/值对。
用于从警报有效负载中提取动态值的格式为:
${<path to schema field>}
。 例如:${data.essentials.monitorCondition}
。使用通用警报架构的格式指定有效负载中的字段,无论为警报规则配置的操作组是否使用通用架构。
注意
- 自定义属性会添加到警报的有效负载中,但它们不会显示在电子邮件模板或 Azure 门户中的警报详细信息中。
以下示例使用了“自定义属性”中的值来利用有效负载中的数据,该有效负载使用常见警报架构。
此示例会创建一个“更多详细信息”标记,其中包含有关“窗口开始时间”和“窗口结束时间”的数据:
- 名称:
Additional Details
- 值:
Evaluation windowStartTime: ${data.alertContext.condition.windowStartTime}. windowEndTime: ${data.alertContext.condition.windowEndTime}
- 结果:
AdditionalDetails:Evaluation windowStartTime: 2023-04-04T14:39:24.492Z. windowEndTime: 2023-04-04T14:44:24.492Z
此示例添加了有关解析或触发警报的原因的数据:
- 名称:
Alert ${data.essentials.monitorCondition} reason
- 值:
${data.alertContext.condition.allOf[0].metricName} ${data.alertContext.condition.allOf[0].operator} ${data.alertContext.condition.allOf[0].threshold} ${data.essentials.monitorCondition}. The value is ${data.alertContext.condition.allOf[0].metricValue}
- 潜在结果:
Alert Resolved reason: Percentage CPU GreaterThan5 Resolved. The value is 3.585
Alert Fired reason": "Percentage CPU GreaterThan5 Fired. The value is 10.585
配置警报规则标签
在“标记”选项卡中,在预警规则资源上设置任何必需的标记。
查看并创建警报规则
在“查看 + 创建”选项卡上,验证规则。 如果出现问题,请返回并进行修复。
通过验证并查看设置后,选择“创建”按钮。