创建日志阈值规则
编辑创建日志阈值规则
编辑字段和比较器
编辑可用于条件的比较器取决于所选字段。可用的组合为:
- 数值字段:大于、大于或等于、小于或小于或等于。
- 可聚合字段:等于或不等于。
-
不可聚合字段:匹配、不匹配、短语匹配、短语不匹配。
-
匹配 查询输入值的部分或全部内容,不考虑顺序。例如,
WITH message MATCHES your example message
会查找包含单词your
、example
和message
的消息,并返回包含部分或全部这些单词的结果。 -
短语匹配 查询输入值的精确内容。例如,
WITH message MATCHES PHRASE your example message
会查找短语your example message
,并返回包含该精确短语的结果。
-
匹配 查询输入值的部分或全部内容,不考虑顺序。例如,
有一些关键的支持的用例。您可以根据包含或匹配文本模式的字段创建规则,根据数字字段和算术运算符创建规则,或者使用单个规则设置多个条件。
每种比较器都由不同的 Elasticsearch 查询类型支持,在某些情况下,了解这些查询类型很重要,以便您可以正确配置规则。以上列出的比较器映射到以下 Elasticsearch 查询类型:
- 大于:使用 gt 的 range
- 大于或等于:使用 gte 的 range
- 小于:使用 lt 的 range
- 小于或等于:使用 lte 的 range
- 等于 和 不等于:term
- 匹配 和 不匹配:match
- 短语匹配 和 短语不匹配:match_phrase
可以为日志阈值规则设置 分组。您可以设置一个或多个分组。
当设置 分组 时,将针对所选字段执行复合聚合。当这些组中的任何一个与所选规则条件匹配时,将 按组 触发警报。
在选择多个分组的场景中,组名以逗号分隔。
例如,如果选择 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 B, Architecture B
不匹配,则会触发一个警报。
同样,如果只选择了一个分组,例如 host.name
,并且 Host A 匹配条件,但 Host B 不匹配,则会为 Host 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 查询示例:
无分组。
{ "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 } }
设置
编辑使用日志阈值规则时,无法将显式索引模式设置为配置的一部分。索引模式是从日志应用程序的 设置 页面的 日志索引 推断出来的。
每次执行规则检查时,都会检查 日志索引 设置,但在创建规则时不会存储该设置。
设置 下设置的 时间戳 字段确定在查询中使用哪个字段作为时间戳。