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

时间:2019-12-19 02:27:56

标签: kubernetes prometheus statsd

我已经设置了statsd-exporter来从gunicorn Web服务器上获取指标。我的目标是仅针对成功请求(非5xx)过滤请求持续时间量度,但是在statsd-exporter中,无法在持续时间量度中标记状态代码。谁能建议一种在请求持续时间量度中添加状态代码的方法,还是仅在Prometheus中过滤成功请求持续时间的方法。

我特别想从statsd-exporter到prometheus提取成功的请求持续时间统计图。

1 个答案:

答案 0 :(得分:1)

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

首先看一下导出statsd指标here的代码。 您应该会看到这段代码的平静:

status = resp.status
...
self.histogram("gunicorn.request.duration", duration_in_ms)

通过将代码更改为这样:

self.histogram("gunicorn.request.duration.%d" % status, duration_in_ms)

从现在开始,您将导出带有状态代码(例如gunicorn_request_duration_200gunicorn_request_duration_404等的指标名称)。

您还可以对它进行一些修改,并通过向statsd_exporter中添加以下配置来移动状态代码以标记:

mappings:
  - match: gunicorn.request.duration.*
    name: "gunicorn_http_request_duration"
    labels:
      status: "$1"
      job: "gunicorn_request_duration"

所以您的指标现在应如下所示:

# 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].*"}

让我知道它是否有帮助。