@@ -30,18 +30,20 @@ import (
30
30
31
31
type MetricsServer struct {
32
32
* http.Server
33
- syncCounter * prometheus.CounterVec
34
- kubectlExecCounter * prometheus.CounterVec
35
- kubectlExecPendingGauge * prometheus.GaugeVec
36
- orphanedResourcesGauge * prometheus.GaugeVec
37
- k8sRequestCounter * prometheus.CounterVec
38
- clusterEventsCounter * prometheus.CounterVec
39
- redisRequestCounter * prometheus.CounterVec
40
- reconcileHistogram * prometheus.HistogramVec
41
- redisRequestHistogram * prometheus.HistogramVec
42
- registry * prometheus.Registry
43
- hostname string
44
- cron * cron.Cron
33
+ syncCounter * prometheus.CounterVec
34
+ kubectlExecCounter * prometheus.CounterVec
35
+ kubectlExecPendingGauge * prometheus.GaugeVec
36
+ orphanedResourcesGauge * prometheus.GaugeVec
37
+ k8sRequestCounter * prometheus.CounterVec
38
+ clusterEventsCounter * prometheus.CounterVec
39
+ redisRequestCounter * prometheus.CounterVec
40
+ reconcileHistogram * prometheus.HistogramVec
41
+ redisRequestHistogram * prometheus.HistogramVec
42
+ resourceEventsProcessingHistogram * prometheus.HistogramVec
43
+ resourceEventsNumberGauge * prometheus.GaugeVec
44
+ registry * prometheus.Registry
45
+ hostname string
46
+ cron * cron.Cron
45
47
}
46
48
47
49
const (
@@ -153,6 +155,20 @@ var (
153
155
},
154
156
descAppDefaultLabels ,
155
157
)
158
+
159
+ resourceEventsProcessingHistogram = prometheus .NewHistogramVec (
160
+ prometheus.HistogramOpts {
161
+ Name : "argocd_resource_events_processing" ,
162
+ Help : "Time to process resource events in seconds." ,
163
+ Buckets : []float64 {0.25 , .5 , 1 , 2 , 4 , 8 , 16 },
164
+ },
165
+ []string {"server" },
166
+ )
167
+
168
+ resourceEventsNumberGauge = prometheus .NewGaugeVec (prometheus.GaugeOpts {
169
+ Name : "argocd_resource_events_processed_in_batch" ,
170
+ Help : "Number of resource events processed in batch" ,
171
+ }, []string {"server" })
156
172
)
157
173
158
174
// NewMetricsServer returns a new prometheus server which collects application metrics
@@ -202,23 +218,27 @@ func NewMetricsServer(addr string, appLister applister.ApplicationLister, appFil
202
218
registry .MustRegister (clusterEventsCounter )
203
219
registry .MustRegister (redisRequestCounter )
204
220
registry .MustRegister (redisRequestHistogram )
221
+ registry .MustRegister (resourceEventsProcessingHistogram )
222
+ registry .MustRegister (resourceEventsNumberGauge )
205
223
206
224
return & MetricsServer {
207
225
registry : registry ,
208
226
Server : & http.Server {
209
227
Addr : addr ,
210
228
Handler : mux ,
211
229
},
212
- syncCounter : syncCounter ,
213
- k8sRequestCounter : k8sRequestCounter ,
214
- kubectlExecCounter : kubectlExecCounter ,
215
- kubectlExecPendingGauge : kubectlExecPendingGauge ,
216
- orphanedResourcesGauge : orphanedResourcesGauge ,
217
- reconcileHistogram : reconcileHistogram ,
218
- clusterEventsCounter : clusterEventsCounter ,
219
- redisRequestCounter : redisRequestCounter ,
220
- redisRequestHistogram : redisRequestHistogram ,
221
- hostname : hostname ,
230
+ syncCounter : syncCounter ,
231
+ k8sRequestCounter : k8sRequestCounter ,
232
+ kubectlExecCounter : kubectlExecCounter ,
233
+ kubectlExecPendingGauge : kubectlExecPendingGauge ,
234
+ orphanedResourcesGauge : orphanedResourcesGauge ,
235
+ reconcileHistogram : reconcileHistogram ,
236
+ clusterEventsCounter : clusterEventsCounter ,
237
+ redisRequestCounter : redisRequestCounter ,
238
+ redisRequestHistogram : redisRequestHistogram ,
239
+ resourceEventsProcessingHistogram : resourceEventsProcessingHistogram ,
240
+ resourceEventsNumberGauge : resourceEventsNumberGauge ,
241
+ hostname : hostname ,
222
242
// This cron is used to expire the metrics cache.
223
243
// Currently clearing the metrics cache is logging and deleting from the map
224
244
// so there is no possibility of panic, but we will add a chain to keep robfig/cron v1 behavior.
@@ -284,6 +304,12 @@ func (m *MetricsServer) ObserveRedisRequestDuration(duration time.Duration) {
284
304
m .redisRequestHistogram .WithLabelValues (m .hostname , common .ApplicationController ).Observe (duration .Seconds ())
285
305
}
286
306
307
+ // ObserveResourceEventsProcessingDuration observes resource events processing duration
308
+ func (m * MetricsServer ) ObserveResourceEventsProcessingDuration (server string , duration time.Duration , processedEventsNumber int ) {
309
+ m .resourceEventsProcessingHistogram .WithLabelValues (server ).Observe (duration .Seconds ())
310
+ m .resourceEventsNumberGauge .WithLabelValues (server ).Set (float64 (processedEventsNumber ))
311
+ }
312
+
287
313
// IncReconcile increments the reconcile counter for an application
288
314
func (m * MetricsServer ) IncReconcile (app * argoappv1.Application , duration time.Duration ) {
289
315
m .reconcileHistogram .WithLabelValues (app .Namespace , app .Spec .Destination .Server ).Observe (duration .Seconds ())
@@ -311,6 +337,8 @@ func (m *MetricsServer) SetExpiration(cacheExpiration time.Duration) error {
311
337
m .redisRequestCounter .Reset ()
312
338
m .reconcileHistogram .Reset ()
313
339
m .redisRequestHistogram .Reset ()
340
+ m .resourceEventsProcessingHistogram .Reset ()
341
+ m .resourceEventsNumberGauge .Reset ()
314
342
})
315
343
if err != nil {
316
344
return err
0 commit comments