From ffe6225ff6b1c55b4d9a89a016c4f1aed98dc026 Mon Sep 17 00:00:00 2001 From: Miek Gieben Date: Mon, 7 Oct 2019 16:38:46 +0100 Subject: [PATCH] kubernetes: brush up README, rename metric (#3360) Other latency metrics have `_duration` in the name change this metric to be in sync with the other ones. Signed-off-by: Miek Gieben --- plugin/cache/README.md | 2 +- plugin/kubernetes/README.md | 16 +++++----- plugin/kubernetes/metrics.go | 3 +- plugin/kubernetes/metrics_test.go | 50 +++++++++++++++---------------- 4 files changed, 35 insertions(+), 36 deletions(-) diff --git a/plugin/cache/README.md b/plugin/cache/README.md index 9f97ba437..3f0847f26 100644 --- a/plugin/cache/README.md +++ b/plugin/cache/README.md @@ -61,7 +61,7 @@ Since shards don't fill up perfectly evenly, evictions will occur before the ent Each shard capacity is equal to the total cache size / number of shards (256). Eviction is random, not TTL based. Entries with 0 TTL will remain in the cache until randomly evicted when the shard reaches capacity. -## Metrics +# Metrics If monitoring is enabled (via the *prometheus* directive) then the following metrics are exported: diff --git a/plugin/kubernetes/README.md b/plugin/kubernetes/README.md index ccbd681d9..74de47ed7 100644 --- a/plugin/kubernetes/README.md +++ b/plugin/kubernetes/README.md @@ -46,7 +46,6 @@ kubernetes [ZONES...] { } ``` - * `endpoint` specifies the **URL** for a remote k8s API endpoint. If omitted, it will connect to k8s in-cluster using the cluster service account. * `tls` **CERT** **KEY** **CACERT** are the TLS cert, key and the CA cert file names for remote k8s connection. @@ -210,15 +209,15 @@ or the word "any"), then that label will match all values. The labels that acce * multiple wildcards are allowed in a single query, e.g., `A` Request `*.*.svc.zone.` or `SRV` request `*.*.*.*.svc.zone.` For example, wildcards can be used to resolve all Endpoints for a Service as `A` records. e.g.: `*.service.ns.svc.myzone.local` will return the Endpoint IPs in the Service `service` in namespace `default`: - ``` + +``` *.service.default.svc.cluster.local. 5 IN A 192.168.10.10 *.service.default.svc.cluster.local. 5 IN A 192.168.25.15 ``` - This response can be randomized using the `loadbalance` plugin ## Metadata -The kubernetes plugin will publish the following metadata, if the _metadata_ +The kubernetes plugin will publish the following metadata, if the *metadata* plugin is also enabled: * kubernetes/endpoint: the endpoint name in the query @@ -232,9 +231,10 @@ plugin is also enabled: ## Metrics -The *kubernetes* plugin exports the following *Prometheus* metrics. -* `coredns_kubernetes_dns_programming_latency_seconds{service_kind}` - exports the -[DNS programming latency SLI](https://github.com/kubernetes/community/blob/master/sig-scalability/slos/dns_programming_latency.md). +If monitoring is enabled (via the *prometheus* directive) then the following metrics are exported: + +* `coredns_kubernetes_dns_programming_duration_seconds{service_kind}` - Exports the + [DNS programming latency SLI](https://github.com/kubernetes/community/blob/master/sig-scalability/slos/dns_programming_latency.md). The metrics has the `service_kind` label that identifies the kind of the [kubernetes service](https://kubernetes.io/docs/concepts/services-networking/service). It may take one of the three values: @@ -244,4 +244,4 @@ The *kubernetes* plugin exports the following *Prometheus* metrics. ## Bugs - * add support for other service types; only "headless_with_selector" is supported now +The duration metric only supports the "headless_with_selector" service currently. diff --git a/plugin/kubernetes/metrics.go b/plugin/kubernetes/metrics.go index e85b48120..5547add89 100644 --- a/plugin/kubernetes/metrics.go +++ b/plugin/kubernetes/metrics.go @@ -28,7 +28,7 @@ var ( DnsProgrammingLatency = prometheus.NewHistogramVec(prometheus.HistogramOpts{ Namespace: plugin.Namespace, Subsystem: subsystem, - Name: "dns_programming_latency_seconds", + Name: "dns_programming_duration_seconds", // From 1 millisecond to ~17 minutes. Buckets: prometheus.ExponentialBuckets(0.001, 2, 20), Help: "Histogram of the time (in seconds) it took to program a dns instance.", @@ -72,5 +72,4 @@ func recordDNSProgrammingLatency(svcs []*object.Service, endpoints *api.Endpoint // "headless service with selector". DnsProgrammingLatency.WithLabelValues("headless_with_selector"). Observe(durationSinceFunc(lastChangeTriggerTime).Seconds()) - } diff --git a/plugin/kubernetes/metrics_test.go b/plugin/kubernetes/metrics_test.go index b9d3a9509..96039c62f 100644 --- a/plugin/kubernetes/metrics_test.go +++ b/plugin/kubernetes/metrics_test.go @@ -58,31 +58,31 @@ func TestDnsProgrammingLatency(t *testing.T) { controller.Stop() expected := ` - # HELP coredns_kubernetes_dns_programming_latency_seconds Histogram of the time (in seconds) it took to program a dns instance. - # TYPE coredns_kubernetes_dns_programming_latency_seconds histogram - coredns_kubernetes_dns_programming_latency_seconds_bucket{service_kind="headless_with_selector",le="0.001"} 0 - coredns_kubernetes_dns_programming_latency_seconds_bucket{service_kind="headless_with_selector",le="0.002"} 0 - coredns_kubernetes_dns_programming_latency_seconds_bucket{service_kind="headless_with_selector",le="0.004"} 0 - coredns_kubernetes_dns_programming_latency_seconds_bucket{service_kind="headless_with_selector",le="0.008"} 0 - coredns_kubernetes_dns_programming_latency_seconds_bucket{service_kind="headless_with_selector",le="0.016"} 0 - coredns_kubernetes_dns_programming_latency_seconds_bucket{service_kind="headless_with_selector",le="0.032"} 0 - coredns_kubernetes_dns_programming_latency_seconds_bucket{service_kind="headless_with_selector",le="0.064"} 0 - coredns_kubernetes_dns_programming_latency_seconds_bucket{service_kind="headless_with_selector",le="0.128"} 0 - coredns_kubernetes_dns_programming_latency_seconds_bucket{service_kind="headless_with_selector",le="0.256"} 0 - coredns_kubernetes_dns_programming_latency_seconds_bucket{service_kind="headless_with_selector",le="0.512"} 0 - coredns_kubernetes_dns_programming_latency_seconds_bucket{service_kind="headless_with_selector",le="1.024"} 1 - coredns_kubernetes_dns_programming_latency_seconds_bucket{service_kind="headless_with_selector",le="2.048"} 2 - coredns_kubernetes_dns_programming_latency_seconds_bucket{service_kind="headless_with_selector",le="4.096"} 2 - coredns_kubernetes_dns_programming_latency_seconds_bucket{service_kind="headless_with_selector",le="8.192"} 2 - coredns_kubernetes_dns_programming_latency_seconds_bucket{service_kind="headless_with_selector",le="16.384"} 2 - coredns_kubernetes_dns_programming_latency_seconds_bucket{service_kind="headless_with_selector",le="32.768"} 2 - coredns_kubernetes_dns_programming_latency_seconds_bucket{service_kind="headless_with_selector",le="65.536"} 2 - coredns_kubernetes_dns_programming_latency_seconds_bucket{service_kind="headless_with_selector",le="131.072"} 2 - coredns_kubernetes_dns_programming_latency_seconds_bucket{service_kind="headless_with_selector",le="262.144"} 2 - coredns_kubernetes_dns_programming_latency_seconds_bucket{service_kind="headless_with_selector",le="524.288"} 2 - coredns_kubernetes_dns_programming_latency_seconds_bucket{service_kind="headless_with_selector",le="+Inf"} 2 - coredns_kubernetes_dns_programming_latency_seconds_sum{service_kind="headless_with_selector"} 3 - coredns_kubernetes_dns_programming_latency_seconds_count{service_kind="headless_with_selector"} 2 + # HELP coredns_kubernetes_dns_programming_duration_seconds Histogram of the time (in seconds) it took to program a dns instance. + # TYPE coredns_kubernetes_dns_programming_duration_seconds histogram + coredns_kubernetes_dns_programming_duration_seconds_bucket{service_kind="headless_with_selector",le="0.001"} 0 + coredns_kubernetes_dns_programming_duration_seconds_bucket{service_kind="headless_with_selector",le="0.002"} 0 + coredns_kubernetes_dns_programming_duration_seconds_bucket{service_kind="headless_with_selector",le="0.004"} 0 + coredns_kubernetes_dns_programming_duration_seconds_bucket{service_kind="headless_with_selector",le="0.008"} 0 + coredns_kubernetes_dns_programming_duration_seconds_bucket{service_kind="headless_with_selector",le="0.016"} 0 + coredns_kubernetes_dns_programming_duration_seconds_bucket{service_kind="headless_with_selector",le="0.032"} 0 + coredns_kubernetes_dns_programming_duration_seconds_bucket{service_kind="headless_with_selector",le="0.064"} 0 + coredns_kubernetes_dns_programming_duration_seconds_bucket{service_kind="headless_with_selector",le="0.128"} 0 + coredns_kubernetes_dns_programming_duration_seconds_bucket{service_kind="headless_with_selector",le="0.256"} 0 + coredns_kubernetes_dns_programming_duration_seconds_bucket{service_kind="headless_with_selector",le="0.512"} 0 + coredns_kubernetes_dns_programming_duration_seconds_bucket{service_kind="headless_with_selector",le="1.024"} 1 + coredns_kubernetes_dns_programming_duration_seconds_bucket{service_kind="headless_with_selector",le="2.048"} 2 + coredns_kubernetes_dns_programming_duration_seconds_bucket{service_kind="headless_with_selector",le="4.096"} 2 + coredns_kubernetes_dns_programming_duration_seconds_bucket{service_kind="headless_with_selector",le="8.192"} 2 + coredns_kubernetes_dns_programming_duration_seconds_bucket{service_kind="headless_with_selector",le="16.384"} 2 + coredns_kubernetes_dns_programming_duration_seconds_bucket{service_kind="headless_with_selector",le="32.768"} 2 + coredns_kubernetes_dns_programming_duration_seconds_bucket{service_kind="headless_with_selector",le="65.536"} 2 + coredns_kubernetes_dns_programming_duration_seconds_bucket{service_kind="headless_with_selector",le="131.072"} 2 + coredns_kubernetes_dns_programming_duration_seconds_bucket{service_kind="headless_with_selector",le="262.144"} 2 + coredns_kubernetes_dns_programming_duration_seconds_bucket{service_kind="headless_with_selector",le="524.288"} 2 + coredns_kubernetes_dns_programming_duration_seconds_bucket{service_kind="headless_with_selector",le="+Inf"} 2 + coredns_kubernetes_dns_programming_duration_seconds_sum{service_kind="headless_with_selector"} 3 + coredns_kubernetes_dns_programming_duration_seconds_count{service_kind="headless_with_selector"} 2 ` if err := testutil.CollectAndCompare(DnsProgrammingLatency, strings.NewReader(expected)); err != nil { t.Error(err)