From c7de58062343a97aa7683c4656b376f99be60f1c Mon Sep 17 00:00:00 2001 From: Vishnu kannan Date: Wed, 20 Jan 2016 14:33:05 -0800 Subject: [PATCH] Update the Metrics test to only require the presense of a list of needed metrics, and not fail if any new metrics are added. Signed-off-by: Vishnu kannan --- pkg/metrics/kubelet_metrics.go | 10 ++++++---- pkg/metrics/metrics_grabber.go | 10 +++++----- test/e2e/metrics_grabber_test.go | 25 +++++++++++++++---------- 3 files changed, 26 insertions(+), 19 deletions(-) diff --git a/pkg/metrics/kubelet_metrics.go b/pkg/metrics/kubelet_metrics.go index 441b4e94ee5..4cacfd09e1b 100644 --- a/pkg/metrics/kubelet_metrics.go +++ b/pkg/metrics/kubelet_metrics.go @@ -24,7 +24,7 @@ import ( "github.com/prometheus/common/model" ) -var KnownKubeletMetrics = map[string][]string{ +var NecessaryKubeletMetrics = map[string][]string{ "cadvisor_version_info": {"cadvisorRevision", "cadvisorVersion", "dockerVersion", "kernelVersion", "osVersion"}, "container_cpu_system_seconds_total": {"id", "image", "kubernetes_container_name", "kubernetes_namespace", "kubernetes_pod_name", "name"}, "container_cpu_usage_seconds_total": {"id", "image", "kubernetes_container_name", "kubernetes_namespace", "kubernetes_pod_name", "name", "cpu"}, @@ -43,6 +43,8 @@ var KnownKubeletMetrics = map[string][]string{ "container_fs_writes_merged_total": {"device", "id", "image", "kubernetes_container_name", "kubernetes_namespace", "kubernetes_pod_name", "name"}, "container_fs_writes_total": {"device", "id", "image", "kubernetes_container_name", "kubernetes_namespace", "kubernetes_pod_name", "name"}, "container_last_seen": {"id", "image", "kubernetes_container_name", "kubernetes_namespace", "kubernetes_pod_name", "name"}, + "container_memory_cache": {}, + "container_memory_rss": {}, "container_memory_failcnt": {"id", "image", "kubernetes_container_name", "kubernetes_namespace", "kubernetes_pod_name", "name"}, "container_memory_failures_total": {"id", "image", "kubernetes_container_name", "kubernetes_namespace", "kubernetes_pod_name", "name", "scope", "type"}, "container_memory_usage_bytes": {"id", "image", "kubernetes_container_name", "kubernetes_namespace", "kubernetes_pod_name", "name"}, @@ -116,15 +118,15 @@ func (m *KubeletMetrics) Equal(o KubeletMetrics) bool { func NewKubeletMetrics() KubeletMetrics { result := NewMetrics() - for metric := range KnownKubeletMetrics { + for metric := range NecessaryKubeletMetrics { result[metric] = make(model.Samples, 0) } return KubeletMetrics(result) } -func parseKubeletMetrics(data string, unknownMetrics sets.String) (KubeletMetrics, error) { +func parseKubeletMetrics(data string) (KubeletMetrics, error) { result := NewKubeletMetrics() - if err := parseMetrics(data, KnownKubeletMetrics, (*Metrics)(&result), unknownMetrics); err != nil { + if err := parseMetrics(data, NecessaryKubeletMetrics, (*Metrics)(&result), nil); err != nil { return KubeletMetrics{}, err } return result, nil diff --git a/pkg/metrics/metrics_grabber.go b/pkg/metrics/metrics_grabber.go index 04f5324d9c1..62eabfffb85 100644 --- a/pkg/metrics/metrics_grabber.go +++ b/pkg/metrics/metrics_grabber.go @@ -85,7 +85,7 @@ func NewMetricsGrabber(c *client.Client, kubelets bool, scheduler bool, controll }, nil } -func (g *MetricsGrabber) GrabFromKubelet(nodeName string, unknownMetrics sets.String) (KubeletMetrics, error) { +func (g *MetricsGrabber) GrabFromKubelet(nodeName string) (KubeletMetrics, error) { nodes, err := g.client.Nodes().List(api.ListOptions{FieldSelector: fields.Set{client.ObjectNameField: nodeName}.AsSelector()}) if err != nil { return KubeletMetrics{}, err @@ -94,10 +94,10 @@ func (g *MetricsGrabber) GrabFromKubelet(nodeName string, unknownMetrics sets.St return KubeletMetrics{}, fmt.Errorf("Error listing nodes with name %v, got %v", nodeName, nodes.Items) } kubeletPort := nodes.Items[0].Status.DaemonEndpoints.KubeletEndpoint.Port - return g.grabFromKubeletInternal(nodeName, kubeletPort, unknownMetrics) + return g.grabFromKubeletInternal(nodeName, kubeletPort) } -func (g *MetricsGrabber) grabFromKubeletInternal(nodeName string, kubeletPort int, unknownMetrics sets.String) (KubeletMetrics, error) { +func (g *MetricsGrabber) grabFromKubeletInternal(nodeName string, kubeletPort int) (KubeletMetrics, error) { if kubeletPort <= 0 || kubeletPort > 65535 { return KubeletMetrics{}, fmt.Errorf("Invalid Kubelet port %v. Skipping Kubelet's metrics gathering.", kubeletPort) } @@ -105,7 +105,7 @@ func (g *MetricsGrabber) grabFromKubeletInternal(nodeName string, kubeletPort in if err != nil { return KubeletMetrics{}, err } - return parseKubeletMetrics(output, unknownMetrics) + return parseKubeletMetrics(output) } func (g *MetricsGrabber) GrabFromScheduler(unknownMetrics sets.String) (SchedulerMetrics, error) { @@ -173,7 +173,7 @@ func (g *MetricsGrabber) Grab(unknownMetrics sets.String) (MetricsCollection, er } else { for _, node := range nodes.Items { kubeletPort := node.Status.DaemonEndpoints.KubeletEndpoint.Port - metrics, err := g.grabFromKubeletInternal(node.Name, kubeletPort, nil) + metrics, err := g.grabFromKubeletInternal(node.Name, kubeletPort) if err != nil { errs = append(errs, err) } diff --git a/test/e2e/metrics_grabber_test.go b/test/e2e/metrics_grabber_test.go index 69ee2ec9a34..e0f6537abe9 100644 --- a/test/e2e/metrics_grabber_test.go +++ b/test/e2e/metrics_grabber_test.go @@ -47,7 +47,7 @@ func validateLabelSet(labelSet map[string][]string, data metrics.Metrics, invali invalidLabel = false } } - if invalidLabel { + if invalidLabel && invalidLabels != nil { if _, ok := invalidLabels[metric]; !ok { invalidLabels[metric] = sets.NewString() } @@ -59,13 +59,21 @@ func validateLabelSet(labelSet map[string][]string, data metrics.Metrics, invali } } +func checkNecessaryMetrics(response metrics.Metrics, necessaryMetrics map[string][]string) { + missingLabels := make(map[string]sets.String) + validateLabelSet(metrics.CommonMetrics, response, nil, missingLabels) + validateLabelSet(necessaryMetrics, response, nil, missingLabels) + + Expect(missingLabels).To(BeEmpty()) +} + func checkMetrics(response metrics.Metrics, assumedMetrics map[string][]string) { invalidLabels := make(map[string]sets.String) - unknownLabels := make(map[string]sets.String) - validateLabelSet(metrics.CommonMetrics, response, invalidLabels, unknownLabels) - validateLabelSet(assumedMetrics, response, invalidLabels, unknownLabels) + missingLabels := make(map[string]sets.String) + validateLabelSet(metrics.CommonMetrics, response, invalidLabels, missingLabels) + validateLabelSet(assumedMetrics, response, invalidLabels, missingLabels) - Expect(unknownLabels).To(BeEmpty()) + Expect(missingLabels).To(BeEmpty()) Expect(invalidLabels).To(BeEmpty()) } @@ -97,12 +105,9 @@ var _ = Describe("MetricsGrabber", func() { By("Connecting proxying to Node through the API server") nodes := ListSchedulableNodesOrDie(c) Expect(nodes.Items).NotTo(BeEmpty()) - unknownMetrics := sets.NewString() - response, err := grabber.GrabFromKubelet(nodes.Items[0].Name, unknownMetrics) + response, err := grabber.GrabFromKubelet(nodes.Items[0].Name) expectNoError(err) - Expect(unknownMetrics).To(BeEmpty()) - - checkMetrics(metrics.Metrics(response), metrics.KnownKubeletMetrics) + checkNecessaryMetrics(metrics.Metrics(response), metrics.NecessaryKubeletMetrics) } })