我有一个处理集合的 API。
该API的执行时间与集合大小有关(集合越大,花费的时间就越多)。
我正在研究如何使用普罗米修斯做到这一点,但不确定我是否正确地做事(该领域的文档有点缺乏)。
我做的第一件事是定义一个摘要指标来衡量 API 的执行时间。我正在使用规范率(总和)/率(计数),如所解释的here https://prometheus.io/docs/practices/histograms/.
现在,因为我知道延迟可能会受到输入大小的影响,所以我还想覆盖请求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();
Note:术语“尺寸”确实not与以字节为单位的大小有关,但与length需要处理的集合。 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())
}
问题:
- 后来,当我查看 Grafana 中的 BULK_REQUEST_SIZE_bucket 时,我发现所有存储桶都具有相同的值,所以显然我做错了什么。
- 有没有更规范的方法来做到这一点?