From ad352cee88a6be7154e55a2eb0ef1f95ffa858df Mon Sep 17 00:00:00 2001 From: Anshul Sharma Date: Wed, 26 Jun 2019 09:38:46 +0300 Subject: [PATCH] plugin/reload: Add metrics (#2922) * Issue 2920 - Add failed reload counter metrics * typo fix * Requested Changes --- plugin/reload/README.md | 6 ++++++ plugin/reload/metrics.go | 17 +++++++++++++++++ plugin/reload/reload.go | 1 + 3 files changed, 24 insertions(+) create mode 100644 plugin/reload/metrics.go diff --git a/plugin/reload/README.md b/plugin/reload/README.md index 8d1f5db64..c1f5d206b 100644 --- a/plugin/reload/README.md +++ b/plugin/reload/README.md @@ -92,6 +92,12 @@ In general be careful with assigning new port and expecting reload to work fully Also any `import` statement is not discovered by this plugin. This means if any of these imported files changes the *reload* plugin is ignorant of that fact. +## Metrics + + If monitoring is enabled (via the *prometheus* directive) then the following metric is exported: + +* `coredns_reload_failed_count_total{}` - counts the number of failed reload attempts. + ## Also See See coredns-import(7) and corefile(5). diff --git a/plugin/reload/metrics.go b/plugin/reload/metrics.go new file mode 100644 index 000000000..1f790d4c1 --- /dev/null +++ b/plugin/reload/metrics.go @@ -0,0 +1,17 @@ +package reload + +import ( + "github.com/coredns/coredns/plugin" + + "github.com/prometheus/client_golang/prometheus" +) + +// Metrics for the reload plugin +var ( + FailedCount = prometheus.NewCounter(prometheus.CounterOpts{ + Namespace: plugin.Namespace, + Subsystem: "reload", + Name: "failed_count_total", + Help: "Counter of the number of failed reload attempts.", + }) +) diff --git a/plugin/reload/reload.go b/plugin/reload/reload.go index 3abc33835..7070218e9 100644 --- a/plugin/reload/reload.go +++ b/plugin/reload/reload.go @@ -83,6 +83,7 @@ func hook(event caddy.EventName, info interface{}) error { _, err := instance.Restart(corefile) if err != nil { log.Errorf("Corefile changed but reload failed: %s", err) + FailedCount.Add(1) continue } // we are done, if the plugin was not set used, then it is not.