aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Miek Gieben <miek@miek.nl> 2016-04-21 21:46:58 +0100
committerGravatar Miek Gieben <miek@miek.nl> 2016-04-21 21:46:58 +0100
commita412255ad152f6feb9b778b7b22b4afde2ad5085 (patch)
tree9b55e046a47424cf7c81a4ee4c123f93e6ad4192
parente5e0cde08fa5334c4014494a6991cc740a5bed9f (diff)
downloadcoredns-a412255ad152f6feb9b778b7b22b4afde2ad5085.tar.gz
coredns-a412255ad152f6feb9b778b7b22b4afde2ad5085.tar.zst
coredns-a412255ad152f6feb9b778b7b22b4afde2ad5085.zip
middleware/cache: Add metrics (#132)
Add prometheus metrics to the cache handler. This just used prometheus, if the metrics middleware does not setup the handler, there is nobody reading these metrics, but they are still reported. Seems the simplest solution while keeping the whole middleware separation in tact.
-rw-r--r--middleware/cache/handler.go28
-rw-r--r--middleware/metrics/metrics.go22
-rw-r--r--middleware/middleware.go2
3 files changed, 41 insertions, 11 deletions
diff --git a/middleware/cache/handler.go b/middleware/cache/handler.go
index 51e3731bd..35443fa1d 100644
--- a/middleware/cache/handler.go
+++ b/middleware/cache/handler.go
@@ -4,6 +4,7 @@ import (
"github.com/miekg/coredns/middleware"
"github.com/miekg/dns"
+ "github.com/prometheus/client_golang/prometheus"
"golang.org/x/net/context"
)
@@ -24,8 +25,12 @@ func (c Cache) ServeDNS(ctx context.Context, w dns.ResponseWriter, r *dns.Msg) (
resp := i.toMsg(r)
state.SizeAndDo(resp)
w.WriteMsg(resp)
+
+ cacheHitCount.WithLabelValues(zone).Inc()
return dns.RcodeSuccess, nil
}
+ cacheMissCount.WithLabelValues(zone).Inc()
+
crr := NewCachingResponseWriter(w, c.cache, c.cap)
return c.Next.ServeDNS(ctx, crr, r)
}
@@ -42,3 +47,26 @@ func (c Cache) Get(qname string, qtype uint16, do bool) (*item, bool) {
}
return nil, false
}
+
+var (
+ cacheHitCount = prometheus.NewCounterVec(prometheus.CounterOpts{
+ Namespace: middleware.Namespace,
+ Subsystem: subsystem,
+ Name: "hit_count_total",
+ Help: "Counter of DNS requests that were found in the cache.",
+ }, []string{"zone"})
+
+ cacheMissCount = prometheus.NewCounterVec(prometheus.CounterOpts{
+ Namespace: middleware.Namespace,
+ Subsystem: subsystem,
+ Name: "miss_count_total",
+ Help: "Counter of DNS requests that were not found in the cache.",
+ }, []string{"zone"})
+)
+
+const subsystem = "cache"
+
+func init() {
+ prometheus.MustRegister(cacheHitCount)
+ prometheus.MustRegister(cacheMissCount)
+}
diff --git a/middleware/metrics/metrics.go b/middleware/metrics/metrics.go
index a4224c6fe..35f411073 100644
--- a/middleware/metrics/metrics.go
+++ b/middleware/metrics/metrics.go
@@ -6,11 +6,10 @@ import (
"sync"
"github.com/miekg/coredns/middleware"
+
"github.com/prometheus/client_golang/prometheus"
)
-const namespace = "coredns"
-
var (
requestCount *prometheus.CounterVec
requestDuration *prometheus.HistogramVec
@@ -48,18 +47,15 @@ func (m *Metrics) Start() error {
}
func define(subsystem string) {
- if subsystem == "" {
- subsystem = "dns"
- }
requestCount = prometheus.NewCounterVec(prometheus.CounterOpts{
- Namespace: namespace,
+ Namespace: middleware.Namespace,
Subsystem: subsystem,
Name: "request_count_total",
Help: "Counter of DNS requests made per zone and protocol.",
}, []string{"zone", "proto"})
requestDuration = prometheus.NewHistogramVec(prometheus.HistogramOpts{
- Namespace: namespace,
+ Namespace: middleware.Namespace,
Subsystem: subsystem,
Name: "request_duration_seconds",
Buckets: append([]float64{.0001, .0005, .001, .0025}, prometheus.DefBuckets...),
@@ -67,7 +63,7 @@ func define(subsystem string) {
}, []string{"zone"})
responseSize = prometheus.NewHistogramVec(prometheus.HistogramOpts{
- Namespace: namespace,
+ Namespace: middleware.Namespace,
Subsystem: subsystem,
Name: "response_size_bytes",
Help: "Size of the returns response in bytes.",
@@ -75,12 +71,16 @@ func define(subsystem string) {
}, []string{"zone"})
responseRcode = prometheus.NewCounterVec(prometheus.CounterOpts{
- Namespace: namespace,
+ Namespace: middleware.Namespace,
Subsystem: subsystem,
Name: "response_rcode_count_total",
Help: "Counter of response status codes.",
}, []string{"zone", "rcode"})
}
-// Dropped indicates we dropped the query before any handling. It has no closing dot, so it can not be a valid zone.
-const Dropped = "dropped"
+const (
+ // Dropped indicates we dropped the query before any handling. It has no closing dot, so it can not be a valid zone.
+ Dropped = "dropped"
+
+ subsystem = "dns"
+)
diff --git a/middleware/middleware.go b/middleware/middleware.go
index 4ceda5940..fa6be487d 100644
--- a/middleware/middleware.go
+++ b/middleware/middleware.go
@@ -54,6 +54,8 @@ func (f HandlerFunc) ServeDNS(ctx context.Context, w dns.ResponseWriter, r *dns.
return f(ctx, w, r)
}
+const Namespace = "coredns"
+
// IndexFile looks for a file in /root/fpath/indexFile for each string
// in indexFiles. If an index file is found, it returns the root-relative
// path to the file and true. If no index file is found, empty string