Skip to content

Commit 73cbc98

Browse files
authored
Merge pull request #936 from grafana/charleskorn/unregister-metrics
Unregister metrics emitted by `remote.WriteStorage` when closed
2 parents 8323300 + 9c006f5 commit 73cbc98

File tree

3 files changed

+34
-0
lines changed

3 files changed

+34
-0
lines changed

storage/remote/write.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -268,6 +268,14 @@ func (rws *WriteStorage) Close() error {
268268
q.Stop()
269269
}
270270
close(rws.quit)
271+
272+
rws.watcherMetrics.Unregister()
273+
rws.liveReaderMetrics.Unregister()
274+
275+
if rws.reg != nil {
276+
rws.reg.Unregister(rws.highestTimestamp.Gauge)
277+
}
278+
271279
return nil
272280
}
273281

tsdb/wlog/live_reader.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,13 +29,15 @@ import (
2929

3030
// LiveReaderMetrics holds all metrics exposed by the LiveReader.
3131
type LiveReaderMetrics struct {
32+
reg prometheus.Registerer
3233
readerCorruptionErrors *prometheus.CounterVec
3334
}
3435

3536
// NewLiveReaderMetrics instantiates, registers and returns metrics to be injected
3637
// at LiveReader instantiation.
3738
func NewLiveReaderMetrics(reg prometheus.Registerer) *LiveReaderMetrics {
3839
m := &LiveReaderMetrics{
40+
reg: reg,
3941
readerCorruptionErrors: prometheus.NewCounterVec(prometheus.CounterOpts{
4042
Name: "prometheus_tsdb_wal_reader_corruption_errors_total",
4143
Help: "Errors encountered when reading the WAL.",
@@ -49,6 +51,15 @@ func NewLiveReaderMetrics(reg prometheus.Registerer) *LiveReaderMetrics {
4951
return m
5052
}
5153

54+
// Unregister unregisters metrics emitted by this instance.
55+
func (m *LiveReaderMetrics) Unregister() {
56+
if m.reg == nil {
57+
return
58+
}
59+
60+
m.reg.Unregister(m.readerCorruptionErrors)
61+
}
62+
5263
// NewLiveReader returns a new live reader.
5364
func NewLiveReader(logger *slog.Logger, metrics *LiveReaderMetrics, r io.Reader) *LiveReader {
5465
lr := &LiveReader{

tsdb/wlog/watcher.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ type WriteNotified interface {
7373
}
7474

7575
type WatcherMetrics struct {
76+
reg prometheus.Registerer
7677
recordsRead *prometheus.CounterVec
7778
recordDecodeFails *prometheus.CounterVec
7879
samplesSentPreTailing *prometheus.CounterVec
@@ -113,6 +114,7 @@ type Watcher struct {
113114

114115
func NewWatcherMetrics(reg prometheus.Registerer) *WatcherMetrics {
115116
m := &WatcherMetrics{
117+
reg: reg,
116118
recordsRead: prometheus.NewCounterVec(
117119
prometheus.CounterOpts{
118120
Namespace: "prometheus",
@@ -171,6 +173,19 @@ func NewWatcherMetrics(reg prometheus.Registerer) *WatcherMetrics {
171173
return m
172174
}
173175

176+
// Unregister unregisters metrics emitted by this instance.
177+
func (m *WatcherMetrics) Unregister() {
178+
if m.reg == nil {
179+
return
180+
}
181+
182+
m.reg.Unregister(m.recordsRead)
183+
m.reg.Unregister(m.recordDecodeFails)
184+
m.reg.Unregister(m.samplesSentPreTailing)
185+
m.reg.Unregister(m.currentSegment)
186+
m.reg.Unregister(m.notificationsSkipped)
187+
}
188+
174189
// NewWatcher creates a new WAL watcher for a given WriteTo.
175190
func NewWatcher(metrics *WatcherMetrics, readerMetrics *LiveReaderMetrics, logger *slog.Logger, name string, writer WriteTo, dir string, sendExemplars, sendHistograms, sendMetadata bool) *Watcher {
176191
if logger == nil {

0 commit comments

Comments
 (0)