github.com/yankunsam/loki/v2@v2.6.3-0.20220817130409-389df5235c27/pkg/ruler/storage/wal/metrics.go (about)

     1  // This directory was copied and adapted from https://github.com/grafana/agent/tree/main/pkg/metrics.
     2  // We cannot vendor the agent in since the agent vendors loki in, which would cause a cyclic dependency.
     3  // NOTE: many changes have been made to the original code for our use-case.
     4  package wal
     5  
     6  import "github.com/prometheus/client_golang/prometheus"
     7  
     8  type Metrics struct {
     9  	r prometheus.Registerer
    10  
    11  	NumActiveSeries        prometheus.Gauge
    12  	NumDeletedSeries       prometheus.Gauge
    13  	TotalCreatedSeries     prometheus.Counter
    14  	TotalRemovedSeries     prometheus.Counter
    15  	TotalAppendedSamples   prometheus.Counter
    16  	TotalAppendedExemplars prometheus.Counter
    17  	TotalCorruptions       prometheus.Counter
    18  	TotalFailedRepairs     prometheus.Counter
    19  	TotalSucceededRepairs  prometheus.Counter
    20  	ReplayDuration         prometheus.Histogram
    21  	DiskSize               prometheus.Gauge
    22  }
    23  
    24  func NewMetrics(r prometheus.Registerer) *Metrics {
    25  	m := Metrics{r: r}
    26  	m.NumActiveSeries = prometheus.NewGauge(prometheus.GaugeOpts{
    27  		Name: "storage_active_series",
    28  		Help: "Current number of active series being tracked by a tenant's WAL storage",
    29  	})
    30  
    31  	m.NumDeletedSeries = prometheus.NewGauge(prometheus.GaugeOpts{
    32  		Name: "storage_deleted_series",
    33  		Help: "Current number of series marked for deletion from memory",
    34  	})
    35  
    36  	m.TotalCreatedSeries = prometheus.NewCounter(prometheus.CounterOpts{
    37  		Name: "storage_created_series_total",
    38  		Help: "Total number of created series appended to a tenant's WAL",
    39  	})
    40  
    41  	m.TotalRemovedSeries = prometheus.NewCounter(prometheus.CounterOpts{
    42  		Name: "storage_removed_series_total",
    43  		Help: "Total number of created series removed from a tenant's WAL",
    44  	})
    45  
    46  	m.TotalAppendedSamples = prometheus.NewCounter(prometheus.CounterOpts{
    47  		Name: "samples_appended_total",
    48  		Help: "Total number of samples appended to a tenant's WAL",
    49  	})
    50  
    51  	m.TotalAppendedExemplars = prometheus.NewCounter(prometheus.CounterOpts{
    52  		Name: "exemplars_appended_total",
    53  		Help: "Total number of exemplars appended to a tenant's WAL",
    54  	})
    55  
    56  	m.TotalCorruptions = prometheus.NewCounter(prometheus.CounterOpts{
    57  		Name: "corruptions_total",
    58  		Help: "Total number of corruptions observed in a tenant's WAL",
    59  	})
    60  
    61  	m.TotalFailedRepairs = prometheus.NewCounter(prometheus.CounterOpts{
    62  		Name: "corruptions_repair_failed_total",
    63  		Help: "Total number of corruptions unsuccessfully repaired in a tenant's WAL",
    64  	})
    65  
    66  	m.TotalSucceededRepairs = prometheus.NewCounter(prometheus.CounterOpts{
    67  		Name: "corruptions_repair_succeeded_total",
    68  		Help: "Total number of corruptions successfully repaired in a tenant's WAL",
    69  	})
    70  
    71  	m.ReplayDuration = prometheus.NewHistogram(prometheus.HistogramOpts{
    72  		Name:    "replay_duration",
    73  		Help:    "Total duration in seconds it took to replay a tenant's WAL",
    74  		Buckets: prometheus.ExponentialBuckets(0.01, 4, 6),
    75  	})
    76  
    77  	m.DiskSize = prometheus.NewGauge(prometheus.GaugeOpts{
    78  		Name: "disk_size",
    79  		Help: "Size of each tenant's WAL on disk",
    80  	})
    81  
    82  	// why do the metrics not show up?
    83  	// are the metrics for the wal indexed by the config name?
    84  	// don't think so -> add
    85  	if r != nil {
    86  		r.MustRegister(
    87  			m.NumActiveSeries,
    88  			m.NumDeletedSeries,
    89  			m.TotalCreatedSeries,
    90  			m.TotalRemovedSeries,
    91  			m.TotalAppendedSamples,
    92  			m.TotalAppendedExemplars,
    93  			m.TotalCorruptions,
    94  			m.TotalFailedRepairs,
    95  			m.TotalSucceededRepairs,
    96  			m.ReplayDuration,
    97  			m.DiskSize,
    98  		)
    99  	}
   100  
   101  	return &m
   102  }
   103  
   104  func (m *Metrics) Unregister() {
   105  	if m.r == nil {
   106  		return
   107  	}
   108  	cs := []prometheus.Collector{
   109  		m.NumActiveSeries,
   110  		m.NumDeletedSeries,
   111  		m.TotalCreatedSeries,
   112  		m.TotalRemovedSeries,
   113  		m.TotalAppendedSamples,
   114  		m.TotalAppendedExemplars,
   115  		m.TotalCorruptions,
   116  		m.TotalFailedRepairs,
   117  		m.TotalSucceededRepairs,
   118  		m.ReplayDuration,
   119  		m.DiskSize,
   120  	}
   121  	for _, c := range cs {
   122  		m.r.Unregister(c)
   123  	}
   124  }