创建自定义阈值规则
对于可观测性无服务器项目,需要编辑器角色或更高才能创建自定义阈值规则。要了解更多信息,请参阅分配用户角色和权限。
创建自定义阈值规则,以便在 Elastic Observability Serverless 数据类型达到或超过给定值时触发警报。
- 要访问此页面,请从主导航中选择 警报 。
- 单击 管理规则 → 创建规则 。
- 在 选择规则类型 下,选择 自定义阈值 。

指定以下设置来定义规则应用的数据
- 选择数据视图: 单击数据视图字段以搜索和选择指向您正在为其创建规则的索引或数据流的数据视图。您也可以通过单击 创建数据视图 来创建一个新的数据视图。有关创建数据视图的更多信息,请参阅 创建数据视图。
- 定义查询过滤器(可选): 使用查询过滤器来缩小规则应用的数据范围。例如,使用查询过滤器
host.name:host-1
将查询过滤器设置为特定主机名,以便仅将规则应用于该主机。
设置规则的条件,以使用聚合、公式和阈值来检测。
聚合汇总您的数据,使其更易于分析。设置以下任何聚合类型以收集数据来创建您的规则:Average
、Max
、Min
、Cardinality
、Count
、Sum,
Percentile
或 Rate
。有关这些选项的更多信息,请参阅 聚合选项。
例如,要收集日志级别为 warn
的日志文档总数
- 将 聚合 设置为 计数 ,并将 KQL 过滤器 设置为
log.level: "warn"
。 - 将阈值设置为
IS ABOVE 100
,以便在日志级别为warn
的日志文档数达到 100 时触发警报。
使用您的聚合设置公式。根据公式的结果,设置一个阈值以定义何时触发警报。公式使用基本数学或布尔逻辑。有关可能的用例,请参阅以下示例。
添加、减去、乘以或除以您的聚合,以定义警报的条件。
示例: 设置一个公式和阈值,以便在指标高于阈值时触发警报。对于此示例,我们将使用平均 CPU 使用率 - 除 idle
或 IOWait
之外的状态中花费的 CPU 时间百分比,并按 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% 的阈值,则警报状态将更改为已恢复。
- 如果
如何取消跟踪已停用的主机
如果主机(例如,host-1
)已停用,您可能不再希望看到有关它的“无数据”警报。要将警报标记为未跟踪:转到“警报”表,单击 图标以展开“更多操作”菜单,然后单击标记为未跟踪。
您可以使用与第三方系统交互、写入日志或索引或发送用户通知的操作来扩展您的规则。您可以随时向规则添加操作。您可以创建不添加操作的规则,也可以为单个规则定义多个操作。
要向规则添加操作,您必须首先为该服务(例如,电子邮件或外部事件管理系统)创建一个连接器,然后您可以将其用于不同的规则,每个规则都有自己的操作频率。
连接器类型
连接器提供了一个中心位置来存储与第三方系统进行服务和集成的连接信息。在定义告警规则的操作时,可以使用以下连接器:
- 案例 (Cases)
- D3 Security
- 电子邮件 (Email)
- IBM Resilient
- 索引 (Index)
- Jira
- Microsoft Teams
- Observability AI Assistant
- Opsgenie
- PagerDuty
- 服务器日志 (Server log)
- ServiceNow ITOM
- ServiceNow ITSM
- ServiceNow SecOps
- Slack
- Swimlane
- Torq
- Webhook
- xMatters
某些连接器类型是付费商业功能,而另一些则是免费的。 有关 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
-
指向告警源的链接。