创建自定义阈值规则
编辑创建自定义阈值规则
编辑创建自定义阈值规则,当可观测性数据类型达到或超过给定值时触发警报。
定义规则数据
编辑指定以下设置以定义规则适用的数据
- 选择数据视图:单击数据视图字段以搜索和选择指向您要为其创建规则的索引或数据流的数据视图。您还可以通过单击创建数据视图来创建新数据视图。有关创建数据视图的更多信息,请参阅创建数据视图。
-
定义查询过滤器(可选):使用查询过滤器缩小规则适用的数据范围。例如,使用查询过滤器
host.name:host-1
将查询过滤器设置为特定主机名,以仅将规则应用于该主机。
设置规则条件
编辑设置规则使用聚合、等式和阈值来检测的条件。
聚合汇总您的数据,以便于分析。设置以下任何聚合类型以收集数据以创建您的规则:平均值
、最大值
、最小值
、基数
、计数
、总和
、百分位数
或速率
。有关这些选项的更多信息,请参阅聚合选项。
例如,要收集日志级别为warn
的日志文档总数
- 将聚合设置为文档计数,并将KQL 过滤器设置为
log.level: "warn"
。 - 将阈值设置为
IS ABOVE 100
,以便在日志级别为warn
的日志文档数量达到 100 时触发警报。
使用您的聚合设置等式。根据等式的结果,设置阈值以定义何时触发警报。等式使用基本数学或布尔逻辑。请参阅以下示例以了解可能的用例。
对您的聚合进行加、减、乘或除运算,以定义警报条件。
示例
设置等式和阈值,以便在指标超过阈值时触发警报。在此示例中,我们将使用平均 CPU 使用率(CPU 时间在非idle
或IOWait
状态下花费的百分比,按 CPU 核心数量归一化),并在 CPU 使用率超过特定百分比时触发警报。为此,请设置以下聚合、等式和阈值
-
设置以下聚合
-
聚合 A:平均
system.cpu.user.pct
-
聚合 B:平均
system.cpu.system.pct
-
聚合 C:最大
system.cpu.cores
。
-
聚合 A:平均
- 将等式设置为
(A + B) / C * 100
- 将阈值设置为
IS ABOVE 95
,以便在 CPU 使用率超过 95% 时发出警报。
将条件运算符和比较运算符与您的聚合一起使用,以定义警报条件。
示例
设置等式和阈值,以便在有状态 Pod 的数量与所需 Pod 的数量不同时触发警报。在此示例中,我们将使用kubernetes.statefulset.ready
和kubernetes.statefulset.desired
,并在其值不同时触发警报。为此,请设置以下聚合、等式和阈值
-
设置以下聚合
-
聚合 A:总和
kubernetes.statefulset.ready
-
聚合 B:总和
kubernetes.statefulset.desired
-
聚合 A:总和
- 将等式设置为
A == B ? 1 : 0
。如果 A 和 B 相等,则结果为1
。如果它们不相等,则结果为0
。 - 将阈值设置为
IS BELOW 1
,以便在结果为0
且字段值不匹配时触发警报。
预览图表
编辑预览图表提供了有多少条目与您的配置匹配的可视化效果。阴影区域显示您设置的阈值。
如果您使用按分组警报选项,则最大条形大小为 3。它只会显示前 3 个字段。
按分组警报(可选)
编辑为自定义阈值规则设置一个或多个按分组警报字段,以针对所选字段执行复合聚合。当这些组中的任何一个匹配选定的规则条件时,将每个组触发一个警报。
当您选择多个分组时,组名称以逗号分隔。
例如,如果您按host.name
和host.architecture
字段对警报进行分组,并且有两个主机(Host A
和Host B
)和两种体系结构(Architecture A
和Architecture B
),则复合聚合将形成多个组。
如果Host A, Architecture A
组匹配规则条件,但Host B, Architecture B
组不匹配,则会为Host A, Architecture A
触发一个警报。
如果您选择一个字段——例如host.name
——并且Host A
匹配条件但Host B
不匹配,则会为Host A
触发一个警报。如果两个组都匹配条件,则会为两个组触发警报。
触发“无数据”警报(可选)
编辑可以选择配置规则以在以下情况下触发警报
- 没有数据,或
- 先前检测到的组停止报告数据。
为此,请选择如果无数据则通知我。
警报的行为取决于是否指定了任何按分组警报字段
- 无“按分组警报”字段:(默认)如果条件在预期时间段内未能报告数据,或者规则未能查询 Elasticsearch,则会触发“无数据”警报。此警报表示出现问题,并且没有足够的数据来评估相关的阈值。
-
有“按分组警报”字段:如果先前检测到的组停止报告数据,则会为丢失的组触发“无数据”警报。
例如,考虑以下场景:
host.name
是 CPU 使用率超过 80% 的按分组警报字段。规则首次运行时,两个主机报告数据:host-1
和host-2
。规则第二次运行时,host-1
未报告任何数据,因此会为host-1
触发“无数据”警报。当规则再次运行时,如果host-1
开始再次报告数据,则有以下几种可能的情况- 如果
host-1
报告 CPU 使用率数据,并且它超过 80% 的阈值,则不会触发新的警报。相反,现有警报会从“无数据”更改为违反阈值的触发警报。请记住,在这种情况下不会发送任何通知,因为仍然存在持续的问题。 - 如果
host-1
报告的 CPU 使用率低于 80% 的阈值,则警报状态将更改为恢复。
- 如果
选择角色可见性
编辑您必须选择一个范围值(Logs
或Metrics
),这会影响访问规则所需的Kibana 功能权限。例如,当它设置为Logs
时,您必须具有相应的可观测性 > 日志功能权限才能查看或编辑规则。
操作类型
编辑通过将规则连接到使用以下支持的内置集成的操作来扩展您的规则。
某些连接器类型是付费商业功能,而其他功能是免费的。有关 Elastic 订阅级别的比较,请访问订阅页面。
选择连接器后,必须设置操作频率。您可以选择在每个检查间隔或自定义间隔创建警报摘要。或者,您可以设置操作频率,以便选择操作运行的频率(例如,在每个检查间隔、仅在警报状态更改时或在自定义操作间隔)。在这种情况下,您还必须选择影响操作运行时间的特定阈值条件:Alert
、No Data
或Recovered
。
您还可以通过指定操作仅在与 KQL 查询匹配或警报在特定时间范围内发生时运行来进一步细化操作运行的条件。
- 如果警报与查询匹配:输入一个 KQL 查询,该查询定义必须满足的字段-值对或查询条件才能发送通知。该查询仅搜索规则指定索引中的警报文档。
- 如果警报在时间范围内生成:设置时间范围详细信息。仅当在您定义的时间范围内生成警报时才会发送通知。
使用默认通知消息或自定义它。您可以通过单击消息文本框上方的图标并从可用变量列表中选择来向消息添加更多上下文。
以下变量特定于此规则类型。您还可以指定所有规则共有的变量。
-
context.alertDetailsUrl
- 指向警报故障排除视图的链接,以获取更多上下文和详细信息。如果未配置
server.publicBaseUrl
,则此链接将为空字符串。 -
context.cloud
- 如果源中可用,则由 ECS 定义的云对象。
-
context.container
- 如果源中可用,则由 ECS 定义的容器对象。
-
context.group
- 包含报告数据的组的对象。
-
context.host
- 如果源中可用,则由 ECS 定义的主机对象。
-
context.labels
- 与触发此警报的实体关联的标签列表。
-
context.orchestrator
- 如果源中可用,则由 ECS 定义的编排器对象。
-
context.reason
- 对警报原因的简洁描述。
-
context.tags
- 与触发此警报的实体关联的标签列表。
-
context.timestamp
- 检测到警报的时间戳。
-
context.value
- 条件值的列表。
-
context.viewInAppUrl
- 指向警报源的链接。