metrics: remove RR type (#4534)

To combat label cardinality explosions remove the type from metrics.
This was most severe in the histogram for request duration, remove it
there.

It's also highlighted difference between grpc and forward code, where
forward did use type and grpc didn't; getting rid of all that "fixes"
that discrepancy

Move monitor.go back into the vars directory and make it private again.
Also name it slightly better

Fixes: #4507

Signed-off-by: Miek Gieben <miek@miek.nl>
This commit is contained in:
Miek Gieben 2021-03-19 12:59:26 +01:00 committed by GitHub
parent 634e3fe8f5
commit ed3f287fe8
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 13 additions and 19 deletions

View file

@ -11,7 +11,6 @@ import (
"sync/atomic" "sync/atomic"
"time" "time"
"github.com/coredns/coredns/plugin/pkg/dnsutil"
"github.com/coredns/coredns/request" "github.com/coredns/coredns/request"
"github.com/miekg/dns" "github.com/miekg/dns"
@ -130,11 +129,9 @@ func (p *Proxy) Connect(ctx context.Context, state request.Request, opts options
rc = strconv.Itoa(ret.Rcode) rc = strconv.Itoa(ret.Rcode)
} }
qtype := dnsutil.QTypeMonitorLabel(state.QType())
RequestCount.WithLabelValues(p.addr).Add(1) RequestCount.WithLabelValues(p.addr).Add(1)
RcodeCount.WithLabelValues(rc, p.addr).Add(1) RcodeCount.WithLabelValues(rc, p.addr).Add(1)
RequestDuration.WithLabelValues(p.addr, rc, qtype).Observe(time.Since(start).Seconds()) RequestDuration.WithLabelValues(p.addr, rc).Observe(time.Since(start).Seconds())
return ret, nil return ret, nil
} }

View file

@ -27,7 +27,7 @@ var (
Name: "request_duration_seconds", Name: "request_duration_seconds",
Buckets: plugin.TimeBuckets, Buckets: plugin.TimeBuckets,
Help: "Histogram of the time each request took.", Help: "Histogram of the time each request took.",
}, []string{"to", "rcode", "type"}) }, []string{"to", "rcode"})
HealthcheckFailureCount = promauto.NewCounterVec(prometheus.CounterOpts{ HealthcheckFailureCount = promauto.NewCounterVec(prometheus.CounterOpts{
Namespace: plugin.Namespace, Namespace: plugin.Namespace,
Subsystem: "forward", Subsystem: "forward",

View file

@ -1,4 +1,4 @@
package dnsutil package vars
import ( import (
"github.com/miekg/dns" "github.com/miekg/dns"
@ -25,13 +25,11 @@ var monitorType = map[uint16]struct{}{
dns.TypeANY: {}, dns.TypeANY: {},
} }
const other = "other" // qTypeString returns the RR type based on monitorType. It returns the text representation
// of thosAe types. RR types not in that list will have "other" returned.
// QTypeMonitorLabel returns dns type label based on a list of monitored types. func qTypeString(qtype uint16) string {
// Will return "other" for unmonitored ones.
func QTypeMonitorLabel(qtype uint16) string {
if _, known := monitorType[qtype]; known { if _, known := monitorType[qtype]; known {
return dns.Type(qtype).String() return dns.Type(qtype).String()
} }
return other return "other"
} }

View file

@ -3,7 +3,6 @@ package vars
import ( import (
"time" "time"
"github.com/coredns/coredns/plugin/pkg/dnsutil"
"github.com/coredns/coredns/request" "github.com/coredns/coredns/request"
) )
@ -18,14 +17,14 @@ func Report(server string, req request.Request, zone, rcode string, size int, st
fam = "2" fam = "2"
} }
qtype := dnsutil.QTypeMonitorLabel(req.QType())
if req.Do() { if req.Do() {
RequestDo.WithLabelValues(server, zone).Inc() RequestDo.WithLabelValues(server, zone).Inc()
} }
qtype := qTypeString(req.QType())
RequestCount.WithLabelValues(server, zone, net, fam, qtype).Inc() RequestCount.WithLabelValues(server, zone, net, fam, qtype).Inc()
RequestDuration.WithLabelValues(server, zone, qtype).Observe(time.Since(start).Seconds())
RequestDuration.WithLabelValues(server, zone).Observe(time.Since(start).Seconds())
ResponseSize.WithLabelValues(server, zone, net).Observe(float64(size)) ResponseSize.WithLabelValues(server, zone, net).Observe(float64(size))
RequestSize.WithLabelValues(server, zone, net).Observe(float64(req.Len())) RequestSize.WithLabelValues(server, zone, net).Observe(float64(req.Len()))

View file

@ -21,14 +21,14 @@ var (
Subsystem: subsystem, Subsystem: subsystem,
Name: "request_duration_seconds", Name: "request_duration_seconds",
Buckets: plugin.TimeBuckets, Buckets: plugin.TimeBuckets,
Help: "Histogram of the time (in seconds) each request took.", Help: "Histogram of the time (in seconds) each request took per zone.",
}, []string{"server", "zone", "type"}) }, []string{"server", "zone"})
RequestSize = promauto.NewHistogramVec(prometheus.HistogramOpts{ RequestSize = promauto.NewHistogramVec(prometheus.HistogramOpts{
Namespace: plugin.Namespace, Namespace: plugin.Namespace,
Subsystem: subsystem, Subsystem: subsystem,
Name: "request_size_bytes", Name: "request_size_bytes",
Help: "Size of the EDNS0 UDP buffer in bytes (64K for TCP).", Help: "Size of the EDNS0 UDP buffer in bytes (64K for TCP) per zone and protocol.",
Buckets: []float64{0, 100, 200, 300, 400, 511, 1023, 2047, 4095, 8291, 16e3, 32e3, 48e3, 64e3}, Buckets: []float64{0, 100, 200, 300, 400, 511, 1023, 2047, 4095, 8291, 16e3, 32e3, 48e3, 64e3},
}, []string{"server", "zone", "proto"}) }, []string{"server", "zone", "proto"})