如何在Prometheus的curl请求中实现两个查询的求和?
解决Prometheus query_range多查询求和的422错误
出现422错误的核心原因是:两个sum查询返回的时间序列标签集不匹配(一个包含id标签,另一个包含project_id标签),Prometheus要求二元运算(如+)的两边必须有完全一致的标签才能执行。
提供两种可行的解决写法:
方法1:强制忽略标签差异进行求和
通过on() group_left()语法,告诉Prometheus忽略两边序列的标签差异,直接执行求和运算:
curl 'https://my_client/api/v1/query_range' -d 'query=sum(commits{development="no",id="123"}[4w])+on()+group_left()+sum(commits{development="no",project_id="456"}[4w])' -d 'start=-1y' -d 'step=4w' | json_pp
方法2:合并查询到单个sum中(更高效)
将两个项目的条件合并到同一个选择器中,直接对两个项目的提交数求和,避免二元运算的标签问题:
curl 'https://my_client/api/v1/query_range' -d 'query=sum(commits{development="no",(id="123" or project_id="456")}[4w])' -d 'start=-1y' -d 'step=4w' | json_pp
内容的提问来源于stack exchange,提问作者Max Bojorquez
相关产品推荐
相关产品推荐

