0

我有一个环形缓冲区,我想以特定的时间间隔(比如每 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

我一直在思考另一种方法来监控我的环形缓冲区剩余容量的历史。可以使用我目前的方法还是我需要改变我的用法?

4

0 回答 0