From 4e748b9cd8c269948b79d35e46d77bff66ced7cf Mon Sep 17 00:00:00 2001 From: Bryan Boreham Date: Tue, 10 Oct 2023 21:30:19 +0100 Subject: [PATCH] scraping: re-use labels Builder in scrape report metrics Signed-off-by: Bryan Boreham --- scrape/scrape.go | 41 ++++++++++++++++++++++------------------- 1 file changed, 22 insertions(+), 19 deletions(-) diff --git a/scrape/scrape.go b/scrape/scrape.go index 072f5f47be..ce581d71b8 100644 --- a/scrape/scrape.go +++ b/scrape/scrape.go @@ -1785,30 +1785,31 @@ func (sl *scrapeLoop) report(app storage.Appender, start time.Time, duration tim if scrapeErr == nil { health = 1 } + b := labels.NewBuilderWithSymbolTable(sl.symbolTable) - if err = sl.addReportSample(app, scrapeHealthMetricName, ts, health); err != nil { + if err = sl.addReportSample(app, scrapeHealthMetricName, ts, health, b); err != nil { return } - if err = sl.addReportSample(app, scrapeDurationMetricName, ts, duration.Seconds()); err != nil { + if err = sl.addReportSample(app, scrapeDurationMetricName, ts, duration.Seconds(), b); err != nil { return } - if err = sl.addReportSample(app, scrapeSamplesMetricName, ts, float64(scraped)); err != nil { + if err = sl.addReportSample(app, scrapeSamplesMetricName, ts, float64(scraped), b); err != nil { return } - if err = sl.addReportSample(app, samplesPostRelabelMetricName, ts, float64(added)); err != nil { + if err = sl.addReportSample(app, samplesPostRelabelMetricName, ts, float64(added), b); err != nil { return } - if err = sl.addReportSample(app, scrapeSeriesAddedMetricName, ts, float64(seriesAdded)); err != nil { + if err = sl.addReportSample(app, scrapeSeriesAddedMetricName, ts, float64(seriesAdded), b); err != nil { return } if sl.reportExtraMetrics { - if err = sl.addReportSample(app, scrapeTimeoutMetricName, ts, sl.timeout.Seconds()); err != nil { + if err = sl.addReportSample(app, scrapeTimeoutMetricName, ts, sl.timeout.Seconds(), b); err != nil { return } - if err = sl.addReportSample(app, scrapeSampleLimitMetricName, ts, float64(sl.sampleLimit)); err != nil { + if err = sl.addReportSample(app, scrapeSampleLimitMetricName, ts, float64(sl.sampleLimit), b); err != nil { return } - if err = sl.addReportSample(app, scrapeBodySizeBytesMetricName, ts, float64(bytes)); err != nil { + if err = sl.addReportSample(app, scrapeBodySizeBytesMetricName, ts, float64(bytes), b); err != nil { return } } @@ -1819,37 +1820,38 @@ func (sl *scrapeLoop) reportStale(app storage.Appender, start time.Time) (err er ts := timestamp.FromTime(start) stale := math.Float64frombits(value.StaleNaN) + b := labels.NewBuilder(labels.EmptyLabels()) - if err = sl.addReportSample(app, scrapeHealthMetricName, ts, stale); err != nil { + if err = sl.addReportSample(app, scrapeHealthMetricName, ts, stale, b); err != nil { return } - if err = sl.addReportSample(app, scrapeDurationMetricName, ts, stale); err != nil { + if err = sl.addReportSample(app, scrapeDurationMetricName, ts, stale, b); err != nil { return } - if err = sl.addReportSample(app, scrapeSamplesMetricName, ts, stale); err != nil { + if err = sl.addReportSample(app, scrapeSamplesMetricName, ts, stale, b); err != nil { return } - if err = sl.addReportSample(app, samplesPostRelabelMetricName, ts, stale); err != nil { + if err = sl.addReportSample(app, samplesPostRelabelMetricName, ts, stale, b); err != nil { return } - if err = sl.addReportSample(app, scrapeSeriesAddedMetricName, ts, stale); err != nil { + if err = sl.addReportSample(app, scrapeSeriesAddedMetricName, ts, stale, b); err != nil { return } if sl.reportExtraMetrics { - if err = sl.addReportSample(app, scrapeTimeoutMetricName, ts, stale); err != nil { + if err = sl.addReportSample(app, scrapeTimeoutMetricName, ts, stale, b); err != nil { return } - if err = sl.addReportSample(app, scrapeSampleLimitMetricName, ts, stale); err != nil { + if err = sl.addReportSample(app, scrapeSampleLimitMetricName, ts, stale, b); err != nil { return } - if err = sl.addReportSample(app, scrapeBodySizeBytesMetricName, ts, stale); err != nil { + if err = sl.addReportSample(app, scrapeBodySizeBytesMetricName, ts, stale, b); err != nil { return } } return } -func (sl *scrapeLoop) addReportSample(app storage.Appender, s []byte, t int64, v float64) error { +func (sl *scrapeLoop) addReportSample(app storage.Appender, s []byte, t int64, v float64, b *labels.Builder) error { ce, ok := sl.cache.get(s) var ref storage.SeriesRef var lset labels.Labels @@ -1860,8 +1862,9 @@ func (sl *scrapeLoop) addReportSample(app storage.Appender, s []byte, t int64, v // The constants are suffixed with the invalid \xff unicode rune to avoid collisions // with scraped metrics in the cache. // We have to drop it when building the actual metric. - lset = labels.FromStrings(labels.MetricName, string(s[:len(s)-1])) - lset = sl.reportSampleMutator(lset) + b.Reset(labels.EmptyLabels()) + b.Set(labels.MetricName, string(s[:len(s)-1])) + lset = sl.reportSampleMutator(b.Labels()) } ref, err := app.Append(ref, lset, t, v)