如何正确使用 java 客户端的 Prometheus 直方图来跟踪大小而不是延迟?

How to correctly use Prometheus Histogram from java client to track size rather than latency?

我有一个处理集合的 API。 这个API的执行时间和集合大小有关(集合越大,耗时越多)

我正在研究如何使用 prometheus 做到这一点,但不确定我是否正确地做事(这方面的文档有点缺乏)。

我做的第一件事是定义一个摘要指标来衡量 API 的执行时间。我正在使用规范率(总和)/率(计数),如 here.

所述

现在,因为我知道延迟可能会受到输入大小的影响,所以我还想在平均执行时间上叠加请求 size。因为我不想测量每个可能的尺寸,所以我想我会使用直方图。像这样:

Histogram histogram = Histogram.build().buckets(10, 30, 50)
        .name("BULK_REQUEST_SIZE")
        .help("histogram of bulk sizes to correlate with duration")
        .labelNames("method", "entity")
        .register();

注意:术语'size' 与字节大小有关,但与有关需要处理的集合长度。 2 件、5 件、50 件...

在执行过程中我做了(简化):

@PUT
void process(Collection<Entity> entitiesToProcess, string entityName){
   Timer t = summary.labels("PUT_BULK", entityName).startTimer()

      // process...

   t.observeDuration();
   histogram.labels("PUT_BULK", entityName).observe(entitiesToProcess.size())
}

问题:

您的代码是正确的(尽管 bulk_request_size_bytes 是更好的指标名称)。

问题可能是您的存储桶不是最理想的,因为 10、30 和 50 字节对于大多数请求大小来说都非常小。我会尝试覆盖更多典型值的更大存储桶大小。