middleware/metrics: log qtype as well
This commit is contained in:
parent
11094409ac
commit
05461ad525
3 changed files with 40 additions and 1 deletions
|
@ -9,13 +9,17 @@ The following metrics are exported:
|
||||||
* coredns_dns_request_duration_seconds
|
* coredns_dns_request_duration_seconds
|
||||||
* coredns_dns_request_size_bytes
|
* coredns_dns_request_size_bytes
|
||||||
* coredns_dns_request_do_count_total
|
* coredns_dns_request_do_count_total
|
||||||
|
* coredns_dns_request_type_count_total
|
||||||
* coredns_dns_response_size_bytes
|
* coredns_dns_response_size_bytes
|
||||||
* coredns_dns_response_rcode_count_total
|
* coredns_dns_response_rcode_count_total
|
||||||
|
|
||||||
Each counter has a label `zone` which is the zonename used for the request/response. and a label
|
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
|
`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
|
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 `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").
|
The `*_size_bytes` counters also hold the protocol in the `proto` label ("udp" or "tcp").
|
||||||
|
|
||||||
|
|
|
@ -48,7 +48,32 @@ func Report(state middleware.State, zone, rcode string, size int, start time.Tim
|
||||||
if state.Do() {
|
if state.Do() {
|
||||||
requestDo.WithLabelValues(zone).Inc()
|
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))
|
responseSize.WithLabelValues(zone, net).Observe(float64(size))
|
||||||
responseRcode.WithLabelValues(zone, rcode).Inc()
|
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"
|
||||||
|
|
|
@ -16,6 +16,7 @@ var (
|
||||||
requestDuration *prometheus.HistogramVec
|
requestDuration *prometheus.HistogramVec
|
||||||
requestSize *prometheus.HistogramVec
|
requestSize *prometheus.HistogramVec
|
||||||
requestDo *prometheus.CounterVec
|
requestDo *prometheus.CounterVec
|
||||||
|
requestType *prometheus.CounterVec
|
||||||
|
|
||||||
responseSize *prometheus.HistogramVec
|
responseSize *prometheus.HistogramVec
|
||||||
responseRcode *prometheus.CounterVec
|
responseRcode *prometheus.CounterVec
|
||||||
|
@ -47,6 +48,8 @@ func (m *Metrics) Start() error {
|
||||||
prometheus.MustRegister(requestDuration)
|
prometheus.MustRegister(requestDuration)
|
||||||
prometheus.MustRegister(requestSize)
|
prometheus.MustRegister(requestSize)
|
||||||
prometheus.MustRegister(requestDo)
|
prometheus.MustRegister(requestDo)
|
||||||
|
prometheus.MustRegister(requestType)
|
||||||
|
|
||||||
prometheus.MustRegister(responseSize)
|
prometheus.MustRegister(responseSize)
|
||||||
prometheus.MustRegister(responseRcode)
|
prometheus.MustRegister(responseRcode)
|
||||||
|
|
||||||
|
@ -97,6 +100,13 @@ func define() {
|
||||||
Help: "Counter of DNS requests with DO bit set per zone.",
|
Help: "Counter of DNS requests with DO bit set per zone.",
|
||||||
}, []string{"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{
|
responseSize = prometheus.NewHistogramVec(prometheus.HistogramOpts{
|
||||||
Namespace: middleware.Namespace,
|
Namespace: middleware.Namespace,
|
||||||
Subsystem: subsystem,
|
Subsystem: subsystem,
|
||||||
|
|
Loading…
Add table
Reference in a new issue