自定义PromQL记录指标与原查询结果不一致的原因排查
问题原因分析及解决办法
以下是几种最可能导致自定义指标数值为原查询2倍的原因:
记录规则的语法错误(括号位置错误)
这是最常见的触发原因。如果你的记录规则实际配置中,写错了sum和by的括号位置,比如写成:round(sum(irate(A_BASE_METRIC[5m]) by (xxx,xxx,xxx)), 0.001)这个写法的逻辑是:先对每个
(xxx,xxx,xxx)标签组合计算irate,再将所有组合的结果全局求和,最终生成一个单一的时间序列。而你原查询的逻辑是仅对指定标签组合的序列求和,若环境中恰好有2个符合条件的标签组合,自定义指标数值就会是原查询的2倍。正确的语法应该是:
round(sum(irate(A_BASE_METRIC[5m])) by (xxx,xxx,xxx), 0.001)这个写法会先对所有
A_BASE_METRIC计算irate,再按(xxx,xxx,xxx)维度分组求和,每个标签组合生成独立的时间序列。自定义指标被重复生成
如果同一记录规则在多个Prometheus实例中配置执行,或规则文件中重复定义了该规则,会导致workload_qps_in_unit_time的同一标签组合对应两个完全相同的时间序列。当你查询该指标时,若无意中对这两个序列做了求和操作(比如可视化工具默认聚合),数值就会是原查询的2倍。原指标存在隐性重复序列
检查A_BASE_METRIC的完整标签集,是否存在除xxx,xxx,xxx之外的标签(比如instance、job),这些标签的不同值对应同一个实际workload,但你在记录规则中按xxx,xxx,xxx聚合时,将不同来源的序列全部加总,而原查询的过滤条件仅包含了其中一个来源的序列,最终导致自定义指标数值翻倍。
内容的提问来源于stack exchange,提问作者Mike Wang
相关产品推荐
相关产品推荐

