Skip to content

Commit 55c6499

Browse files
authored
feat(blooms): Add series & chunks per block metrics (#13721)
1 parent 4cbe2a6 commit 55c6499

File tree

2 files changed

+32
-11
lines changed

2 files changed

+32
-11
lines changed

pkg/storage/bloom/v1/builder.go

+18-11
Original file line numberDiff line numberDiff line change
@@ -217,6 +217,7 @@ func (mb *MergeBuilder) processNextSeries(
217217
) (
218218
*SeriesWithBlooms, // nextInBlocks pointer update
219219
int, // bytes added
220+
int, // chunks added
220221
bool, // blocksFinished update
221222
bool, // done building block
222223
error, // error
@@ -230,7 +231,7 @@ func (mb *MergeBuilder) processNextSeries(
230231
}()
231232

232233
if !mb.store.Next() {
233-
return nil, 0, false, true, nil
234+
return nil, 0, 0, false, true, nil
234235
}
235236

236237
nextInStore := mb.store.At()
@@ -249,7 +250,7 @@ func (mb *MergeBuilder) processNextSeries(
249250
}
250251

251252
if err := mb.blocks.Err(); err != nil {
252-
return nil, 0, false, false, errors.Wrap(err, "iterating blocks")
253+
return nil, 0, 0, false, false, errors.Wrap(err, "iterating blocks")
253254
}
254255
blockSeriesIterated++
255256
nextInBlocks = mb.blocks.At()
@@ -276,11 +277,11 @@ func (mb *MergeBuilder) processNextSeries(
276277

277278
for bloom := range ch {
278279
if bloom.Err != nil {
279-
return nil, bytesAdded, false, false, errors.Wrap(bloom.Err, "populating bloom")
280+
return nil, bytesAdded, 0, false, false, errors.Wrap(bloom.Err, "populating bloom")
280281
}
281282
offset, err := builder.AddBloom(bloom.Bloom)
282283
if err != nil {
283-
return nil, bytesAdded, false, false, errors.Wrapf(
284+
return nil, bytesAdded, 0, false, false, errors.Wrapf(
284285
err, "adding bloom to block for fp (%s)", nextInStore.Fingerprint,
285286
)
286287
}
@@ -290,25 +291,29 @@ func (mb *MergeBuilder) processNextSeries(
290291

291292
done, err := builder.AddSeries(*nextInStore, offsets)
292293
if err != nil {
293-
return nil, bytesAdded, false, false, errors.Wrap(err, "committing series")
294+
return nil, bytesAdded, 0, false, false, errors.Wrap(err, "committing series")
294295
}
295296

296-
return nextInBlocks, bytesAdded, blocksFinished, done, nil
297+
return nextInBlocks, bytesAdded, chunksIndexed + chunksCopied, blocksFinished, done, nil
297298
}
298299

299300
func (mb *MergeBuilder) Build(builder *BlockBuilder) (checksum uint32, totalBytes int, err error) {
300301
var (
301-
nextInBlocks *SeriesWithBlooms
302-
blocksFinished bool // whether any previous blocks have been exhausted while building new block
303-
done bool
302+
nextInBlocks *SeriesWithBlooms
303+
blocksFinished bool // whether any previous blocks have been exhausted while building new block
304+
done bool
305+
totalSeriesAdded = 0
306+
totalChunksAdded int
304307
)
305308
for {
306-
var bytesAdded int
307-
nextInBlocks, bytesAdded, blocksFinished, done, err = mb.processNextSeries(builder, nextInBlocks, blocksFinished)
309+
var bytesAdded, chunksAdded int
310+
nextInBlocks, bytesAdded, chunksAdded, blocksFinished, done, err = mb.processNextSeries(builder, nextInBlocks, blocksFinished)
308311
totalBytes += bytesAdded
312+
totalChunksAdded += chunksAdded
309313
if err != nil {
310314
return 0, totalBytes, errors.Wrap(err, "processing next series")
311315
}
316+
totalSeriesAdded++
312317
if done {
313318
break
314319
}
@@ -324,6 +329,8 @@ func (mb *MergeBuilder) Build(builder *BlockBuilder) (checksum uint32, totalByte
324329
flushedFor = blockFlushReasonFull
325330
}
326331
mb.metrics.blockSize.Observe(float64(sz))
332+
mb.metrics.seriesPerBlock.Observe(float64(totalSeriesAdded))
333+
mb.metrics.chunksPerBlock.Observe(float64(totalChunksAdded))
327334
mb.metrics.blockFlushReason.WithLabelValues(flushedFor).Inc()
328335

329336
checksum, err = builder.Close()

pkg/storage/bloom/v1/metrics.go

+14
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ type Metrics struct {
2020
insertsTotal *prometheus.CounterVec
2121
sourceBytesAdded prometheus.Counter
2222
blockSize prometheus.Histogram
23+
seriesPerBlock prometheus.Histogram
24+
chunksPerBlock prometheus.Histogram
2325
blockFlushReason *prometheus.CounterVec
2426

2527
// reads
@@ -120,6 +122,18 @@ func NewMetrics(r prometheus.Registerer) *Metrics {
120122
Help: "Size of the bloom block in bytes",
121123
Buckets: prometheus.ExponentialBucketsRange(1<<20, 1<<30, 8),
122124
}),
125+
seriesPerBlock: promauto.With(r).NewHistogram(prometheus.HistogramOpts{
126+
Namespace: constants.Loki,
127+
Name: "bloom_series_per_block",
128+
Help: "Number of series per block",
129+
Buckets: prometheus.ExponentialBuckets(1, 2, 9), // 2 --> 256
130+
}),
131+
chunksPerBlock: promauto.With(r).NewHistogram(prometheus.HistogramOpts{
132+
Namespace: constants.Loki,
133+
Name: "bloom_chunks_per_block",
134+
Help: "Number of chunks per block",
135+
Buckets: prometheus.ExponentialBuckets(1, 2, 15), // 2 --> 16384
136+
}),
123137
blockFlushReason: promauto.With(r).NewCounterVec(prometheus.CounterOpts{
124138
Namespace: constants.Loki,
125139
Name: "bloom_block_flush_reason_total",

0 commit comments

Comments
 (0)