diff --git a/core/dnsserver/server.go b/core/dnsserver/server.go index 16cba3bd1..5242a6d2d 100644 --- a/core/dnsserver/server.go +++ b/core/dnsserver/server.go @@ -208,6 +208,7 @@ func (s *Server) ServeDNS(ctx context.Context, w dns.ResponseWriter, r *dns.Msg) // In case the user doesn't enable error plugin, we still // need to make sure that we stay alive up here if rec := recover(); rec != nil { + vars.Panic.Inc() DefaultErrorFunc(ctx, w, r, dns.RcodeServerFailure) } }() diff --git a/plugin/metrics/README.md b/plugin/metrics/README.md index 882e1fcb2..c962068a4 100644 --- a/plugin/metrics/README.md +++ b/plugin/metrics/README.md @@ -11,6 +11,7 @@ The default location for the metrics is `localhost:9153`. The metrics path is fi The following metrics are exported: * `coredns_build_info{version, revision, goversion}` - info about CoreDNS itself. +* `coredns_panic_count_total{}` - total number of panics. * `coredns_dns_request_count_total{server, zone, proto, family}` - total query count. * `coredns_dns_request_duration_seconds{server, zone}` - duration to process each query. * `coredns_dns_request_size_bytes{server, zone, proto}` - size of the request in bytes. diff --git a/plugin/metrics/metrics.go b/plugin/metrics/metrics.go index 5816288a4..af4afc6ac 100644 --- a/plugin/metrics/metrics.go +++ b/plugin/metrics/metrics.go @@ -41,6 +41,7 @@ func New(addr string) *Metrics { // Add all of our collectors met.MustRegister(buildInfo) + met.MustRegister(vars.Panic) met.MustRegister(vars.RequestCount) met.MustRegister(vars.RequestDuration) met.MustRegister(vars.RequestSize) @@ -137,10 +138,8 @@ func keys(m map[string]bool) []string { // we listen on "localhost:0" and need to retrieve the actual address. var ListenAddr string -var ( - buildInfo = prometheus.NewGaugeVec(prometheus.GaugeOpts{ - Namespace: plugin.Namespace, - Name: "build_info", - Help: "A metric with a constant '1' value labeled by version, revision, and goversion from which CoreDNS was built.", - }, []string{"version", "revision", "goversion"}) -) +var buildInfo = prometheus.NewGaugeVec(prometheus.GaugeOpts{ + Namespace: plugin.Namespace, + Name: "build_info", + Help: "A metric with a constant '1' value labeled by version, revision, and goversion from which CoreDNS was built.", +}, []string{"version", "revision", "goversion"}) diff --git a/plugin/metrics/vars/vars.go b/plugin/metrics/vars/vars.go index 3b3c083c8..a25a0894c 100644 --- a/plugin/metrics/vars/vars.go +++ b/plugin/metrics/vars/vars.go @@ -59,6 +59,12 @@ var ( Name: "response_rcode_count_total", Help: "Counter of response status codes.", }, []string{"server", "zone", "rcode"}) + + Panic = prometheus.NewCounter(prometheus.CounterOpts{ + Namespace: plugin.Namespace, + Name: "panic_count_total", + Help: "A metrics that counts the number of panics.", + }) ) const (