aboutsummaryrefslogtreecommitdiff
path: root/middleware/prometheus/handler.go
diff options
context:
space:
mode:
Diffstat (limited to 'middleware/prometheus/handler.go')
-rw-r--r--middleware/prometheus/handler.go31
1 files changed, 31 insertions, 0 deletions
diff --git a/middleware/prometheus/handler.go b/middleware/prometheus/handler.go
new file mode 100644
index 000000000..eb82b8aff
--- /dev/null
+++ b/middleware/prometheus/handler.go
@@ -0,0 +1,31 @@
+package metrics
+
+import (
+ "strconv"
+ "time"
+
+ "github.com/miekg/coredns/middleware"
+ "github.com/miekg/dns"
+)
+
+func (m *Metrics) ServeDNS(w dns.ResponseWriter, r *dns.Msg) (int, error) {
+ context := middleware.Context{W: w, Req: r}
+
+ qname := context.Name()
+ qtype := context.Type()
+ zone := middleware.Zones(m.ZoneNames).Matches(qname)
+ if zone == "" {
+ zone = "."
+ }
+
+ // Record response to get status code and size of the reply.
+ rw := middleware.NewResponseRecorder(w)
+ status, err := m.Next.ServeDNS(rw, r)
+
+ requestCount.WithLabelValues(zone, qtype).Inc()
+ requestDuration.WithLabelValues(zone).Observe(float64(time.Since(rw.Start()) / time.Second))
+ responseSize.WithLabelValues(zone).Observe(float64(rw.Size()))
+ responseRcode.WithLabelValues(zone, strconv.Itoa(rw.Rcode())).Inc()
+
+ return status, err
+}