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_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").
|
||||
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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,
|
||||
|
|
Loading…
Add table
Reference in a new issue