github.com/grafana/pyroscope@v1.18.0/pkg/compactor/syncer_metrics_test.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_test.go 3 // Provenance-includes-license: Apache-2.0 4 // Provenance-includes-copyright: The Cortex Authors. 5 6 package compactor 7 8 import ( 9 "bytes" 10 "testing" 11 12 "github.com/prometheus/client_golang/prometheus" 13 "github.com/prometheus/client_golang/prometheus/promauto" 14 "github.com/prometheus/client_golang/prometheus/testutil" 15 "github.com/stretchr/testify/require" 16 ) 17 18 func TestSyncerMetrics(t *testing.T) { 19 reg := prometheus.NewPedanticRegistry() 20 21 sm := newAggregatedSyncerMetrics(reg) 22 sm.gatherThanosSyncerMetrics(generateTestData(12345)) 23 sm.gatherThanosSyncerMetrics(generateTestData(76543)) 24 sm.gatherThanosSyncerMetrics(generateTestData(22222)) 25 // total base = 111110 26 27 err := testutil.GatherAndCompare(reg, bytes.NewBufferString(` 28 # HELP pyroscope_compactor_meta_syncs_total Total blocks metadata synchronization attempts. 29 # TYPE pyroscope_compactor_meta_syncs_total counter 30 pyroscope_compactor_meta_syncs_total 111110 31 32 # HELP pyroscope_compactor_meta_sync_failures_total Total blocks metadata synchronization failures. 33 # TYPE pyroscope_compactor_meta_sync_failures_total counter 34 pyroscope_compactor_meta_sync_failures_total 222220 35 36 # HELP pyroscope_compactor_meta_sync_duration_seconds Duration of the blocks metadata synchronization in seconds. 37 # TYPE pyroscope_compactor_meta_sync_duration_seconds histogram 38 # Observed values: 3.7035, 22.9629, 6.6666 (seconds) 39 pyroscope_compactor_meta_sync_duration_seconds_bucket{le="0.01"} 0 40 pyroscope_compactor_meta_sync_duration_seconds_bucket{le="0.1"} 0 41 pyroscope_compactor_meta_sync_duration_seconds_bucket{le="0.3"} 0 42 pyroscope_compactor_meta_sync_duration_seconds_bucket{le="0.6"} 0 43 pyroscope_compactor_meta_sync_duration_seconds_bucket{le="1"} 0 44 pyroscope_compactor_meta_sync_duration_seconds_bucket{le="3"} 0 45 pyroscope_compactor_meta_sync_duration_seconds_bucket{le="6"} 1 46 pyroscope_compactor_meta_sync_duration_seconds_bucket{le="9"} 2 47 pyroscope_compactor_meta_sync_duration_seconds_bucket{le="20"} 2 48 pyroscope_compactor_meta_sync_duration_seconds_bucket{le="30"} 3 49 pyroscope_compactor_meta_sync_duration_seconds_bucket{le="60"} 3 50 pyroscope_compactor_meta_sync_duration_seconds_bucket{le="90"} 3 51 pyroscope_compactor_meta_sync_duration_seconds_bucket{le="120"} 3 52 pyroscope_compactor_meta_sync_duration_seconds_bucket{le="240"} 3 53 pyroscope_compactor_meta_sync_duration_seconds_bucket{le="360"} 3 54 pyroscope_compactor_meta_sync_duration_seconds_bucket{le="720"} 3 55 pyroscope_compactor_meta_sync_duration_seconds_bucket{le="+Inf"} 3 56 # rounding error 57 pyroscope_compactor_meta_sync_duration_seconds_sum 33.333000000000006 58 pyroscope_compactor_meta_sync_duration_seconds_count 3 59 60 # HELP pyroscope_compactor_garbage_collection_total Total number of garbage collection operations. 61 # TYPE pyroscope_compactor_garbage_collection_total counter 62 pyroscope_compactor_garbage_collection_total 555550 63 64 # HELP pyroscope_compactor_garbage_collection_failures_total Total number of failed garbage collection operations. 65 # TYPE pyroscope_compactor_garbage_collection_failures_total counter 66 pyroscope_compactor_garbage_collection_failures_total 666660 67 68 # HELP pyroscope_compactor_garbage_collection_duration_seconds Time it took to perform garbage collection iteration. 69 # TYPE pyroscope_compactor_garbage_collection_duration_seconds histogram 70 # Observed values: 8.6415, 53.5801, 15.5554 71 pyroscope_compactor_garbage_collection_duration_seconds_bucket{le="0.01"} 0 72 pyroscope_compactor_garbage_collection_duration_seconds_bucket{le="0.1"} 0 73 pyroscope_compactor_garbage_collection_duration_seconds_bucket{le="0.3"} 0 74 pyroscope_compactor_garbage_collection_duration_seconds_bucket{le="0.6"} 0 75 pyroscope_compactor_garbage_collection_duration_seconds_bucket{le="1"} 0 76 pyroscope_compactor_garbage_collection_duration_seconds_bucket{le="3"} 0 77 pyroscope_compactor_garbage_collection_duration_seconds_bucket{le="6"} 0 78 pyroscope_compactor_garbage_collection_duration_seconds_bucket{le="9"} 1 79 pyroscope_compactor_garbage_collection_duration_seconds_bucket{le="20"} 2 80 pyroscope_compactor_garbage_collection_duration_seconds_bucket{le="30"} 2 81 pyroscope_compactor_garbage_collection_duration_seconds_bucket{le="60"} 3 82 pyroscope_compactor_garbage_collection_duration_seconds_bucket{le="90"} 3 83 pyroscope_compactor_garbage_collection_duration_seconds_bucket{le="120"} 3 84 pyroscope_compactor_garbage_collection_duration_seconds_bucket{le="240"} 3 85 pyroscope_compactor_garbage_collection_duration_seconds_bucket{le="360"} 3 86 pyroscope_compactor_garbage_collection_duration_seconds_bucket{le="720"} 3 87 pyroscope_compactor_garbage_collection_duration_seconds_bucket{le="+Inf"} 3 88 pyroscope_compactor_garbage_collection_duration_seconds_sum 77.777 89 pyroscope_compactor_garbage_collection_duration_seconds_count 3 90 `)) 91 require.NoError(t, err) 92 } 93 94 func generateTestData(base float64) *prometheus.Registry { 95 r := prometheus.NewRegistry() 96 m := newTestSyncerMetrics(r) 97 m.metaSync.Add(1 * base) 98 m.metaSyncFailures.Add(2 * base) 99 m.metaSyncDuration.Observe(3 * base / 10000) 100 m.garbageCollections.Add(5 * base) 101 m.garbageCollectionFailures.Add(6 * base) 102 m.garbageCollectionDuration.Observe(7 * base / 10000) 103 return r 104 } 105 106 // directly copied from Thanos (and renamed syncerMetrics to testSyncerMetrics to avoid conflict) 107 type testSyncerMetrics struct { 108 metaSync prometheus.Counter 109 metaSyncFailures prometheus.Counter 110 metaSyncDuration prometheus.Histogram 111 garbageCollections prometheus.Counter 112 garbageCollectionFailures prometheus.Counter 113 garbageCollectionDuration prometheus.Histogram 114 } 115 116 func newTestSyncerMetrics(reg prometheus.Registerer) *testSyncerMetrics { 117 var m testSyncerMetrics 118 119 m.metaSync = promauto.With(reg).NewCounter(prometheus.CounterOpts{ 120 Name: "blocks_meta_syncs_total", 121 Help: "Total blocks metadata synchronization attempts.", 122 }) 123 m.metaSyncFailures = promauto.With(reg).NewCounter(prometheus.CounterOpts{ 124 Name: "blocks_meta_sync_failures_total", 125 Help: "Total blocks metadata synchronization failures.", 126 }) 127 m.metaSyncDuration = promauto.With(reg).NewHistogram(prometheus.HistogramOpts{ 128 Name: "blocks_meta_sync_duration_seconds", 129 Help: "Duration of the blocks metadata synchronization in seconds.", 130 Buckets: []float64{0.01, 0.1, 0.3, 0.6, 1, 3, 6, 9, 20, 30, 60, 90, 120, 240, 360, 720}, 131 }) 132 133 m.garbageCollections = promauto.With(reg).NewCounter(prometheus.CounterOpts{ 134 Name: "thanos_compact_garbage_collection_total", 135 Help: "Total number of garbage collection operations.", 136 }) 137 m.garbageCollectionFailures = promauto.With(reg).NewCounter(prometheus.CounterOpts{ 138 Name: "thanos_compact_garbage_collection_failures_total", 139 Help: "Total number of failed garbage collection operations.", 140 }) 141 m.garbageCollectionDuration = promauto.With(reg).NewHistogram(prometheus.HistogramOpts{ 142 Name: "thanos_compact_garbage_collection_duration_seconds", 143 Help: "Time it took to perform garbage collection iteration.", 144 Buckets: []float64{0.01, 0.1, 0.3, 0.6, 1, 3, 6, 9, 20, 30, 60, 90, 120, 240, 360, 720}, 145 }) 146 147 return &m 148 }