aboutsummaryrefslogtreecommitdiff
path: root/plugin
diff options
context:
space:
mode:
authorGravatar Miek Gieben <miek@miek.nl> 2021-03-19 12:59:26 +0100
committerGravatar GitHub <noreply@github.com> 2021-03-19 12:59:26 +0100
commited3f287fe8114255739b2c1757a7621ba913244c (patch)
tree279fcbee38817383aae3246ec4631553332dff10 /plugin
parent634e3fe8f5f8511736b7caf4dbd9ab5541b29fac (diff)
downloadcoredns-ed3f287fe8114255739b2c1757a7621ba913244c.tar.gz
coredns-ed3f287fe8114255739b2c1757a7621ba913244c.tar.zst
coredns-ed3f287fe8114255739b2c1757a7621ba913244c.zip
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>
Diffstat (limited to 'plugin')
-rw-r--r--plugin/forward/connect.go5
-rw-r--r--plugin/forward/metrics.go2
-rw-r--r--plugin/metrics/vars/monitor.go (renamed from plugin/pkg/dnsutil/monitor.go)12
-rw-r--r--plugin/metrics/vars/report.go7
-rw-r--r--plugin/metrics/vars/vars.go6
5 files changed, 13 insertions, 19 deletions
diff --git a/plugin/forward/connect.go b/plugin/forward/connect.go
index 7e34837e1..63a0bfe50 100644
--- a/plugin/forward/connect.go
+++ b/plugin/forward/connect.go
@@ -11,7 +11,6 @@ import (
"sync/atomic"
"time"
- "github.com/coredns/coredns/plugin/pkg/dnsutil"
"github.com/coredns/coredns/request"
"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)
}
- qtype := dnsutil.QTypeMonitorLabel(state.QType())
-
RequestCount.WithLabelValues(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
}
diff --git a/plugin/forward/metrics.go b/plugin/forward/metrics.go
index 51685a599..9519c3c9b 100644
--- a/plugin/forward/metrics.go
+++ b/plugin/forward/metrics.go
@@ -27,7 +27,7 @@ var (
Name: "request_duration_seconds",
Buckets: plugin.TimeBuckets,
Help: "Histogram of the time each request took.",
- }, []string{"to", "rcode", "type"})
+ }, []string{"to", "rcode"})
HealthcheckFailureCount = promauto.NewCounterVec(prometheus.CounterOpts{
Namespace: plugin.Namespace,
Subsystem: "forward",
diff --git a/plugin/pkg/dnsutil/monitor.go b/plugin/metrics/vars/monitor.go
index b86f8e43a..17ca7cf63 100644
--- a/plugin/pkg/dnsutil/monitor.go
+++ b/plugin/metrics/vars/monitor.go
@@ -1,4 +1,4 @@
-package dnsutil
+package vars
import (
"github.com/miekg/dns"
@@ -25,13 +25,11 @@ var monitorType = map[uint16]struct{}{
dns.TypeANY: {},
}
-const other = "other"
-
-// QTypeMonitorLabel returns dns type label based on a list of monitored types.
-// Will return "other" for unmonitored ones.
-func QTypeMonitorLabel(qtype uint16) string {
+// 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.
+func qTypeString(qtype uint16) string {
if _, known := monitorType[qtype]; known {
return dns.Type(qtype).String()
}
- return other
+ return "other"
}
diff --git a/plugin/metrics/vars/report.go b/plugin/metrics/vars/report.go
index 9bad43582..d32e361b1 100644
--- a/plugin/metrics/vars/report.go
+++ b/plugin/metrics/vars/report.go
@@ -3,7 +3,6 @@ package vars
import (
"time"
- "github.com/coredns/coredns/plugin/pkg/dnsutil"
"github.com/coredns/coredns/request"
)
@@ -18,14 +17,14 @@ func Report(server string, req request.Request, zone, rcode string, size int, st
fam = "2"
}
- qtype := dnsutil.QTypeMonitorLabel(req.QType())
-
if req.Do() {
RequestDo.WithLabelValues(server, zone).Inc()
}
+ qtype := qTypeString(req.QType())
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))
RequestSize.WithLabelValues(server, zone, net).Observe(float64(req.Len()))
diff --git a/plugin/metrics/vars/vars.go b/plugin/metrics/vars/vars.go
index 2187e13f0..7a803a62a 100644
--- a/plugin/metrics/vars/vars.go
+++ b/plugin/metrics/vars/vars.go
@@ -21,14 +21,14 @@ var (
Subsystem: subsystem,
Name: "request_duration_seconds",
Buckets: plugin.TimeBuckets,
- Help: "Histogram of the time (in seconds) each request took.",
- }, []string{"server", "zone", "type"})
+ Help: "Histogram of the time (in seconds) each request took per zone.",
+ }, []string{"server", "zone"})
RequestSize = promauto.NewHistogramVec(prometheus.HistogramOpts{
Namespace: plugin.Namespace,
Subsystem: subsystem,
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},
}, []string{"server", "zone", "proto"})