字段如何分类
假设查询 A 返回以下数据:
推荐配置:
附加信息不是需要填写的第三组字段。只要你明确选择了标签字段,查询结果中既不是标签字段、也不是值字段的列就会自动成为附加信息。
值字段
值字段应返回可转换为数字的内容。启用阈值判定时必须至少配置一个值字段;使用数据存在或数据缺失模式时可以不配置。- 值字段名称不能为空,也不能包含
.。 - 同一个字段不能同时配置为值字段和标签字段。
- 请先预览数据,按预览结果填写真实字段名。保存规则时不会连接数据源确认该列一定存在。
标签字段
标签字段决定告警身份,也决定不同查询的结果能否对应。请选择服务、集群、主机、实例等稳定维度。- 标签字段名称不能为空,同一个字段不要重复添加。
- 同一个字段不能同时配置为标签字段和值字段。
- 时间戳
- 日志原文或错误消息
- Trace ID、请求 ID 等每次都可能变化的值
- 其他高基数字段
标签字段留空时
为了兼容已有规则,标签字段留空时,查询结果中除值字段外的所有字段都会作为标签,不会再产生查询附加信息。
SLS 查询结果自带的
__source__ 和 __time__ 不会在标签字段留空时自动成为标签。如需使用这些内容,建议在查询中设置别名,再按普通字段配置。
在阈值表达式中引用值
查询名称就是阈值变量的前缀。例如,查询 A 的值字段为error_count。
一个值字段
只配置一个值字段时,可以使用完整写法,也可以直接使用查询变量:多个值字段
如果查询 A 同时配置了error_count 和 latency_ms,必须写明字段名称:
$A > 20。表达式中的字段也必须已配置为该查询的值字段。这个要求同样适用于“结果满足条件才算恢复”的恢复表达式。
查询名称
查询名称必须以英文字母开头,后面只能包含英文字母和数字,例如A、B2 或 Latency。R 和 __all__ 是保留名称,不能使用。
多个查询如何对齐
在阈值判定模式中,查询 A、B 的结果只有在标签字段名和标签值都完全相同时,才能进入同一次阈值计算。 以下结果可以一一对应:
你可以配置:
cluster 标签,或者 cluster 的值不同,这两行不会合并计算。请确保:
- 各查询选择相同的标签字段,并返回相同的标签值。
- 每个查询中,一个标签组合只对应一行结果。必要时先在查询语句中聚合。
- 错误消息、日志正文等变化字段作为附加信息,不要作为标签。
在备注描述中使用附加信息
查询附加信息会进入$annotations,并始终使用 $<查询名称>.<字段名称> 作为 key。无论配置了几个查询,也无论使用阈值判定、数据存在还是数据缺失模式,写法都相同:
$ 前缀用于标识查询产生的字段。规则中手工配置的自定义字段名称不能以 $ 开头。更多变量和示例请参见备注模板。
数据缺失告警会携带该告警对象最后一次成功查询时的附加信息。如果查询从未返回过数据,则没有可携带的查询附加信息。
适用范围
本页适用于:- MySQL、PostgreSQL、Oracle、ClickHouse、Elasticsearch 和 SLS 查询
- Loki 和 VictoriaLogs 的查原文主查询