如何使用GCP的MQL计算API请求失败百分比
GCP MQL计算API请求失败百分比解决方案
问题背景
需要通过MQL计算API请求的失败百分比,逻辑为(5XX错误总数 ÷ 总请求数) × 100。GCP无法直接通过日志型指标实现该计算,自行编写部分MQL后遇到瓶颈。相关信息:
- 日志指标:
logging.googleapis.com/user/my_apis - 过滤字段:
URL(目标API为https://example.com/myapi/services/myapi)、STATUS(包含2XX、5XX状态码) - 已编写的部分查询代码:
fetch l7_lb_rule | metric logging.googleapis.com/user/my_apis | { t_0: filter (metric.URL =~ 'https://example.com/myapi/services/myapi' && metric.STATUS='200') | align
完整解决方案
最终MQL查询代码
fetch l7_lb_rule | metric logging.googleapis.com/user/my_apis | filter metric.URL =~ 'https://example.com/myapi/services/myapi' | { # 统计所有5XX错误请求数 errors: filter metric.STATUS matches '5..' | sum; # 统计该API的总请求数 total: sum; } | ratio errors / total | multiply 100 | align rate(1m) # 按1分钟窗口聚合,可根据需求调整时间粒度 | every 1m
代码逻辑说明
- 锁定目标API:先通过
filter metric.URL =~ 'https://example.com/myapi/services/myapi'过滤出指定API的所有请求,排除无关数据。 - 分支统计数据:用花括号拆分两个统计分支:
errors分支:通过metric.STATUS matches '5..'匹配所有5XX状态码,再用sum统计错误请求总数;若STATUS是数值类型,替换为metric.STATUS >= 500 && metric.STATUS < 600。total分支:直接用sum统计该API的全部请求数,自动包含2XX、5XX等所有状态。
- 计算百分比:通过
ratio errors / total得到错误请求占比,再用multiply 100转换为百分比格式。 - 时间聚合设置:
align rate(1m)和every 1m设置时间聚合窗口,可根据业务需求调整为5分钟、1小时等粒度。
内容的提问来源于stack exchange,提问作者Shashank Agrawal
相关产品推荐
相关产品推荐

