TLDR:在使用来自新的统一 Grafana 警报系统(和 InfluxDB)的多维规则时,我无法访问 field_keys 或别名
我在使用新的统一 grafana 警报系统时遇到了问题。我创建了一个新的警报规则并为我的 InfluxDB 数据库输入了一个基本查询refID=A
。因为我想根据查询发送多个警报,所以我将标准经典条件表达式更改为reduce max(A)
和数学 $B > 0
表达式。
尝试执行此警报规则后,我收到错误:警报定义的评估结果格式无效:框架不能由其标签唯一标识:具有标签重复的结果 {}
我发现发生错误是因为警报系统无法区分各个信号。经过进一步检查,我还注意到查询后的结果是用 InfluxDB 的普通字段键显示的,但reduce和math表达式的结果只是都命名为 B(reduce)和 C(math)。原始字段键(或任何别名)刚刚被删除(参见示例图像)。
使用经典条件表达式时,字段键至少在生成的 ValueString ( ) 中可见,但在使用reduce和mathmetric='fieldKey' , ...
时甚至不再是这种情况,因为 ValueString 现在不再具有度量字段,而是只有包含reduce和数学表达式的结果 var='B' , var='C'
我真的不明白为什么在使用reduce和math表达式时字段键会被删除,以及为什么统一警报系统无法通过名称唯一识别信号(而是需要标签才能这样做)。到目前为止,我唯一的解决方案是在GROUP BY tagkey
我的流入查询中添加一条语句,以根据数据库中的现有标签创建标签。
即使这样解决了我在执行警报规则时不再收到错误消息的问题,但我仍然存在我查询的信号的原始名称被删除的问题。由于我正在尝试创建多维警报规则(可以根据查询生成多个警报),因此我想将字段键添加到警报消息中(以便我可以直接查看是哪个信号导致了警报)。
我觉得奇怪的是,在处理多维时将我在警报规则中查询的字段键(信号名称)添加到标签/警报消息(消息模板)中似乎是一项如此困难(甚至是不可能)的任务警报规则。在我看来,这应该是一个基本功能。
我是否忽略了某些东西,或者是否有人暗示如何克服这个问题?因为我看到的唯一解决方案是将 fieldKeys 添加为额外标签 (fieldKeyNames),因此我可以使用它GROUP BY fieldKeyNames
来创建一个包含 fieldKeys 的标签。然后,我将能够唯一地识别信号(不再有错误消息),并且还可以在消息模板系统中直接访问此标签(fieldKeyNames)。但如果可能的话,我想避免这样做,因为这意味着我必须重写多个(大型)数据库(并添加一个通常无用的标签)