使用 prometheus 按异常计数列出前 K 个端点

Posted

技术标签:

【中文标题】使用 prometheus 按异常计数列出前 K 个端点【英文标题】:Listing top K endpoints by exception count with prometheus 【发布时间】:2019-05-12 17:45:29 【问题描述】:

我正在使用 spring boot 2.x 并使用千分尺将入站 http 请求指标记录到 PrometheusMeterRegistry。

Spring boot metrics actuator 端点显示的指标如下

http_server_requests_seconds_countexception="None",method="GET",status="200",uri="/v2/endpoint1", 272.0 http_server_requests_seconds_countexception="SomeException",method="GET",status="400",uri="/v2/endpoint1", 8.0 http_server_requests_seconds_countexception="SomeOtherException",method="GET",status="422",uri="/v2/endpoint1", 5.0 http_server_requests_seconds_countexception="None",method="GET",status="200",uri="/v2/endpoint2", 472.0 http_server_requests_seconds_countexception="SomeException",method="GET",status="400",uri="/v2/endpoint2", 11.0 http_server_requests_seconds_countexception="SomeOtherException",method="GET",status="422",uri="/v2/endpoint2", 7.0

我对以下结果感兴趣

输出:(最近 x 分钟前 10 名)

1, /v2/endpoint2, actual count of non 200 status codes in last minutes or so
2, /v2/endpoint1, actual count of non 200 status codes in last minutes or so

我尝试了类似下面的计数功能。但是它不允许我提供时间范围。我无法按照我上面提到的方式让它工作。感谢您对此的任何帮助。

count(http_server_requests_seconds_countstatus!="200") by (uri, method)

【问题讨论】:

【参考方案1】:

您想获取每个 uri/方法的总数,然后选择其中的前 10 个:

topk(10,
  sum by (uri, method)(
    increase(http_server_requests_seconds_countstatus!="200"[10m])
  )
)

【讨论】:

以上是关于使用 prometheus 按异常计数列出前 K 个端点的主要内容,如果未能解决你的问题,请参考以下文章

Prometheus 按标签查询范围向量

如何从 Prometheus 获得上周的“UP”指标计数 = 0?

按名称属性动态信息列出计数数组

Shell:列出按文件计数排序的目录(包括在子目录中)

P2602 [ZJOI2010]数字计数

prometheus 指标类型