【问题标题】:Prometheus Histogram Vector: All buckets fill equally?普罗米修斯直方图向量:所有桶都装得一样吗?
【发布时间】:2018-06-06 12:45:03
【问题描述】:

我打算使用 Prometheus 直方图向量来监控 Go 中请求处理程序的执行时间。

我是这样注册的:

var RequestTimeHistogramVec = prometheus.NewHistogramVec(
    prometheus.HistogramOpts{
        Name:    "request_duration_seconds",
        Help:    "Request duration distribution",
        Buckets: []float64{0.125, 0.25, 0.5, 1, 1.5, 2, 3, 4, 5, 7.5, 10, 20},
    },
    []string{"endpoint"},
)

func init() {
    prometheus.MustRegister(RequestTimeHistogramVec)
}

我是这样用的:

startTime := time.Now()
// handle request here
metrics.RequestTimeHistogramVec.WithLabelValues("get:" + endpointName).Observe(time.Since(startTime).Seconds())

当我在使用我的端点几次后对 /metrics 端点执行 HTTP GET 时,我得到 - 除其他外 - 以下内容:

# HELP request_duration_seconds Request duration distribution
# TYPE request_duration_seconds histogram
request_duration_seconds_bucket{endpoint="get:/position",le="0.125"} 6
request_duration_seconds_bucket{endpoint="get:/position",le="0.25"} 6
request_duration_seconds_bucket{endpoint="get:/position",le="0.5"} 6
request_duration_seconds_bucket{endpoint="get:/position",le="1"} 6
request_duration_seconds_bucket{endpoint="get:/position",le="1.5"} 6
request_duration_seconds_bucket{endpoint="get:/position",le="2"} 6
request_duration_seconds_bucket{endpoint="get:/position",le="3"} 6
request_duration_seconds_bucket{endpoint="get:/position",le="4"} 6
request_duration_seconds_bucket{endpoint="get:/position",le="5"} 6
request_duration_seconds_bucket{endpoint="get:/position",le="7.5"} 6
request_duration_seconds_bucket{endpoint="get:/position",le="10"} 6
request_duration_seconds_bucket{endpoint="get:/position",le="20"} 6
request_duration_seconds_bucket{endpoint="get:/position",le="+Inf"} 6
request_duration_seconds_sum{endpoint="get:/position"} 0.022002387
request_duration_seconds_count{endpoint="get:/position"} 6

从外观上看,所有存储桶的填充量相同,等于我使用端点的总次数(6 次)。

为什么会发生这种情况,我该如何解决?

【问题讨论】:

    标签: go prometheus


    【解决方案1】:

    Prometheus 直方图存储桶是累积的,因此在这种情况下,所有请求的时间都小于或等于 125 毫秒。

    在这种情况下,您选择的存储桶可能不是最好的,您可能希望使一些存储桶更小。

    【讨论】:

    • 在你发布的那一刻就明白了。我会调整的。
    【解决方案2】:

    这不是错误。注意填充桶的规则是le=...,意思是小于或等于。由于所有 6 个请求都很快成功,因此所有存储桶都已填满。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-22
      • 1970-01-01
      • 1970-01-01
      • 2017-09-03
      • 1970-01-01
      • 2022-10-17
      • 2022-12-02
      • 2022-12-17
      相关资源
      最近更新 更多