Skip to content

Commit 92ecf8b

Browse files
authored
chore: Migrate more metrics to promauto (#4700)
Migrate a few more metrics to the `promauto` package. Signed-off-by: SuperQ <[email protected]>
1 parent 8532545 commit 92ecf8b

File tree

5 files changed

+47
-59
lines changed

5 files changed

+47
-59
lines changed

api/v2/api_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import (
2626
"github.com/go-openapi/runtime"
2727
"github.com/go-openapi/runtime/middleware"
2828
"github.com/go-openapi/strfmt"
29+
"github.com/prometheus/client_golang/prometheus"
2930
"github.com/prometheus/common/model"
3031
"github.com/prometheus/common/promslog"
3132
"github.com/stretchr/testify/require"
@@ -84,7 +85,7 @@ var (
8485
)
8586

8687
func newSilences(t *testing.T) *silence.Silences {
87-
silences, err := silence.New(silence.Options{})
88+
silences, err := silence.New(silence.Options{Metrics: prometheus.NewRegistry()})
8889
require.NoError(t, err)
8990

9091
return silences

inhibit/metric.go

Lines changed: 11 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ package inhibit
1515

1616
import (
1717
"github.com/prometheus/client_golang/prometheus"
18+
"github.com/prometheus/client_golang/prometheus/promauto"
1819
)
1920

2021
// InhibitorMetrics represents metrics associated to an inhibitor.
@@ -35,49 +36,52 @@ type InhibitorMetrics struct {
3536

3637
// NewInhibitorMetrics returns a new InhibitorMetrics.
3738
func NewInhibitorMetrics(reg prometheus.Registerer) *InhibitorMetrics {
39+
if reg == nil {
40+
return nil
41+
}
3842
metrics := &InhibitorMetrics{
39-
sourceAlertsCacheItems: prometheus.NewGauge(
43+
sourceAlertsCacheItems: promauto.With(reg).NewGauge(
4044
prometheus.GaugeOpts{
4145
Name: "alertmanager_inhibitor_source_alerts_cache_items",
4246
Help: "Number of source alerts cached in inhibition rules.",
4347
},
4448
),
45-
sourceAlertsIndexItems: prometheus.NewGauge(
49+
sourceAlertsIndexItems: promauto.With(reg).NewGauge(
4650
prometheus.GaugeOpts{
4751
Name: "alertmanager_inhibitor_source_alerts_index_items",
4852
Help: "Number of source alerts indexed in inhibition rules.",
4953
},
5054
),
51-
mutesDuration: prometheus.NewSummaryVec(
55+
mutesDuration: promauto.With(reg).NewSummaryVec(
5256
prometheus.SummaryOpts{
5357
Name: "alertmanager_inhibitor_mutes_duration_seconds",
5458
Help: "Summary of latencies for the muting of alerts by inhibition rules.",
5559
},
5660
[]string{"muted"},
5761
),
5862

59-
ruleSourceAlertsCacheItems: prometheus.NewGaugeVec(
63+
ruleSourceAlertsCacheItems: promauto.With(reg).NewGaugeVec(
6064
prometheus.GaugeOpts{
6165
Name: "alertmanager_inhibit_rule_source_alerts_cache_items",
6266
Help: "Number of source alerts cached in inhibition rules.",
6367
},
6468
[]string{"rule"},
6569
),
66-
ruleSourceAlertsIndexItems: prometheus.NewGaugeVec(
70+
ruleSourceAlertsIndexItems: promauto.With(reg).NewGaugeVec(
6771
prometheus.GaugeOpts{
6872
Name: "alertmanager_inhibit_rule_source_alerts_index_items",
6973
Help: "Number of source alerts indexed in inhibition rules.",
7074
},
7175
[]string{"rule"},
7276
),
73-
ruleMatchesDuration: prometheus.NewSummaryVec(
77+
ruleMatchesDuration: promauto.With(reg).NewSummaryVec(
7478
prometheus.SummaryOpts{
7579
Name: "alertmanager_inhibit_rule_matches_duration_seconds",
7680
Help: "Summary of latencies for the matching of alerts by inhibition rules.",
7781
},
7882
[]string{"rule", "matched"},
7983
),
80-
ruleMutesDuration: prometheus.NewSummaryVec(
84+
ruleMutesDuration: promauto.With(reg).NewSummaryVec(
8185
prometheus.SummaryOpts{
8286
Name: "alertmanager_inhibit_rule_mutes_duration_seconds",
8387
Help: "Summary of latencies for the muting of alerts by inhibition rules.",
@@ -89,18 +93,6 @@ func NewInhibitorMetrics(reg prometheus.Registerer) *InhibitorMetrics {
8993
metrics.mutesDurationMuted = metrics.mutesDuration.With(prometheus.Labels{"muted": "true"})
9094
metrics.mutesDurationNotMuted = metrics.mutesDuration.With(prometheus.Labels{"muted": "false"})
9195

92-
if reg != nil {
93-
reg.MustRegister(
94-
metrics.sourceAlertsCacheItems,
95-
metrics.sourceAlertsIndexItems,
96-
metrics.mutesDuration,
97-
metrics.ruleSourceAlertsCacheItems,
98-
metrics.ruleSourceAlertsIndexItems,
99-
metrics.ruleMatchesDuration,
100-
metrics.ruleMutesDuration,
101-
)
102-
}
103-
10496
metrics.sourceAlertsCacheItems.Set(0)
10597
metrics.sourceAlertsIndexItems.Set(0)
10698

notify/notify_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -716,7 +716,7 @@ func TestMuteStage(t *testing.T) {
716716
}
717717

718718
func TestMuteStageWithSilences(t *testing.T) {
719-
silences, err := silence.New(silence.Options{Retention: time.Hour})
719+
silences, err := silence.New(silence.Options{Metrics: prometheus.NewRegistry(), Retention: time.Hour})
720720
if err != nil {
721721
t.Fatal(err)
722722
}

silence/silence.go

Lines changed: 14 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ import (
3333
uuid "github.com/gofrs/uuid"
3434
"github.com/matttproud/golang_protobuf_extensions/pbutil"
3535
"github.com/prometheus/client_golang/prometheus"
36+
"github.com/prometheus/client_golang/prometheus/promauto"
3637
"github.com/prometheus/common/model"
3738
"github.com/prometheus/common/promslog"
3839

@@ -251,29 +252,29 @@ func newSilenceMetricByState(s *Silences, st types.SilenceState) prometheus.Gaug
251252
func newMetrics(r prometheus.Registerer, s *Silences) *metrics {
252253
m := &metrics{}
253254

254-
m.gcDuration = prometheus.NewSummary(prometheus.SummaryOpts{
255+
m.gcDuration = promauto.With(r).NewSummary(prometheus.SummaryOpts{
255256
Name: "alertmanager_silences_gc_duration_seconds",
256257
Help: "Duration of the last silence garbage collection cycle.",
257258
Objectives: map[float64]float64{},
258259
})
259-
m.snapshotDuration = prometheus.NewSummary(prometheus.SummaryOpts{
260+
m.snapshotDuration = promauto.With(r).NewSummary(prometheus.SummaryOpts{
260261
Name: "alertmanager_silences_snapshot_duration_seconds",
261262
Help: "Duration of the last silence snapshot.",
262263
Objectives: map[float64]float64{},
263264
})
264-
m.snapshotSize = prometheus.NewGauge(prometheus.GaugeOpts{
265+
m.snapshotSize = promauto.With(r).NewGauge(prometheus.GaugeOpts{
265266
Name: "alertmanager_silences_snapshot_size_bytes",
266267
Help: "Size of the last silence snapshot in bytes.",
267268
})
268-
m.maintenanceTotal = prometheus.NewCounter(prometheus.CounterOpts{
269+
m.maintenanceTotal = promauto.With(r).NewCounter(prometheus.CounterOpts{
269270
Name: "alertmanager_silences_maintenance_total",
270271
Help: "How many maintenances were executed for silences.",
271272
})
272-
m.maintenanceErrorsTotal = prometheus.NewCounter(prometheus.CounterOpts{
273+
m.maintenanceErrorsTotal = promauto.With(r).NewCounter(prometheus.CounterOpts{
273274
Name: "alertmanager_silences_maintenance_errors_total",
274275
Help: "How many maintenances were executed for silences that failed.",
275276
})
276-
matcherCompileErrorsTotal := prometheus.NewCounterVec(
277+
matcherCompileErrorsTotal := promauto.With(r).NewCounterVec(
277278
prometheus.CounterOpts{
278279
Name: "alertmanager_silences_matcher_compile_errors_total",
279280
Help: "How many silence matcher compilations failed.",
@@ -282,23 +283,23 @@ func newMetrics(r prometheus.Registerer, s *Silences) *metrics {
282283
)
283284
m.matcherCompileCacheSilenceErrorsTotal = matcherCompileErrorsTotal.WithLabelValues("cache_silence")
284285
m.matcherCompileLoadSnapshotErrorsTotal = matcherCompileErrorsTotal.WithLabelValues("load_snapshot")
285-
m.queriesTotal = prometheus.NewCounter(prometheus.CounterOpts{
286+
m.queriesTotal = promauto.With(r).NewCounter(prometheus.CounterOpts{
286287
Name: "alertmanager_silences_queries_total",
287288
Help: "How many silence queries were received.",
288289
})
289-
m.queryErrorsTotal = prometheus.NewCounter(prometheus.CounterOpts{
290+
m.queryErrorsTotal = promauto.With(r).NewCounter(prometheus.CounterOpts{
290291
Name: "alertmanager_silences_query_errors_total",
291292
Help: "How many silence received queries did not succeed.",
292293
})
293-
m.queryDuration = prometheus.NewHistogram(prometheus.HistogramOpts{
294+
m.queryDuration = promauto.With(r).NewHistogram(prometheus.HistogramOpts{
294295
Name: "alertmanager_silences_query_duration_seconds",
295296
Help: "Duration of silence query evaluation.",
296297
Buckets: prometheus.DefBuckets,
297298
NativeHistogramBucketFactor: 1.1,
298299
NativeHistogramMaxBucketNumber: 100,
299300
NativeHistogramMinResetDuration: 1 * time.Hour,
300301
})
301-
m.propagatedMessagesTotal = prometheus.NewCounter(prometheus.CounterOpts{
302+
m.propagatedMessagesTotal = promauto.With(r).NewCounter(prometheus.CounterOpts{
302303
Name: "alertmanager_silences_gossip_messages_propagated_total",
303304
Help: "Number of received gossip messages that have been further gossiped.",
304305
})
@@ -308,23 +309,6 @@ func newMetrics(r prometheus.Registerer, s *Silences) *metrics {
308309
m.silencesExpired = newSilenceMetricByState(s, types.SilenceStateExpired)
309310
}
310311

311-
if r != nil {
312-
r.MustRegister(
313-
m.gcDuration,
314-
m.snapshotDuration,
315-
m.snapshotSize,
316-
m.queriesTotal,
317-
m.queryErrorsTotal,
318-
m.queryDuration,
319-
m.silencesActive,
320-
m.silencesPending,
321-
m.silencesExpired,
322-
m.propagatedMessagesTotal,
323-
m.maintenanceTotal,
324-
m.maintenanceErrorsTotal,
325-
matcherCompileErrorsTotal,
326-
)
327-
}
328312
return m
329313
}
330314

@@ -368,6 +352,9 @@ func New(o Options) (*Silences, error) {
368352
broadcast: func([]byte) {},
369353
st: state{},
370354
}
355+
if o.Metrics == nil {
356+
return nil, errors.New("Options.Metrics is nil")
357+
}
371358
s.metrics = newMetrics(o.Metrics, s)
372359

373360
if o.Logger != nil {

silence/silence_test.go

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -62,16 +62,19 @@ func TestOptionsValidate(t *testing.T) {
6262
}{
6363
{
6464
options: &Options{
65+
Metrics: prometheus.NewRegistry(),
6566
SnapshotReader: &bytes.Buffer{},
6667
},
6768
},
6869
{
6970
options: &Options{
71+
Metrics: prometheus.NewRegistry(),
7072
SnapshotFile: "test.bkp",
7173
},
7274
},
7375
{
7476
options: &Options{
77+
Metrics: prometheus.NewRegistry(),
7578
SnapshotFile: "test bkp",
7679
SnapshotReader: &bytes.Buffer{},
7780
},
@@ -86,7 +89,7 @@ func TestOptionsValidate(t *testing.T) {
8689

8790
func TestSilenceGCOverTime(t *testing.T) {
8891
t.Run("GC does not remove active silences", func(t *testing.T) {
89-
s, err := New(Options{})
92+
s, err := New(Options{Metrics: prometheus.NewRegistry()})
9093
require.NoError(t, err)
9194
s.clock = quartz.NewMock(t)
9295
now := s.nowUTC()
@@ -109,7 +112,7 @@ func TestSilenceGCOverTime(t *testing.T) {
109112
})
110113

111114
t.Run("GC does not leak cache entries", func(t *testing.T) {
112-
s, err := New(Options{})
115+
s, err := New(Options{Metrics: prometheus.NewRegistry()})
113116
require.NoError(t, err)
114117
clock := quartz.NewMock(t)
115118
s.clock = clock
@@ -136,7 +139,7 @@ func TestSilenceGCOverTime(t *testing.T) {
136139
})
137140

138141
t.Run("replacing a silences does not leak cache entries", func(t *testing.T) {
139-
s, err := New(Options{})
142+
s, err := New(Options{Metrics: prometheus.NewRegistry()})
140143
require.NoError(t, err)
141144
clock := quartz.NewMock(t)
142145
s.clock = clock
@@ -175,7 +178,7 @@ func TestSilenceGCOverTime(t *testing.T) {
175178
// This test checks for a memory leak that occurred in the matcher cache when
176179
// updating an existing silence.
177180
t.Run("updating a silence does not leak cache entries", func(t *testing.T) {
178-
s, err := New(Options{})
181+
s, err := New(Options{Metrics: prometheus.NewRegistry()})
179182
require.NoError(t, err)
180183
clock := quartz.NewMock(t)
181184
s.clock = clock
@@ -360,6 +363,7 @@ alertmanager_silences_maintenance_total 2
360363

361364
func TestSilencesSetSilence(t *testing.T) {
362365
s, err := New(Options{
366+
Metrics: prometheus.NewRegistry(),
363367
Retention: time.Minute,
364368
})
365369
require.NoError(t, err)
@@ -411,6 +415,7 @@ func TestSilencesSetSilence(t *testing.T) {
411415

412416
func TestSilenceSet(t *testing.T) {
413417
s, err := New(Options{
418+
Metrics: prometheus.NewRegistry(),
414419
Retention: time.Hour,
415420
})
416421
require.NoError(t, err)
@@ -608,6 +613,7 @@ func TestSilenceLimits(t *testing.T) {
608613
MaxSilences: func() int { return 1 },
609614
MaxSilenceSizeBytes: func() int { return 2 << 11 }, // 4KB
610615
},
616+
Metrics: prometheus.NewRegistry(),
611617
})
612618
require.NoError(t, err)
613619

@@ -725,7 +731,8 @@ func TestSilenceLimits(t *testing.T) {
725731

726732
func TestSilenceNoLimits(t *testing.T) {
727733
s, err := New(Options{
728-
Limits: Limits{},
734+
Limits: Limits{},
735+
Metrics: prometheus.NewRegistry(),
729736
})
730737
require.NoError(t, err)
731738

@@ -742,6 +749,7 @@ func TestSilenceNoLimits(t *testing.T) {
742749

743750
func TestSetActiveSilence(t *testing.T) {
744751
s, err := New(Options{
752+
Metrics: prometheus.NewRegistry(),
745753
Retention: time.Hour,
746754
})
747755
require.NoError(t, err)
@@ -791,7 +799,7 @@ func TestSetActiveSilence(t *testing.T) {
791799
}
792800

793801
func TestSilencesSetFail(t *testing.T) {
794-
s, err := New(Options{})
802+
s, err := New(Options{Metrics: prometheus.NewRegistry()})
795803
require.NoError(t, err)
796804

797805
clock := quartz.NewMock(t)
@@ -948,7 +956,7 @@ func TestQMatches(t *testing.T) {
948956
}
949957

950958
func TestSilencesQuery(t *testing.T) {
951-
s, err := New(Options{})
959+
s, err := New(Options{Metrics: prometheus.NewRegistry()})
952960
require.NoError(t, err)
953961

954962
s.st = state{
@@ -1158,7 +1166,7 @@ func TestSilenceCanUpdate(t *testing.T) {
11581166
}
11591167

11601168
func TestSilenceExpire(t *testing.T) {
1161-
s, err := New(Options{Retention: time.Hour})
1169+
s, err := New(Options{Metrics: prometheus.NewRegistry(), Retention: time.Hour})
11621170
require.NoError(t, err)
11631171

11641172
clock := quartz.NewMock(t)
@@ -1255,7 +1263,7 @@ func TestSilenceExpire(t *testing.T) {
12551263
// retention time, a silence explicitly set to expired will also immediately
12561264
// expire from the silence storage.
12571265
func TestSilenceExpireWithZeroRetention(t *testing.T) {
1258-
s, err := New(Options{Retention: 0})
1266+
s, err := New(Options{Metrics: prometheus.NewRegistry(), Retention: 0})
12591267
require.NoError(t, err)
12601268

12611269
clock := quartz.NewMock(t)
@@ -1330,7 +1338,7 @@ func TestSilenceExpireWithZeroRetention(t *testing.T) {
13301338

13311339
// This test checks that invalid silences can be expired.
13321340
func TestSilenceExpireInvalid(t *testing.T) {
1333-
s, err := New(Options{Retention: time.Hour})
1341+
s, err := New(Options{Metrics: prometheus.NewRegistry(), Retention: time.Hour})
13341342
require.NoError(t, err)
13351343

13361344
clock := quartz.NewMock(t)
@@ -1369,7 +1377,7 @@ func TestSilenceExpireInvalid(t *testing.T) {
13691377
}
13701378

13711379
func TestSilencer(t *testing.T) {
1372-
ss, err := New(Options{Retention: time.Hour})
1380+
ss, err := New(Options{Metrics: prometheus.NewRegistry(), Retention: time.Hour})
13731381
require.NoError(t, err)
13741382

13751383
clock := quartz.NewMock(t)

0 commit comments

Comments
 (0)