You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

编写PromQL查询对比多区域部署的服务版本差异

检测跨区域服务版本不一致的PromQL查询方案

问题背景

服务通过Micrometer暴露Git哈希作为版本标识,对应的指标为PACKAGE_VERSION_total,示例如下:

PACKAGE_VERSION_total{revision="b6d9de0"}, 0

该指标包含两个核心标签:

  • revision:存储Git哈希值,标识服务版本
  • region:存储服务部署的区域,如eu-west-2

我们需要编写PromQL查询,用于告警同一服务在不同区域运行不同版本的情况(部署期间的版本差异已由告警工具自动忽略)。同时需要纠正一个错误的查询思路:尝试通过对比各区域revision标签、检测版本差异是否超过1的写法是不可行的,错误示例如下:

sum by (revision) (PACKAGE_VERSION_total) by (region) > 1

错误示例分析

上述错误查询存在两个核心问题:

  1. 语法错误:PromQL不支持连续使用两个by子句,该查询无法被Prometheus解析
  2. 逻辑偏差:查询试图先按revision聚合求和,再按region二次聚合,完全未触及“跨区域版本不一致”的检测目标,无法识别不同区域的版本差异

正确的PromQL查询方案

要准确检测同一服务在不同区域的版本差异,可以使用以下查询:

count by (job) (distinct(revision) by (job, region)) > 1

查询逻辑说明

  1. distinct(revision) by (job, region):按服务(job)和区域(region)维度,提取每个区域对应的唯一版本号(假设同一区域内服务版本一致)
  2. count by (job):按服务维度,统计不同区域对应的版本数量
  3. > 1:当版本数量超过1时,说明该服务在不同区域运行了不同版本,触发告警

如果需要更严谨的统计(考虑同一区域内可能存在多实例但版本一致的情况),也可以使用以下等价查询:

count by (job) (count by (job, region, revision) (PACKAGE_VERSION_total)) > 1

内容的提问来源于stack exchange,提问作者Kaigo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 12:13:23