Add metric to track ingested histogram bucket count per user by PaurushGarg · Pull Request #7297 · cortexproject/cortex · GitHub
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
16 changes: 16 additions & 0 deletions pkg/cortexpb/histograms.go
Original file line number Diff line number Diff line change
Expand Up @@ -160,3 +160,19 @@ func spansPromProtoToSpansProto(s []prompb.BucketSpan) []BucketSpan {

return spans
}

func (h Histogram) BucketCount() int {
count := 0
if h.IsFloatHistogram() {
count = len(h.PositiveCounts) + len(h.NegativeCounts)
if h.GetZeroCountFloat() > 0 {
count++
}
} else {
count = len(h.PositiveDeltas) + len(h.NegativeDeltas)
if h.GetZeroCountInt() > 0 {
count++
}
}
return count
}
2 changes: 2 additions & 0 deletions pkg/ingester/ingester.go
Original file line number Diff line number Diff line change
Expand Up @@ -1502,6 +1502,7 @@ func (i *Ingester) Push(ctx context.Context, req *cortexpb.WriteRequest) (*corte
if ref != 0 {
if _, err = app.AppendHistogram(ref, copiedLabels, hp.TimestampMs, h, fh); err == nil {
succeededHistogramsCount++
i.metrics.ingestedHistogramBuckets.WithLabelValues(userID).Observe(float64(hp.BucketCount()))
continue
}
} else {
Expand All @@ -1513,6 +1514,7 @@ func (i *Ingester) Push(ctx context.Context, req *cortexpb.WriteRequest) (*corte
newSeries = append(newSeries, copiedLabels)
}
succeededHistogramsCount++
i.metrics.ingestedHistogramBuckets.WithLabelValues(userID).Observe(float64(hp.BucketCount()))
continue
}
}
Expand Down
54 changes: 32 additions & 22 deletions pkg/ingester/metrics.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,28 +30,29 @@ const (
)

type ingesterMetrics struct {
ingestedSamples prometheus.Counter
ingestedHistograms prometheus.Counter
ingestedExemplars prometheus.Counter
ingestedMetadata prometheus.Counter
ingestedSamplesFail prometheus.Counter
ingestedHistogramsFail prometheus.Counter
ingestedExemplarsFail prometheus.Counter
ingestedMetadataFail prometheus.Counter
oooLabelsTotal *prometheus.CounterVec
queries prometheus.Counter
queriedSamples prometheus.Histogram
queriedExemplars prometheus.Histogram
queriedSeries prometheus.Histogram
queriedChunks prometheus.Histogram
memSeries prometheus.Gauge
memMetadata prometheus.Gauge
memUsers prometheus.Gauge
memSeriesCreatedTotal *prometheus.CounterVec
memMetadataCreatedTotal *prometheus.CounterVec
memSeriesRemovedTotal *prometheus.CounterVec
memMetadataRemovedTotal *prometheus.CounterVec
pushErrorsTotal *prometheus.CounterVec
ingestedSamples prometheus.Counter
ingestedHistograms prometheus.Counter
ingestedExemplars prometheus.Counter
ingestedMetadata prometheus.Counter
ingestedSamplesFail prometheus.Counter
ingestedHistogramsFail prometheus.Counter
ingestedExemplarsFail prometheus.Counter
ingestedMetadataFail prometheus.Counter
ingestedHistogramBuckets *prometheus.HistogramVec
oooLabelsTotal *prometheus.CounterVec
queries prometheus.Counter
queriedSamples prometheus.Histogram
queriedExemplars prometheus.Histogram
queriedSeries prometheus.Histogram
queriedChunks prometheus.Histogram
memSeries prometheus.Gauge
memMetadata prometheus.Gauge
memUsers prometheus.Gauge
memSeriesCreatedTotal *prometheus.CounterVec
memMetadataCreatedTotal *prometheus.CounterVec
memSeriesRemovedTotal *prometheus.CounterVec
memMetadataRemovedTotal *prometheus.CounterVec
pushErrorsTotal *prometheus.CounterVec

activeSeriesPerUser *prometheus.GaugeVec
activeNHSeriesPerUser *prometheus.GaugeVec
Expand Down Expand Up @@ -130,6 +131,14 @@ func newIngesterMetrics(r prometheus.Registerer,
Name: "cortex_ingester_ingested_metadata_failures_total",
Help: "The total number of metadata that errored on ingestion.",
}),
ingestedHistogramBuckets: promauto.With(r).NewHistogramVec(prometheus.HistogramOpts{
Name: "cortex_ingester_ingested_histogram_buckets",
Help: "The number of ingested native histogram buckets per user.",
NativeHistogramBucketFactor: 1.1,
NativeHistogramMaxBucketNumber: 100,
NativeHistogramMinResetDuration: 1,
Buckets: prometheus.ExponentialBuckets(1, 2, 10), // 1 to 512 buckets
}, []string{"user"}),
oooLabelsTotal: promauto.With(r).NewCounterVec(prometheus.CounterOpts{
Name: "cortex_ingester_out_of_order_labels_total",
Help: "The total number of out of order label found per user.",
Expand Down Expand Up @@ -359,6 +368,7 @@ func (m *ingesterMetrics) deletePerUserMetrics(userID string) {
m.usagePerLabelSet.DeletePartialMatch(prometheus.Labels{"user": userID})
m.limitsPerLabelSet.DeletePartialMatch(prometheus.Labels{"user": userID})
m.pushErrorsTotal.DeletePartialMatch(prometheus.Labels{"user": userID})
m.ingestedHistogramBuckets.DeleteLabelValues(userID)

if m.memSeriesCreatedTotal != nil {
m.memSeriesCreatedTotal.DeleteLabelValues(userID)
Expand Down
2 changes: 2 additions & 0 deletions pkg/ingester/metrics_test.go
Loading