创建日志阈值规则
编辑创建日志阈值规则编辑
- 要访问此页面,请转到 可观测性 → 日志。
- 点击 警报和规则 → 创建规则。
字段和比较器编辑
条件可用的比较器取决于所选字段。可用的组合是
- 数字字段:大于、大于或等于、小于 或 小于或等于。
- 可聚合字段:是 或 不是。
-
不可聚合字段:匹配、不匹配、匹配短语、不匹配短语。
-
匹配 查询输入值的全部或部分内容,而不考虑顺序。例如,
WITH message MATCHES your example message
会查找包含单词your
、example
和message
的消息,并返回包含这些单词的部分或全部的結果。 -
匹配短语 查询输入值的确切内容。例如,
WITH message MATCHES PHRASE your example message
会查找短语your example message
,并返回包含该确切短语的結果。
-
匹配 查询输入值的全部或部分内容,而不考虑顺序。例如,
有几个关键的受支持用例。您可以根据包含或匹配文本模式的字段创建规则,根据数字字段和算术运算符创建规则,或者使用多个条件创建单个规则。
不同的 Elasticsearch 查询类型支持这些比较器中的每一个,在某些情况下,了解这些类型很重要,以便您能够正确配置规则。上面列出的比较器映射到以下 Elasticsearch 查询类型
- 大于:范围 使用 gt
- 大于或等于:范围 使用 gte
- 小于:范围 使用 lt
- 小于或等于:范围 使用 lte
- 是 和 不是:term
- 匹配 和 不匹配:match
- 匹配短语 和 不匹配短语:match_phrase
分组依据编辑
可以为日志阈值规则设置 分组依据。您可以设置一个或多个分组。
设置 分组依据 时,将针对所选字段执行复合聚合。当任何这些组与所选规则条件匹配时,将 按组 触发警报。
在选择多个分组的情况下,组名用逗号分隔。
例如,如果选择 host.name
和 host.architecture
作为分组依据字段,并且有两个主机(主机 A
和 主机 B
)和两种体系结构(体系结构 A
和 体系结构 B
),则复合聚合将形成多个组。我们将重点关注 主机 A,体系结构 A
和 主机 B,体系结构 B
组。
如果组 主机 A,体系结构 A
匹配规则条件,但 主机 B,体系结构 B
不匹配,则会触发一个警报。
类似地,如果选择了一个分组依据,例如 host.name
,并且主机 A 匹配条件,但主机 B 不匹配,则会为主机 A 触发一个警报。如果两个组都匹配条件,则会触发两个警报。
如果选择了分组依据字段,但在触发警报的给定时间范围内没有文档包含所选字段,则无法确定组。当规则条件对一定数量的文档敏感,并且该数量可能为 0
时,这很重要。例如,当查询主机是否少于五个文档匹配条件时,由于主机在查询期间未报告日志,因此不会触发警报。
图表预览编辑
要确定有多少日志条目与配置的每个部分匹配,您可以查看每个条件的图表预览。这对于确定有多少日志条目与配置的每个部分匹配非常有用。设置分组依据时,图表将为每个组显示一个条形图。要查看预览,请选择条件旁边的箭头。
阴影区域表示已选择的阈值。
比率规则编辑
要了解一个查询与另一个查询的比较方式,请创建比率规则。当比率值满足特定阈值时,将触发此类规则。比率阈值是第一个查询(查询 A)的文档计数除以第二个查询(查询 B)的文档计数。
以下示例在错误日志数量是警告日志数量的两倍时触发警报。
由于不可能除以 0,因此当查询 A 或查询 B 的文档计数为 0 时,将导致比率未定义/不确定。在这种情况下,不会触发警报。
操作类型编辑
通过将规则连接到使用以下受支持的内置集成的操作来扩展您的规则。
某些连接器类型是付费商业功能,而其他是免费的。有关 Elastic 订阅级别的比较,请访问 订阅页面。
选择连接器后,您必须设置操作频率。您可以选择在每个检查间隔或自定义间隔上创建警报摘要。或者,您可以设置操作频率,以便选择操作运行的频率(例如,在每个检查间隔、仅当警报状态更改时或在自定义操作间隔)。在这种情况下,您还必须选择影响操作何时运行的特定阈值条件:已触发
或 已恢复
。
您还可以通过指定操作仅在匹配 KQL 查询或在特定时间范围内发生警报时才运行,从而进一步优化操作运行的条件
- 如果警报匹配查询:输入一个 KQL 查询,该查询定义必须满足的字段值对或查询条件才能发送通知。该查询仅搜索规则指定索引中的警报文档。
- 如果在时间范围内生成警报:设置时间范围详细信息。仅当在您定义的时间范围内生成警报时,才会发送通知。
操作变量编辑
使用默认通知消息或自定义它。您可以通过单击消息文本框上方的图标并从可用变量列表中选择来为消息添加更多上下文。
以下变量特定于此规则类型。您还可以指定 所有规则共有的变量。
-
context.alertDetailsUrl
- 指向警报故障排除视图的链接,以获取更多上下文和详细信息。如果未配置
server.publicBaseUrl
,这将是一个空字符串。 -
context.interval
- 满足警报条件的时间段的长度和单位。
-
context.reason
- 对警报原因的简要说明。
-
context.serviceName
- 为其创建警报的服务。
-
context.threshold
- 高于此值的任何触发值都将导致警报触发。
-
context.transactionName
- 为其创建警报的事务名称。
-
context.transactionType
- 为其创建警报的事务类型。
-
context.triggerValue
- 超过阈值并触发警报的值。
-
context.viewInAppUrl
- 指向警报来源的链接。
性能注意事项编辑
设置 分组依据 时,我们建议对阈值使用 大于 比较器 - 这允许我们的查询应用急切过滤,从而显着提高性能。否则,我们建议使用基数(可能性数量)最低的 分组依据 字段。
Elasticsearch 查询(高级)编辑
执行规则检查时,将根据规则的配置构建查询。在绝大多数情况下,不需要知道这些查询是什么。但是,为了确定最佳配置或帮助调试,查看这些查询的结构可能很有用。以下是以下配置的 Elasticsearch 查询示例
没有分组依据。
{ "index":"filebeat-*", "allowNoIndices":true, "ignoreUnavailable":true, "body":{ "track_total_hits":true, "query":{ "bool":{ "filter":[ { "range":{ "@timestamp":{ "gte":1600771280862, "lte":1600774880862, "format":"epoch_millis" } } }, { "term":{ "log.level":{ "value":"error" } } } ], "must_not":[ { "term":{ "log.file.path":{ "value":"/nginx" } } } ] } }, "size":0 } }
有分组依据。
{ "index":"filebeat-*", "allowNoIndices":true, "ignoreUnavailable":true, "body":{ "query":{ "bool":{ "filter":[ { "range":{ "@timestamp":{ "gte":1600768208910, "lte":1600779008910, "format":"epoch_millis" } } } ] } }, "aggregations":{ "groups":{ "composite":{ "size":40, "sources":[ { "group-0-host.name":{ "terms":{ "field":"host.name" } } } ] }, "aggregations":{ "filtered_results":{ "filter":{ "bool":{ "filter":[ { "range":{ "@timestamp":{ "gte":1600771808910, "lte":1600775408910, "format":"epoch_millis" } } }, { "term":{ "log.level":{ "value":"error" } } } ], "must_not":[ { "term":{ "log.file.path":{ "value":"/nginx" } } } ] } } } } } }, "size":0 } }
设置编辑
使用日志阈值规则时,无法在配置中设置显式索引模式。索引模式将从日志应用设置页面上的日志索引推断。
每次执行规则检查时,都会检查日志索引设置,但不会在创建规则时存储该设置。
设置下设置的时间戳字段决定了查询中用于时间戳的字段。