github.com/grafana/pyroscope@v1.18.0/pkg/compactor/syncer_metrics.go (about)

     1  // SPDX-License-Identifier: AGPL-3.0-only
     2  // Provenance-includes-location: https://github.com/grafana/mimir/blob/main/pkg/compactor/syncer_metrics.go
     3  // Provenance-includes-license: Apache-2.0
     4  // Provenance-includes-copyright: The Cortex Authors.
     5  
     6  package compactor
     7  
     8  import (
     9  	"github.com/go-kit/log/level"
    10  	dskit_metrics "github.com/grafana/dskit/metrics"
    11  	"github.com/prometheus/client_golang/prometheus"
    12  	"github.com/prometheus/client_golang/prometheus/promauto"
    13  
    14  	util_log "github.com/grafana/pyroscope/pkg/util"
    15  )
    16  
    17  // Copied from Mimir.
    18  // Here we aggregate metrics from all finished syncers.
    19  type aggregatedSyncerMetrics struct {
    20  	metaSync                  prometheus.Counter
    21  	metaSyncFailures          prometheus.Counter
    22  	metaSyncDuration          *dskit_metrics.HistogramDataCollector // was prometheus.Histogram before
    23  	garbageCollections        prometheus.Counter
    24  	garbageCollectionFailures prometheus.Counter
    25  	garbageCollectionDuration *dskit_metrics.HistogramDataCollector // was prometheus.Histogram before
    26  }
    27  
    28  // Copied (and modified with Pyroscope prefix) from Mimir.
    29  // We also ignore "group" label, since we only use a single group.
    30  func newAggregatedSyncerMetrics(reg prometheus.Registerer) *aggregatedSyncerMetrics {
    31  	var m aggregatedSyncerMetrics
    32  
    33  	m.metaSync = promauto.With(reg).NewCounter(prometheus.CounterOpts{
    34  		Name: "pyroscope_compactor_meta_syncs_total",
    35  		Help: "Total blocks metadata synchronization attempts.",
    36  	})
    37  	m.metaSyncFailures = promauto.With(reg).NewCounter(prometheus.CounterOpts{
    38  		Name: "pyroscope_compactor_meta_sync_failures_total",
    39  		Help: "Total blocks metadata synchronization failures.",
    40  	})
    41  	m.metaSyncDuration = dskit_metrics.NewHistogramDataCollector(prometheus.NewDesc(
    42  		"pyroscope_compactor_meta_sync_duration_seconds",
    43  		"Duration of the blocks metadata synchronization in seconds.",
    44  		nil, nil))
    45  
    46  	m.garbageCollections = promauto.With(reg).NewCounter(prometheus.CounterOpts{
    47  		Name: "pyroscope_compactor_garbage_collection_total",
    48  		Help: "Total number of garbage collection operations.",
    49  	})
    50  	m.garbageCollectionFailures = promauto.With(reg).NewCounter(prometheus.CounterOpts{
    51  		Name: "pyroscope_compactor_garbage_collection_failures_total",
    52  		Help: "Total number of failed garbage collection operations.",
    53  	})
    54  	m.garbageCollectionDuration = dskit_metrics.NewHistogramDataCollector(prometheus.NewDesc(
    55  		"pyroscope_compactor_garbage_collection_duration_seconds",
    56  		"Time it took to perform garbage collection iteration.",
    57  		nil, nil))
    58  
    59  	if reg != nil {
    60  		reg.MustRegister(m.metaSyncDuration, m.garbageCollectionDuration)
    61  	}
    62  
    63  	return &m
    64  }
    65  
    66  func (m *aggregatedSyncerMetrics) gatherThanosSyncerMetrics(reg *prometheus.Registry) {
    67  	if m == nil {
    68  		return
    69  	}
    70  
    71  	mf, err := reg.Gather()
    72  	if err != nil {
    73  		level.Warn(util_log.Logger).Log("msg", "failed to gather metrics from syncer registry after compaction", "err", err)
    74  		return
    75  	}
    76  
    77  	mfm, err := dskit_metrics.NewMetricFamilyMap(mf)
    78  	if err != nil {
    79  		level.Warn(util_log.Logger).Log("msg", "failed to gather metrics from syncer registry after compaction", "err", err)
    80  		return
    81  	}
    82  
    83  	m.metaSync.Add(mfm.SumCounters("blocks_meta_syncs_total"))
    84  	m.metaSyncFailures.Add(mfm.SumCounters("blocks_meta_sync_failures_total"))
    85  	m.metaSyncDuration.Add(mfm.SumHistograms("blocks_meta_sync_duration_seconds"))
    86  
    87  	m.garbageCollections.Add(mfm.SumCounters("thanos_compact_garbage_collection_total"))
    88  	m.garbageCollectionFailures.Add(mfm.SumCounters("thanos_compact_garbage_collection_failures_total"))
    89  	m.garbageCollectionDuration.Add(mfm.SumHistograms("thanos_compact_garbage_collection_duration_seconds"))
    90  }