aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Miek Gieben <miek@miek.nl> 2016-06-25 18:12:13 +0100
committerGravatar Miek Gieben <miek@miek.nl> 2016-06-25 18:12:13 +0100
commit05461ad525972e356983899cb0b85c910d242aa8 (patch)
tree98b857f4a33304c89f3b3acc1c39ae92e9aa6db9
parent11094409ac7c6727810079c79a9796da20439635 (diff)
downloadcoredns-05461ad525972e356983899cb0b85c910d242aa8.tar.gz
coredns-05461ad525972e356983899cb0b85c910d242aa8.tar.zst
coredns-05461ad525972e356983899cb0b85c910d242aa8.zip
middleware/metrics: log qtype as well
-rw-r--r--middleware/metrics/README.md6
-rw-r--r--middleware/metrics/handler.go25
-rw-r--r--middleware/metrics/metrics.go10
3 files changed, 40 insertions, 1 deletions
diff --git a/middleware/metrics/README.md b/middleware/metrics/README.md
index 99b5a9f27..e9ea63f43 100644
--- a/middleware/metrics/README.md
+++ b/middleware/metrics/README.md
@@ -9,13 +9,17 @@ The following metrics are exported:
* coredns_dns_request_duration_seconds
* coredns_dns_request_size_bytes
* coredns_dns_request_do_count_total
+* coredns_dns_request_type_count_total
* coredns_dns_response_size_bytes
* coredns_dns_response_rcode_count_total
Each counter has a label `zone` which is the zonename used for the request/response. and a label
`qtype` which old the query type. The `dns_request_count_total` has extra labels: `proto` which
holds the transport of the response ("udp" or "tcp") and the address family of the transport (1
-= IP (IP version 4), 2 = IP6 (IP version 6)).
+= IP (IP version 4), 2 = IP6 (IP version 6)). And `type_count_total` hold a per RR type counter, it
+holds the most common ones (A, AAAA, MX, SOA, CNAME, PTR, TXT, NS, SRV, DS, DNSKEY, RRSIG, NSEC,
+NSEC3) and "other" which lumps together all other types.
+
The `response_rcode_count_total` has an extra label `rcode` which holds the rcode of the response.
The `*_size_bytes` counters also hold the protocol in the `proto` label ("udp" or "tcp").
diff --git a/middleware/metrics/handler.go b/middleware/metrics/handler.go
index 019a02c3e..6b0401378 100644
--- a/middleware/metrics/handler.go
+++ b/middleware/metrics/handler.go
@@ -48,7 +48,32 @@ func Report(state middleware.State, zone, rcode string, size int, start time.Tim
if state.Do() {
requestDo.WithLabelValues(zone).Inc()
}
+ typ := state.QType()
+ if _, known := monitorType[typ]; known {
+ requestType.WithLabelValues(zone, dns.Type(typ).String())
+ } else {
+ requestType.WithLabelValues(zone, other)
+ }
responseSize.WithLabelValues(zone, net).Observe(float64(size))
responseRcode.WithLabelValues(zone, rcode).Inc()
}
+
+var monitorType = map[uint16]bool{
+ dns.TypeAAAA: true,
+ dns.TypeA: true,
+ dns.TypeCNAME: true,
+ dns.TypeDNSKEY: true,
+ dns.TypeDS: true,
+ dns.TypeMX: true,
+ dns.TypeNSEC3: true,
+ dns.TypeNSEC: true,
+ dns.TypeNS: true,
+ dns.TypePTR: true,
+ dns.TypeRRSIG: true,
+ dns.TypeSOA: true,
+ dns.TypeSRV: true,
+ dns.TypeTXT: true,
+}
+
+const other = "other"
diff --git a/middleware/metrics/metrics.go b/middleware/metrics/metrics.go
index 093f2a7dd..50aeaa52c 100644
--- a/middleware/metrics/metrics.go
+++ b/middleware/metrics/metrics.go
@@ -16,6 +16,7 @@ var (
requestDuration *prometheus.HistogramVec
requestSize *prometheus.HistogramVec
requestDo *prometheus.CounterVec
+ requestType *prometheus.CounterVec
responseSize *prometheus.HistogramVec
responseRcode *prometheus.CounterVec
@@ -47,6 +48,8 @@ func (m *Metrics) Start() error {
prometheus.MustRegister(requestDuration)
prometheus.MustRegister(requestSize)
prometheus.MustRegister(requestDo)
+ prometheus.MustRegister(requestType)
+
prometheus.MustRegister(responseSize)
prometheus.MustRegister(responseRcode)
@@ -97,6 +100,13 @@ func define() {
Help: "Counter of DNS requests with DO bit set per zone.",
}, []string{"zone"})
+ requestType = prometheus.NewCounterVec(prometheus.CounterOpts{
+ Namespace: middleware.Namespace,
+ Subsystem: subsystem,
+ Name: "request_type_count_total",
+ Help: "Counter of DNS requests per type, per zone.",
+ }, []string{"zone", "type"})
+
responseSize = prometheus.NewHistogramVec(prometheus.HistogramOpts{
Namespace: middleware.Namespace,
Subsystem: subsystem,