1

我正在尝试使用应用引擎的 http/server/response_count指标在 CGP/stackdriver 上创建警报。这个指标有一个 response_code 字段,我可以分组:

fetch gae_app::appengine.googleapis.com/http/server/response_count
| filter metric.response_code>=500 && metric.response_code<600
| every 10m
| group_by [metric.response_code], sum(val())

但是假设我想将所有 500 多个响应合并到 5xx 类响应下,然后聚合到该范围的单个计数,是否可以进行预处理,以便上例中的 group_by 产生单个时间序列,例如 5xx?我注意到其中一个负载均衡器指标具有这种类型的“response_code_class”,但这不适用于该指标。

之后,我正在寻找 5xx 请求与所有请求的比率,这个指标甚至可能吗?

4

2 回答 2

0

还有另一种方法可以计算错误响应与所有响应的比率。在这种情况下,由于比率的分子和分母来自同一个时间序列,因此您也可以通过分组来计算比率。请检查一次分组查询格式:

fetch gae_app::appengine.googleapis.com/http/server/response_count
| group_by [metric.response_code],
    sum(if(response_code_class = 500, val(), 0)) / sum(val())

有关详细信息,请参阅示例分组

于 2021-09-06T07:12:04.183 回答
0

以下是执行以下操作的查询:

  • 使用 agroup_by计算 10 分钟滑动窗口中的 5xx 响应。
  • 同样group_by,还计算同一 10 分钟滑动窗口中的所有响应。
  • 在 之后group_by,只需计算两个计数的比率。
fetch gae_app
| metric 'appengine.googleapis.com/http/server/response_count'
| group_by [], sliding(10m), [
    countAll: sum(response_count), 
    count5xx: sum(if(response_code>=500 && response_code < 600, response_count, 0))]
| value (count5xx / countAll)
| every 1m

类似查询生成的图表截图:

类似查询生成的图表的屏幕截图

上述查询的输出是 5xx 响应与所有响应的比率。

注意:如果您想计算这些比率,例如,通过zone,只需添加zone到第一个参数,group_by如下所示:group_by [zone], sliding(10m), [countAll: ..., count5xx: ...] | value (count5xx / countAll)

于 2021-09-20T13:36:10.767 回答