リング バッファーがあり、特定の間隔 (たとえば、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
リングバッファの残り容量の履歴を監視する別の方法を考えています。現在のアプローチを使用できますか、それとも使用方法を変更する必要がありますか?