Vit*_*liy 5 performance monitoring prometheus
我有一个处理集合的 API。这个API的执行时间与集合大小有关(集合越大,占用的时间越多)。
我正在研究如何使用 prometheus 执行此操作,但不确定我是否正确地做事(这方面的文档有点缺乏)。
我做的第一件事是定义一个摘要指标来衡量 API 的执行时间。我正在使用规范的 rate(sum)/rate(count) 解释here。
现在,由于我知道延迟可能受输入大小的影响,我还想在平均执行时间上叠加请求大小。由于我不想测量每个可能的尺寸,我想我会使用直方图。像这样:
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();
Run Code Online (Sandbox Code Playgroud)
注意:术语“大小”与字节大小无关,而是与需要处理的集合的长度有关。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())
}
Run Code Online (Sandbox Code Playgroud)
题:
您的代码是正确的(尽管bulk_request_size_bytes这将是一个更好的指标名称)。
问题可能是您的存储桶不是最理想的,因为 10、30 和 50 字节对于大多数请求大小来说都非常小。我会尝试更大的存储桶尺寸来覆盖更典型的值。