直方图中的 Prometheus 延迟图并计算百分位数

td4*_*d4u 5 histogram percentile grafana prometheus promql

我需要通过直方图时间序列在普罗米修斯上绘制延迟图,但我没有成功在 grafana 中显示直方图。

我期望能够显示:Y 轴是延迟,x 轴是时间序列。

每条线代表 p50、p75、p90、p100 - 在给定的时间窗口内聚合。一个示例指标是 nginx 的请求时间。

假设如果我有这样的直方图,

nginx_request_time_bucket(le=1) 1,
nginx_request_time_bucket(le=10) 2,
nginx_request_time_bucket(le=60) 2,
nginx_request_time_bucket(le=+inf) 5
Run Code Online (Sandbox Code Playgroud)

我正在寻找的示例图表在此链接中,[][] [点击]:https : //www.instana.com/blog/how-to-measure-latency-properly-in-7-minutes/

我尝试使用此查询使用热图绘制直方图,但这并没有给我我正在寻找的东西。我在看类似于图表的东西

histogram_quantile(0.75, sum(rate(nginx_request_time_bucket[5m])) by (le))
Run Code Online (Sandbox Code Playgroud)

非常感谢这里的任何帮助!

val*_*ala 2

您需要在 Grafana 图上为每个所需的百分位数设置单独的查询。例如,如果您需要过去 5 分钟内的p50p75和延迟,则应在p90Grafanap100中设置以下四个单独的查询:

histogram_quantile(0.50, sum(rate(nginx_request_time_bucket[5m])) by (le))
Run Code Online (Sandbox Code Playgroud)
histogram_quantile(0.75, sum(rate(nginx_request_time_bucket[5m])) by (le))
Run Code Online (Sandbox Code Playgroud)
histogram_quantile(0.90, sum(rate(nginx_request_time_bucket[5m])) by (le))
Run Code Online (Sandbox Code Playgroud)
histogram_quantile(1.00, sum(rate(nginx_request_time_bucket[5m])) by (le))
Run Code Online (Sandbox Code Playgroud)

PS 当使用Prometheus 兼容查询引擎(例如MetricsQL)中的histogram_quantiles函数时,可以将这些查询压缩为一个查询:

histogram_quantiles(
  "percentile",
  0.50, 0.75, 0.90, 1.00,
  sum(rate(nginx_request_time_bucket[5m])) by (le)
)
Run Code Online (Sandbox Code Playgroud)

请注意,通过Prometheus 直方图计算的百分位数的准确性很大程度上取决于所选的存储桶。可能很难为给定的百分位数集选择最佳的存储桶集,因此最好使用带有自动生成的存储桶的直方图。例如,请参见VictoriaMetrics 直方图