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 }