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  }