From d6dc40406b0b8bf3506afd15ec5f42639137517a Mon Sep 17 00:00:00 2001 From: Michal Fojtik Date: Fri, 3 Jan 2020 11:34:23 +0100 Subject: [PATCH] fileobserver: prometheus counter for observed actions --- pkg/controller/fileobserver/observer.go | 13 +++++++++++++ .../fileobserver/observer_polling.go | 18 ++++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/pkg/controller/fileobserver/observer.go b/pkg/controller/fileobserver/observer.go index c5a120574a..1f848a18b1 100644 --- a/pkg/controller/fileobserver/observer.go +++ b/pkg/controller/fileobserver/observer.go @@ -28,6 +28,19 @@ const ( FileDeleted ) +func (t ActionType) name() string { + switch t { + case FileCreated: + return "create" + case FileDeleted: + return "delete" + case FileModified: + return "modified" + default: + return "unknown" + } +} + // String returns human readable form of action taken on a file. func (t ActionType) String(filename string) string { switch t { diff --git a/pkg/controller/fileobserver/observer_polling.go b/pkg/controller/fileobserver/observer_polling.go index 0b33e79ef1..4867a51ebe 100644 --- a/pkg/controller/fileobserver/observer_polling.go +++ b/pkg/controller/fileobserver/observer_polling.go @@ -11,6 +11,8 @@ import ( "time" "k8s.io/apimachinery/pkg/util/wait" + "k8s.io/component-base/metrics" + "k8s.io/component-base/metrics/legacyregistry" "k8s.io/klog" ) @@ -114,6 +116,9 @@ func (o *pollingObserver) processReactors(stopCh <-chan struct{}) { klog.Infof("Observed file %q has been modified (old=%q, new=%q)", filename, lastKnownFileState.hash, currentFileState.hash) action = FileModified } + // increment metrics counter for this file + observerActionsMetrics.WithLabelValues(filename, action.name()).Inc() + // execute the register reactor if err := reactors[i](filename, action); err != nil { klog.Errorf("Reactor for %q failed: %v", filename, err) } @@ -132,6 +137,19 @@ func (o *pollingObserver) processReactors(stopCh <-chan struct{}) { } } +var observerActionsMetrics = metrics.NewCounterVec(&metrics.CounterOpts{ + Subsystem: "fileobserver", + Name: "action_count", + Help: "Counter for every observed action for all monitored files", + StabilityLevel: metrics.ALPHA, +}, []string{"name", "filename"}) + +func init() { + (&sync.Once{}).Do(func() { + legacyregistry.MustRegister(observerActionsMetrics) + }) +} + // Run will start a new observer. func (o *pollingObserver) Run(stopChan <-chan struct{}) { klog.Info("Starting file observer")