@@ -40,6 +40,7 @@ type MetricsAggregator struct {
40
40
collectCh chan (chan []prometheus.Metric )
41
41
updateCh chan updateRequest
42
42
43
+ storeSizeGauge prometheus.Gauge
43
44
updateHistogram prometheus.Histogram
44
45
cleanupHistogram prometheus.Histogram
45
46
}
@@ -117,14 +118,25 @@ func NewMetricsAggregator(logger slog.Logger, registerer prometheus.Registerer,
117
118
metricsCleanupInterval = duration
118
119
}
119
120
121
+ storeSizeGauge := prometheus .NewGauge (prometheus.GaugeOpts {
122
+ Namespace : "coderd" ,
123
+ Subsystem : "prometheusmetrics" ,
124
+ Name : "metrics_aggregator_store_size" ,
125
+ Help : "The number of metrics stored in the aggregator" ,
126
+ })
127
+ err := registerer .Register (storeSizeGauge )
128
+ if err != nil {
129
+ return nil , err
130
+ }
131
+
120
132
updateHistogram := prometheus .NewHistogram (prometheus.HistogramOpts {
121
133
Namespace : "coderd" ,
122
134
Subsystem : "prometheusmetrics" ,
123
135
Name : "metrics_aggregator_execution_update_seconds" ,
124
136
Help : "Histogram for duration of metrics aggregator update in seconds." ,
125
137
Buckets : []float64 {0.001 , 0.005 , 0.010 , 0.025 , 0.050 , 0.100 , 0.500 , 1 , 5 , 10 , 30 },
126
138
})
127
- err : = registerer .Register (updateHistogram )
139
+ err = registerer .Register (updateHistogram )
128
140
if err != nil {
129
141
return nil , err
130
142
}
@@ -150,6 +162,7 @@ func NewMetricsAggregator(logger slog.Logger, registerer prometheus.Registerer,
150
162
collectCh : make (chan (chan []prometheus.Metric ), sizeCollectCh ),
151
163
updateCh : make (chan updateRequest , sizeUpdateCh ),
152
164
165
+ storeSizeGauge : storeSizeGauge ,
153
166
updateHistogram : updateHistogram ,
154
167
cleanupHistogram : cleanupHistogram ,
155
168
}, nil
@@ -187,8 +200,9 @@ func (ma *MetricsAggregator) Run(ctx context.Context) func() {
187
200
}
188
201
}
189
202
}
190
-
191
203
timer .ObserveDuration ()
204
+
205
+ ma .storeSizeGauge .Set (float64 (len (ma .store )))
192
206
case outputCh := <- ma .collectCh :
193
207
ma .log .Debug (ctx , "collect metrics" )
194
208
@@ -217,6 +231,7 @@ func (ma *MetricsAggregator) Run(ctx context.Context) func() {
217
231
218
232
timer .ObserveDuration ()
219
233
cleanupTicker .Reset (ma .metricsCleanupInterval )
234
+ ma .storeSizeGauge .Set (float64 (len (ma .store )))
220
235
221
236
case <- ctx .Done ():
222
237
ma .log .Debug (ctx , "metrics aggregator is stopped" )
0 commit comments