github.com/muhammadn/cortex@v1.9.1-0.20220510110439-46bb7000d03d/pkg/compactor/syncer_metrics_test.go (about) 1 package compactor 2 3 import ( 4 "bytes" 5 "testing" 6 7 "github.com/prometheus/client_golang/prometheus" 8 "github.com/prometheus/client_golang/prometheus/testutil" 9 "github.com/stretchr/testify/require" 10 ) 11 12 func TestSyncerMetrics(t *testing.T) { 13 reg := prometheus.NewPedanticRegistry() 14 15 sm := newSyncerMetrics(reg) 16 sm.gatherThanosSyncerMetrics(generateTestData(12345)) 17 sm.gatherThanosSyncerMetrics(generateTestData(76543)) 18 sm.gatherThanosSyncerMetrics(generateTestData(22222)) 19 // total base = 111110 20 21 err := testutil.GatherAndCompare(reg, bytes.NewBufferString(` 22 # HELP cortex_compactor_meta_sync_consistency_delay_seconds Configured consistency delay in seconds. 23 # TYPE cortex_compactor_meta_sync_consistency_delay_seconds gauge 24 cortex_compactor_meta_sync_consistency_delay_seconds 300 25 26 # HELP cortex_compactor_meta_syncs_total Total blocks metadata synchronization attempts. 27 # TYPE cortex_compactor_meta_syncs_total counter 28 cortex_compactor_meta_syncs_total 111110 29 30 # HELP cortex_compactor_meta_sync_failures_total Total blocks metadata synchronization failures. 31 # TYPE cortex_compactor_meta_sync_failures_total counter 32 cortex_compactor_meta_sync_failures_total 222220 33 34 # HELP cortex_compactor_meta_sync_duration_seconds Duration of the blocks metadata synchronization in seconds. 35 # TYPE cortex_compactor_meta_sync_duration_seconds histogram 36 # Observed values: 3.7035, 22.9629, 6.6666 (seconds) 37 cortex_compactor_meta_sync_duration_seconds_bucket{le="0.01"} 0 38 cortex_compactor_meta_sync_duration_seconds_bucket{le="0.1"} 0 39 cortex_compactor_meta_sync_duration_seconds_bucket{le="0.3"} 0 40 cortex_compactor_meta_sync_duration_seconds_bucket{le="0.6"} 0 41 cortex_compactor_meta_sync_duration_seconds_bucket{le="1"} 0 42 cortex_compactor_meta_sync_duration_seconds_bucket{le="3"} 0 43 cortex_compactor_meta_sync_duration_seconds_bucket{le="6"} 1 44 cortex_compactor_meta_sync_duration_seconds_bucket{le="9"} 2 45 cortex_compactor_meta_sync_duration_seconds_bucket{le="20"} 2 46 cortex_compactor_meta_sync_duration_seconds_bucket{le="30"} 3 47 cortex_compactor_meta_sync_duration_seconds_bucket{le="60"} 3 48 cortex_compactor_meta_sync_duration_seconds_bucket{le="90"} 3 49 cortex_compactor_meta_sync_duration_seconds_bucket{le="120"} 3 50 cortex_compactor_meta_sync_duration_seconds_bucket{le="240"} 3 51 cortex_compactor_meta_sync_duration_seconds_bucket{le="360"} 3 52 cortex_compactor_meta_sync_duration_seconds_bucket{le="720"} 3 53 cortex_compactor_meta_sync_duration_seconds_bucket{le="+Inf"} 3 54 # rounding error 55 cortex_compactor_meta_sync_duration_seconds_sum 33.333000000000006 56 cortex_compactor_meta_sync_duration_seconds_count 3 57 58 # HELP cortex_compactor_garbage_collection_total Total number of garbage collection operations. 59 # TYPE cortex_compactor_garbage_collection_total counter 60 cortex_compactor_garbage_collection_total 555550 61 62 # HELP cortex_compactor_garbage_collection_failures_total Total number of failed garbage collection operations. 63 # TYPE cortex_compactor_garbage_collection_failures_total counter 64 cortex_compactor_garbage_collection_failures_total 666660 65 66 # HELP cortex_compactor_garbage_collection_duration_seconds Time it took to perform garbage collection iteration. 67 # TYPE cortex_compactor_garbage_collection_duration_seconds histogram 68 # Observed values: 8.6415, 53.5801, 15.5554 69 cortex_compactor_garbage_collection_duration_seconds_bucket{le="0.01"} 0 70 cortex_compactor_garbage_collection_duration_seconds_bucket{le="0.1"} 0 71 cortex_compactor_garbage_collection_duration_seconds_bucket{le="0.3"} 0 72 cortex_compactor_garbage_collection_duration_seconds_bucket{le="0.6"} 0 73 cortex_compactor_garbage_collection_duration_seconds_bucket{le="1"} 0 74 cortex_compactor_garbage_collection_duration_seconds_bucket{le="3"} 0 75 cortex_compactor_garbage_collection_duration_seconds_bucket{le="6"} 0 76 cortex_compactor_garbage_collection_duration_seconds_bucket{le="9"} 1 77 cortex_compactor_garbage_collection_duration_seconds_bucket{le="20"} 2 78 cortex_compactor_garbage_collection_duration_seconds_bucket{le="30"} 2 79 cortex_compactor_garbage_collection_duration_seconds_bucket{le="60"} 3 80 cortex_compactor_garbage_collection_duration_seconds_bucket{le="90"} 3 81 cortex_compactor_garbage_collection_duration_seconds_bucket{le="120"} 3 82 cortex_compactor_garbage_collection_duration_seconds_bucket{le="240"} 3 83 cortex_compactor_garbage_collection_duration_seconds_bucket{le="360"} 3 84 cortex_compactor_garbage_collection_duration_seconds_bucket{le="720"} 3 85 cortex_compactor_garbage_collection_duration_seconds_bucket{le="+Inf"} 3 86 cortex_compactor_garbage_collection_duration_seconds_sum 77.777 87 cortex_compactor_garbage_collection_duration_seconds_count 3 88 89 # HELP cortex_compactor_group_compactions_total Total number of group compaction attempts that resulted in a new block. 90 # TYPE cortex_compactor_group_compactions_total counter 91 # Sum across all groups 92 cortex_compactor_group_compactions_total 2999970 93 94 # HELP cortex_compactor_group_compaction_runs_started_total Total number of group compaction attempts. 95 # TYPE cortex_compactor_group_compaction_runs_started_total counter 96 # Sum across all groups 97 cortex_compactor_group_compaction_runs_started_total 3999960 98 99 # HELP cortex_compactor_group_compaction_runs_completed_total Total number of group completed compaction runs. This also includes compactor group runs that resulted with no compaction. 100 # TYPE cortex_compactor_group_compaction_runs_completed_total counter 101 # Sum across all groups 102 cortex_compactor_group_compaction_runs_completed_total 4999950 103 104 # HELP cortex_compactor_group_compactions_failures_total Total number of failed group compactions. 105 # TYPE cortex_compactor_group_compactions_failures_total counter 106 cortex_compactor_group_compactions_failures_total 5999940 107 108 # HELP cortex_compactor_group_vertical_compactions_total Total number of group compaction attempts that resulted in a new block based on overlapping blocks. 109 # TYPE cortex_compactor_group_vertical_compactions_total counter 110 cortex_compactor_group_vertical_compactions_total 6999930 111 `)) 112 require.NoError(t, err) 113 } 114 115 func generateTestData(base float64) *prometheus.Registry { 116 r := prometheus.NewRegistry() 117 m := newTestSyncerMetrics(r) 118 m.metaSync.Add(1 * base) 119 m.metaSyncFailures.Add(2 * base) 120 m.metaSyncDuration.Observe(3 * base / 10000) 121 m.metaSyncConsistencyDelay.Set(300) 122 m.garbageCollections.Add(5 * base) 123 m.garbageCollectionFailures.Add(6 * base) 124 m.garbageCollectionDuration.Observe(7 * base / 10000) 125 m.compactions.WithLabelValues("aaa").Add(8 * base) 126 m.compactions.WithLabelValues("bbb").Add(9 * base) 127 m.compactions.WithLabelValues("ccc").Add(10 * base) 128 m.compactionRunsStarted.WithLabelValues("aaa").Add(11 * base) 129 m.compactionRunsStarted.WithLabelValues("bbb").Add(12 * base) 130 m.compactionRunsStarted.WithLabelValues("ccc").Add(13 * base) 131 m.compactionRunsCompleted.WithLabelValues("aaa").Add(14 * base) 132 m.compactionRunsCompleted.WithLabelValues("bbb").Add(15 * base) 133 m.compactionRunsCompleted.WithLabelValues("ccc").Add(16 * base) 134 m.compactionFailures.WithLabelValues("aaa").Add(17 * base) 135 m.compactionFailures.WithLabelValues("bbb").Add(18 * base) 136 m.compactionFailures.WithLabelValues("ccc").Add(19 * base) 137 m.verticalCompactions.WithLabelValues("aaa").Add(20 * base) 138 m.verticalCompactions.WithLabelValues("bbb").Add(21 * base) 139 m.verticalCompactions.WithLabelValues("ccc").Add(22 * base) 140 return r 141 } 142 143 // directly copied from Thanos (and renamed syncerMetrics to testSyncerMetrics to avoid conflict) 144 type testSyncerMetrics struct { 145 metaSync prometheus.Counter 146 metaSyncFailures prometheus.Counter 147 metaSyncDuration prometheus.Histogram 148 metaSyncConsistencyDelay prometheus.Gauge 149 garbageCollections prometheus.Counter 150 garbageCollectionFailures prometheus.Counter 151 garbageCollectionDuration prometheus.Histogram 152 compactions *prometheus.CounterVec 153 compactionRunsStarted *prometheus.CounterVec 154 compactionRunsCompleted *prometheus.CounterVec 155 compactionFailures *prometheus.CounterVec 156 verticalCompactions *prometheus.CounterVec 157 } 158 159 func newTestSyncerMetrics(reg prometheus.Registerer) *testSyncerMetrics { 160 var m testSyncerMetrics 161 162 m.metaSync = prometheus.NewCounter(prometheus.CounterOpts{ 163 Name: "blocks_meta_syncs_total", 164 Help: "Total blocks metadata synchronization attempts.", 165 }) 166 m.metaSyncFailures = prometheus.NewCounter(prometheus.CounterOpts{ 167 Name: "blocks_meta_sync_failures_total", 168 Help: "Total blocks metadata synchronization failures.", 169 }) 170 m.metaSyncDuration = prometheus.NewHistogram(prometheus.HistogramOpts{ 171 Name: "blocks_meta_sync_duration_seconds", 172 Help: "Duration of the blocks metadata synchronization in seconds.", 173 Buckets: []float64{0.01, 0.1, 0.3, 0.6, 1, 3, 6, 9, 20, 30, 60, 90, 120, 240, 360, 720}, 174 }) 175 m.metaSyncConsistencyDelay = prometheus.NewGauge(prometheus.GaugeOpts{ 176 Name: "consistency_delay_seconds", 177 Help: "Configured consistency delay in seconds.", 178 }) 179 180 m.garbageCollections = prometheus.NewCounter(prometheus.CounterOpts{ 181 Name: "thanos_compact_garbage_collection_total", 182 Help: "Total number of garbage collection operations.", 183 }) 184 m.garbageCollectionFailures = prometheus.NewCounter(prometheus.CounterOpts{ 185 Name: "thanos_compact_garbage_collection_failures_total", 186 Help: "Total number of failed garbage collection operations.", 187 }) 188 m.garbageCollectionDuration = prometheus.NewHistogram(prometheus.HistogramOpts{ 189 Name: "thanos_compact_garbage_collection_duration_seconds", 190 Help: "Time it took to perform garbage collection iteration.", 191 Buckets: []float64{0.01, 0.1, 0.3, 0.6, 1, 3, 6, 9, 20, 30, 60, 90, 120, 240, 360, 720}, 192 }) 193 194 m.compactions = prometheus.NewCounterVec(prometheus.CounterOpts{ 195 Name: "thanos_compact_group_compactions_total", 196 Help: "Total number of group compaction attempts that resulted in a new block.", 197 }, []string{"group"}) 198 m.compactionRunsStarted = prometheus.NewCounterVec(prometheus.CounterOpts{ 199 Name: "thanos_compact_group_compaction_runs_started_total", 200 Help: "Total number of group compaction attempts.", 201 }, []string{"group"}) 202 m.compactionRunsCompleted = prometheus.NewCounterVec(prometheus.CounterOpts{ 203 Name: "thanos_compact_group_compaction_runs_completed_total", 204 Help: "Total number of group completed compaction runs. This also includes compactor group runs that resulted with no compaction.", 205 }, []string{"group"}) 206 m.compactionFailures = prometheus.NewCounterVec(prometheus.CounterOpts{ 207 Name: "thanos_compact_group_compactions_failures_total", 208 Help: "Total number of failed group compactions.", 209 }, []string{"group"}) 210 m.verticalCompactions = prometheus.NewCounterVec(prometheus.CounterOpts{ 211 Name: "thanos_compact_group_vertical_compactions_total", 212 Help: "Total number of group compaction attempts that resulted in a new block based on overlapping blocks.", 213 }, []string{"group"}) 214 215 if reg != nil { 216 reg.MustRegister( 217 m.metaSync, 218 m.metaSyncFailures, 219 m.metaSyncDuration, 220 m.metaSyncConsistencyDelay, 221 m.garbageCollections, 222 m.garbageCollectionFailures, 223 m.garbageCollectionDuration, 224 m.compactions, 225 m.compactionRunsStarted, 226 m.compactionRunsCompleted, 227 m.compactionFailures, 228 m.verticalCompactions, 229 ) 230 } 231 return &m 232 }