Skip to content

Commit 4101f4e

Browse files
db/postgres: register counter metrics correctly
1 parent 7a8c205 commit 4101f4e

File tree

1 file changed

+41
-12
lines changed
  • universe/db/postgres

1 file changed

+41
-12
lines changed

universe/db/postgres/db.go

Lines changed: 41 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -46,28 +46,46 @@ type commonOpts struct {
4646
}
4747

4848
var (
49-
metrics = []struct {
49+
gaugeMetrics = []struct {
5050
Key string
5151
Value func(*pgxpool.Stat) float64
5252
}{
53-
{"acquire_count", func(s *pgxpool.Stat) float64 { return float64(s.AcquireCount()) }},
5453
{"acquired_conns", func(s *pgxpool.Stat) float64 { return float64(s.AcquiredConns()) }},
55-
{"canceled_acquire_count", func(s *pgxpool.Stat) float64 { return float64(s.CanceledAcquireCount()) }},
56-
{"acquire_duration_ms", func(s *pgxpool.Stat) float64 { return float64(s.AcquireDuration().Milliseconds()) }},
5754
{"constructing_conns", func(s *pgxpool.Stat) float64 { return float64(s.ConstructingConns()) }},
58-
{"empty_acquire_count", func(s *pgxpool.Stat) float64 { return float64(s.EmptyAcquireCount()) }},
5955
{"idle_conns", func(s *pgxpool.Stat) float64 { return float64(s.IdleConns()) }},
6056
{"max_conns", func(s *pgxpool.Stat) float64 { return float64(s.MaxConns()) }},
6157
{"total_conns", func(s *pgxpool.Stat) float64 { return float64(s.TotalConns()) }},
6258
}
63-
cols []*prometheus.GaugeVec
59+
counterMetrics = []struct {
60+
Key string
61+
Value func(*pgxpool.Stat) float64
62+
}{
63+
{"acquire_count", func(s *pgxpool.Stat) float64 { return float64(s.AcquireCount()) }},
64+
{"canceled_acquire_count", func(s *pgxpool.Stat) float64 { return float64(s.CanceledAcquireCount()) }},
65+
{"acquire_duration_ms", func(s *pgxpool.Stat) float64 { return float64(s.AcquireDuration().Milliseconds()) }},
66+
{"empty_acquire_count", func(s *pgxpool.Stat) float64 { return float64(s.EmptyAcquireCount()) }},
67+
{"new_conns_count", func(s *pgxpool.Stat) float64 { return float64(s.NewConnsCount()) }},
68+
{"max_lifetime_destroy_count", func(s *pgxpool.Stat) float64 { return float64(s.MaxLifetimeDestroyCount()) }},
69+
{"max_idle_destroy_count", func(s *pgxpool.Stat) float64 { return float64(s.MaxIdleDestroyCount()) }},
70+
}
71+
72+
gaugeVecs []*prometheus.GaugeVec
73+
counterVecs []*prometheus.CounterVec
6474
)
6575

6676
func init() {
67-
cols = make([]*prometheus.GaugeVec, len(metrics))
68-
for k, def := range metrics {
69-
cols[k] = prometheus.NewGaugeVec(prometheus.GaugeOpts{Subsystem: "pgx_pool", Name: def.Key}, []string{"address", "database", "client"})
70-
prometheus.MustRegister(cols[k])
77+
labels := []string{"address", "database", "client"}
78+
79+
gaugeVecs = make([]*prometheus.GaugeVec, len(gaugeMetrics))
80+
for k, def := range gaugeMetrics {
81+
gaugeVecs[k] = prometheus.NewGaugeVec(prometheus.GaugeOpts{Subsystem: "pgx_pool", Name: def.Key}, labels)
82+
prometheus.MustRegister(gaugeVecs[k])
83+
}
84+
85+
counterVecs = make([]*prometheus.CounterVec, len(counterMetrics))
86+
for k, def := range counterMetrics {
87+
counterVecs[k] = prometheus.NewCounterVec(prometheus.CounterOpts{Subsystem: "pgx_pool", Name: def.Key}, labels)
88+
prometheus.MustRegister(counterVecs[k])
7189
}
7290
}
7391

@@ -100,6 +118,8 @@ func newDatabase(instance DBInstance, conn *pgxpool.Pool, tracer trace.Tracer, c
100118
t := time.NewTicker(5 * time.Second)
101119
defer t.Stop()
102120

121+
prevCounters := make([]float64, len(counterMetrics))
122+
103123
for {
104124
select {
105125
case <-ctx.Done():
@@ -108,8 +128,17 @@ func newDatabase(instance DBInstance, conn *pgxpool.Pool, tracer trace.Tracer, c
108128
case <-t.C:
109129
stats := conn.Stat()
110130

111-
for k, def := range metrics {
112-
cols[k].WithLabelValues(db.opts.clusterAddr, db.opts.databaseName, client).Set(def.Value(stats))
131+
for k, def := range gaugeMetrics {
132+
gaugeVecs[k].WithLabelValues(db.opts.clusterAddr, db.opts.databaseName, client).Set(def.Value(stats))
133+
}
134+
135+
for k, def := range counterMetrics {
136+
v := def.Value(stats)
137+
delta := v - prevCounters[k]
138+
if delta > 0 {
139+
counterVecs[k].WithLabelValues(db.opts.clusterAddr, db.opts.databaseName, client).Add(delta)
140+
}
141+
prevCounters[k] = v
113142
}
114143
}
115144
}

0 commit comments

Comments
 (0)