From af1ed2b5528a873904735adf3fec086deeaac10a Mon Sep 17 00:00:00 2001 From: Haissam Kaj Date: Tue, 18 Apr 2017 20:32:50 +0000 Subject: [PATCH] Add more kube-state-metrics --- .../ci/fixtures/prometheus/protobuf.bin | Bin 196665 -> 61971 bytes kubernetes_state/test_kubernetes_state.py | 72 +++++++++++++----- 2 files changed, 53 insertions(+), 19 deletions(-) diff --git a/kubernetes_state/ci/fixtures/prometheus/protobuf.bin b/kubernetes_state/ci/fixtures/prometheus/protobuf.bin index 5bf70c42db860baac09520890042348f05b5bc0c..25ddee8829e677e8ff2b488ec1b77ec91b234515 100644 GIT binary patch literal 61971 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 vcaO7R((Nz($_JkR;}8BpP1Plo%nh`zJ2eR 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 diff --git a/kubernetes_state/test_kubernetes_state.py b/kubernetes_state/test_kubernetes_state.py index 7771ce3b9418b..749cd5b3fee5f 100644 --- a/kubernetes_state/test_kubernetes_state.py +++ b/kubernetes_state/test_kubernetes_state.py @@ -16,26 +16,51 @@ class TestKubernetesState(AgentCheckTest): CHECK_NAME = 'kubernetes_state' METRICS = [ - NAMESPACE + '.node.cpu_capacity', - NAMESPACE + '.node.memory_capacity', - NAMESPACE + '.node.pods_capacity', - NAMESPACE + '.node.cpu_allocatable', - NAMESPACE + '.node.memory_allocatable', - NAMESPACE + '.node.pods_allocatable', - NAMESPACE + '.node.status', - NAMESPACE + '.container.cpu_requested', - NAMESPACE + '.container.memory_requested', - NAMESPACE + '.container.cpu_limit', - NAMESPACE + '.container.memory_limit', - NAMESPACE + '.container.restarts', - NAMESPACE + '.deployment.replicas_available', - NAMESPACE + '.deployment.replicas_unavailable', - NAMESPACE + '.deployment.replicas_desired', - NAMESPACE + '.deployment.replicas_updated', - ] + # nodes + NAMESPACE + '.node.cpu_capacity', + NAMESPACE + '.node.memory_capacity', + NAMESPACE + '.node.pods_capacity', + NAMESPACE + '.node.cpu_allocatable', + NAMESPACE + '.node.memory_allocatable', + NAMESPACE + '.node.pods_allocatable', + # deployments + NAMESPACE + '.deployment.replicas', + NAMESPACE + '.deployment.replicas_available', + NAMESPACE + '.deployment.replicas_unavailable', + NAMESPACE + '.deployment.replicas_updated', + NAMESPACE + '.deployment.replicas_desired', + NAMESPACE + '.deployment.paused', + NAMESPACE + '.deployment.rollingupdate.max_unavailable', + # daemonsets + NAMESPACE + '.daemonset.scheduled', + NAMESPACE + '.daemonset.misscheduled', + NAMESPACE + '.daemonset.desired', + # pods + NAMESPACE + '.pod.ready', + NAMESPACE + '.pod.scheduled', + NAMESPACE + '.pod.container.ready', + NAMESPACE + '.pod.container.running', + NAMESPACE + '.pod.container.terminated', + NAMESPACE + '.pod.container.waiting', + NAMESPACE + '.container.restarts', + NAMESPACE + '.container.cpu_requested', + NAMESPACE + '.container.memory_requested', + NAMESPACE + '.container.cpu_limit', + NAMESPACE + '.container.memory_limit', + # replicasets + NAMESPACE + '.replicaset.replicas', + NAMESPACE + '.replicaset.fully_labeled_replicas', + NAMESPACE + '.replicaset.replicas_ready', + NAMESPACE + '.replicaset.replicas_desired', + ] ZERO_METRICS = [ NAMESPACE + '.deployment.replicas_unavailable', + NAMESPACE + '.deployment.paused', + NAMESPACE + '.daemonset.misscheduled', + NAMESPACE + '.pod.container.terminated', + NAMESPACE + '.pod.container.waiting', + ] def test__get_kube_state(self): @@ -93,13 +118,22 @@ def test__update_kube_state_metrics(self): self.assertServiceCheck(NAMESPACE + '.node.ready', self.check.OK) self.assertServiceCheck(NAMESPACE + '.node.out_of_disk', self.check.OK) self.assertServiceCheck(NAMESPACE + '.pod.phase.running', self.check.OK) - self.assertServiceCheck(NAMESPACE + '.pod.phase.failed', self.check.CRITICAL) + self.assertServiceCheck(NAMESPACE + '.pod.phase.pending', self.check.WARNING) # TODO: uncomment when any of these are in the test protobuf.bin - # self.assertServiceCheck(NAMESPACE + '.pod.phase.pending', self.check.WARNING) # self.assertServiceCheck(NAMESPACE + '.pod.phase.succeeded', self.check.OK) + # self.assertServiceCheck(NAMESPACE + '.pod.phase.failed', self.check.CRITICAL) # self.assertServiceCheck(NAMESPACE + '.pod.phase.unknown', self.check.UNKNOWN) for metric in self.METRICS: self.assertMetric(metric) if metric not in self.ZERO_METRICS: self.assertMetricNotAllZeros(metric) + + self.assert_resourcequota() + + def assert_resourcequota(self): + """ The metric name is created dynamically so we just check some exist. """ + for m in self.metrics: + if 'kubernetes_state.resourcequota.' in m[0]: + return True + return False