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

如何使用MQL计算Google Cloud Monitoring两个指标的差值与比率

Google Cloud Monitoring MQL 双指标差值与比率计算方案

需求说明

  • 计算两个时间序列的差值,用于追踪已启动与已完成的进程数量差异
  • 计算两个时间序列的比率,支持优雅处理分母为null的场景

原代码异常原因

原MQL返回结果始终为0的核心原因是:Micrometer的Spring Boot实现在两个指标中生成的标签存在差异,普通join操作无返回结果,outer_join仅返回第二个时间序列,导致运算异常。

解决方案

1. 标签对齐处理

在每个子查询末尾使用map drop[]删除不匹配的标签,也可以使用map keep[]仅保留需要的维度标签,必须保证两个子查询输出的时间序列标签完全一致才能正常执行join操作。

2. 差值计算MQL示例

fetch global
| { t_started:
      metric 'custom.googleapis.com/http/server/requests/count'
      | filter (metric.service == 'service-a' && metric.uri =~ '/api/started')
      | align next_older(1m)
      | map drop[label1, label2] # 替换为实际需要删除的不匹配标签
      | group_by [], sum(val()) # 全量聚合时可添加,聚合后无冗余标签
    ;
    t_completed:
      metric 'custom.googleapis.com/http/server/requests/count'
      | filter (metric.service == 'service-a' && metric.uri =~ '/api/completed')
      | align next_older(1m)
      | map drop[label1, label2] # 和上方删除的标签列表保持一致
      | group_by [], sum(val())
  }
| outer_join 0
| value t_started - t_completed # 计算进行中进程数量

3. 比率计算MQL示例(兼容空/零值分母)

fetch global
| { t_started:
      metric 'custom.googleapis.com/http/server/requests/count'
      | filter (metric.service == 'service-a' && metric.uri =~ '/api/started')
      | align next_older(1m)
      | map drop[label1, label2]
      | group_by [], sum(val())
    ;
    t_completed:
      metric 'custom.googleapis.com/http/server/requests/count'
      | filter (metric.service == 'service-a' && metric.uri =~ '/api/completed')
      | align next_older(1m)
      | map drop[label1, label2]
      | group_by [], sum(val())
  }
| outer_join 0
# 分母为0时直接返回0,可根据业务需要调整默认返回值
| value if(t_started == 0, 0, t_completed / t_started)

补充说明

  • outer_join 0会将不存在的序列值用0填充,避免Null值导致运算失败
  • 如果需要保留特定维度做分组统计,可以调整group_by的参数,仅删除不需要的差异化标签即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 15:45:04