我有一个环形缓冲区,我想以特定的时间间隔(比如每 200 毫秒)观察它的剩余容量。为此,我使用了直方图。这是Java中的代码:
Histogram capacityHistogram = Histogram.build()
.linearBuckets(30, 10, 7) // Buckets are : [0, 30), [30, 40), ...
.name("capacity_history")
.help("history of buffer free capacity")
.labelNames("name")
.register();
void updateMetrics() {
double remainingPercentage = (ringBuffer.remainingCapacity() / (double) ringBuffer.size()) * 100;
capacityHistogram.labels(this.name).observe(remainingPercentage);
}
this.taskScheduler = new ThreadPoolTaskScheduler();
this.taskScheduler.initialize();
taskScheduler.schedule(this::updateMetrics, new PeriodicTrigger(200, TimeUnit.MILLISECONDS));
但是,由于公开的指标不是排他性的(例如le="40"
同时包含 [0, 30) 和 [30, 40) 存储桶),而且我的观察不是每个事件、每秒或每个刮擦,我在可视化和获取业务价值方面存在问题我一直在寻找。我试过这个查询:
rate(capacity_history_bucket{name="whatever"}[5m]) * 20
// I sample 5 times per second so I multiplied it by 20 to have a percent-like value
我一直在思考另一种方法来监控我的环形缓冲区剩余容量的历史。可以使用我目前的方法还是我需要改变我的用法?