Prometheus statsd-exporter - 如何在请求持续时间指标(直方图)中标记状态代码
Prometheus statsd-exporter - how to tag status code in request duration metric (histogram)
我设置了 statsd-exporter 以从 gunicorn 网络服务器中抓取指标。我的目标是仅针对成功请求(非 5xx)过滤请求持续时间指标,但是在 statsd-exporter 中无法在持续时间指标中标记状态代码。任何人都可以建议一种在请求持续时间指标中添加状态代码的方法,或者一种在普罗米修斯中仅过滤成功请求持续时间的方法。
特别是我想从 statsd-exporter 中提取成功的请求持续时间直方图到 prometheus。
要将成功的请求持续时间直方图指标从 gunicorn 网络服务器导出到 prometheus,您需要在 gunicorn 源代码中添加此功能。
首先看一下导出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_200
或 gunicorn_request_duration_404
等状态代码的指标名称。
您还可以对其进行一些修改,并将状态代码移至标签,方法是将如下配置添加到您的 statsd_exporter
:
mappings:
- match: gunicorn.request.duration.*
name: "gunicorn_http_request_duration"
labels:
status: ""
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].*"}
如果有帮助,请告诉我。
我设置了 statsd-exporter 以从 gunicorn 网络服务器中抓取指标。我的目标是仅针对成功请求(非 5xx)过滤请求持续时间指标,但是在 statsd-exporter 中无法在持续时间指标中标记状态代码。任何人都可以建议一种在请求持续时间指标中添加状态代码的方法,或者一种在普罗米修斯中仅过滤成功请求持续时间的方法。
特别是我想从 statsd-exporter 中提取成功的请求持续时间直方图到 prometheus。
要将成功的请求持续时间直方图指标从 gunicorn 网络服务器导出到 prometheus,您需要在 gunicorn 源代码中添加此功能。
首先看一下导出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_200
或 gunicorn_request_duration_404
等状态代码的指标名称。
您还可以对其进行一些修改,并将状态代码移至标签,方法是将如下配置添加到您的 statsd_exporter
:
mappings:
- match: gunicorn.request.duration.*
name: "gunicorn_http_request_duration"
labels:
status: ""
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].*"}
如果有帮助,请告诉我。