Kubernetes Prometheus statsd exporter-如何在请求持续时间度量(直方图)中标记状态代码

Kubernetes Prometheus statsd exporter-如何在请求持续时间度量(直方图)中标记状态代码,kubernetes,prometheus,statsd,Kubernetes,Prometheus,Statsd,我已经设置了statsd exporter,以便从gunicorn web服务器中获取度量值。我的目标是只为成功的请求(非5xx)过滤请求持续时间度量,但是在statsd exporter中,无法在持续时间度量中标记状态代码。任何人都可以建议一种在请求持续时间度量中添加状态代码的方法,或者一种在普罗米修斯中只过滤成功请求持续时间的方法 特别是,我想从statsd exporter提取成功请求持续时间Hitgram到prometheus 要将成功请求持续时间直方图指标从gunicorn web服务

我已经设置了statsd exporter,以便从gunicorn web服务器中获取度量值。我的目标是只为成功的请求(非5xx)过滤请求持续时间度量,但是在statsd exporter中,无法在持续时间度量中标记状态代码。任何人都可以建议一种在请求持续时间度量中添加状态代码的方法,或者一种在普罗米修斯中只过滤成功请求持续时间的方法


特别是,我想从statsd exporter提取成功请求持续时间Hitgram到prometheus

要将成功请求持续时间直方图指标从gunicorn web服务器导出到prometheus,您需要在gunicorn sorcecode中添加此功能

首先看一下导出statsd度量的代码。 您应该看到这种代码的和平:

status = resp.status
...
self.histogram("gunicorn.request.duration", duration_in_ms)
通过将代码更改为如下内容:

self.histogram("gunicorn.request.duration.%d" % status, duration_in_ms)
# HELP gunicorn_http_request_duration Metric autogenerated by statsd_exporter.
# TYPE gunicorn_http_request_duration summary
gunicorn_http_request_duration{job="gunicorn_request_duration",status="200",quantile="0.5"} 2.4610000000000002e-06
gunicorn_http_request_duration{job="gunicorn_request_duration",status="200",quantile="0.9"} 2.4610000000000002e-06
gunicorn_http_request_duration{job="gunicorn_request_duration",status="200",quantile="0.99"} 2.4610000000000002e-06
gunicorn_http_request_duration_sum{job="gunicorn_request_duration",status="200"} 2.4610000000000002e-06
gunicorn_http_request_duration_count{job="gunicorn_request_duration",status="200"} 1
gunicorn_http_request_duration{job="gunicorn_request_duration",status="404",quantile="0.5"} 3.056e-06
gunicorn_http_request_duration{job="gunicorn_request_duration",status="404",quantile="0.9"} 3.056e-06
gunicorn_http_request_duration{job="gunicorn_request_duration",status="404",quantile="0.99"} 3.056e-06
gunicorn_http_request_duration_sum{job="gunicorn_request_duration",status="404"} 3.056e-06
gunicorn_http_request_duration_count{job="gunicorn_request_duration",status="404"} 1
从这一刻起,您将使用状态代码导出度量名称,如
gunicorn\u请求\u持续时间\u 200
gunicorn\u请求\u持续时间\u 404

您还可以稍微修改它,并通过向您的
statsd_exporter
添加如下配置,将状态代码移动到标签:

mappings:
  - match: gunicorn.request.duration.*
    name: "gunicorn_http_request_duration"
    labels:
      status: "$1"
      job: "gunicorn_request_duration"
因此,您的度量现在将如下所示:

self.histogram("gunicorn.request.duration.%d" % status, duration_in_ms)
# HELP gunicorn_http_request_duration Metric autogenerated by statsd_exporter.
# TYPE gunicorn_http_request_duration summary
gunicorn_http_request_duration{job="gunicorn_request_duration",status="200",quantile="0.5"} 2.4610000000000002e-06
gunicorn_http_request_duration{job="gunicorn_request_duration",status="200",quantile="0.9"} 2.4610000000000002e-06
gunicorn_http_request_duration{job="gunicorn_request_duration",status="200",quantile="0.99"} 2.4610000000000002e-06
gunicorn_http_request_duration_sum{job="gunicorn_request_duration",status="200"} 2.4610000000000002e-06
gunicorn_http_request_duration_count{job="gunicorn_request_duration",status="200"} 1
gunicorn_http_request_duration{job="gunicorn_request_duration",status="404",quantile="0.5"} 3.056e-06
gunicorn_http_request_duration{job="gunicorn_request_duration",status="404",quantile="0.9"} 3.056e-06
gunicorn_http_request_duration{job="gunicorn_request_duration",status="404",quantile="0.99"} 3.056e-06
gunicorn_http_request_duration_sum{job="gunicorn_request_duration",status="404"} 3.056e-06
gunicorn_http_request_duration_count{job="gunicorn_request_duration",status="404"} 1
现在要查询除prometheus中5xx状态之外的所有指标,您可以运行:

gunicorn_http_request_duration{status=~"[^5].*"}

如果有帮助,请告诉我。

谢谢您的回复@HelloWord。这似乎是个好办法。让我试一试。