如何实现Prometheus中同标签Micrometer JMS指标的差值计算?
问题分析与解决办法
你遇到的查询无结果,核心有两个问题:
1. 指标名称笔误
你写的abs_payment_total是错误的,应该替换为实际的入队指标名jms_payment_queue_in_total。
2. 正确的标签匹配与查询写法
单个service_id的差值查询
修正指标名后,针对service_id=1050的正确查询是:
jms_payment_queue_in_total{service_id="1050"} - ignoring(success) jms_payment_queue_out_total{success="success", service_id="1050"}
这里的ignoring(success)是必须的——因为jms_payment_queue_out_total带有success标签,而jms_payment_queue_in_total没有,忽略该标签才能让两个指标按service_id匹配对齐。
所有共享service_id的差值查询
如果要计算所有存在对应service_id的入队、出队差值,不需要指定具体service_id,直接用:
jms_payment_queue_in_total - ignoring(success) jms_payment_queue_out_total{success="success"}
更合理的计数器处理方式
注意这两个指标都是counter类型(计数器),计数器值是单调递增的(除非服务重启重置),直接用原始值做差值的意义有限(比如出队数超过入队数会出现负数,或者重启后数值突变)。更推荐计算一段时间内的增量差值,比如统计5分钟内的入队增量减去出队增量:
increase(jms_payment_queue_in_total[5m]) - ignoring(success) increase(jms_payment_queue_out_total{success="success"}[5m])
可以根据实际需求调整时间窗口(比如[1m]、[10m])。
内容的提问来源于stack exchange,提问作者Eljah
相关产品推荐
相关产品推荐

