AppEngine的response_count指标能否按响应码类别分组?
两个需求均可通过调整MQL(Monitoring Query Language)语句实现,无需依赖指标内置的response_code_class属性,具体方案如下:
合并5xx响应为单一时间序列
你当前的查询已经通过filter限定了仅查询500~599区间的响应码,只需去掉group_by中的metric.response_code维度,聚合后即可得到整个5xx区间的总计数,仅返回单条时间序列:
fetch gae_app::appengine.googleapis.com/http/server/response_count | filter metric.response_code>=500 && metric.response_code<600 | every 10m | group_by [], sum(val())
如果需要额外保留分类标签方便后续识别,可通过map子句新增自定义的响应码分类维度:
fetch gae_app::appengine.googleapis.com/http/server/response_count | filter metric.response_code>=500 && metric.response_code<600 | every 10m | map add[response_code_class: "5xx"], val() | group_by [response_code_class], sum(val())
计算5xx请求占总请求的比例
通过MQL的多查询join能力,分别统计同时间窗口内的5xx请求数和总请求数,再做比值计算即可,参考语句如下:
# 统计10分钟窗口内的5xx请求总数 { fetch gae_app::appengine.googleapis.com/http/server/response_count | filter metric.response_code>=500 && metric.response_code<600 | every 10m | group_by [], sum(val()) | alias 5xx_count } | join # 统计同一窗口内的全部请求总数 { fetch gae_app::appengine.googleapis.com/http/server/response_count | every 10m | group_by [], sum(val()) | alias total_count } # 计算占比,乘以100可直接得到百分比数值 | value (5xx_count / total_count) * 100
- 如果需要按服务、版本等其他维度拆分统计占比,只需在两个子查询的
group_by参数中同步添加对应的维度字段即可。
内容的提问来源于stack exchange,提问作者Andy H
相关产品推荐
相关产品推荐

