Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add VPA metrics to kubernetes_state integration #4353

Merged
merged 3 commits into from
Aug 22, 2019
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -194,6 +194,11 @@ def _create_kubernetes_state_prometheus_instance(self, instance):
'kube_statefulset_status_replicas_current': 'statefulset.replicas_current',
'kube_statefulset_status_replicas_ready': 'statefulset.replicas_ready',
'kube_statefulset_status_replicas_updated': 'statefulset.replicas_updated',
'kube_verticalpodautoscaler_status_recommendation_containerrecommendations_lowerbound' : 'vpa.lower_bound',
dturn marked this conversation as resolved.
Show resolved Hide resolved
'kube_verticalpodautoscaler_status_recommendation_containerrecommendations_target' : 'vpa.target',
dturn marked this conversation as resolved.
Show resolved Hide resolved
'kube_verticalpodautoscaler_status_recommendation_containerrecommendations_uncappedtarget' : 'vpa.uncapped_target',
dturn marked this conversation as resolved.
Show resolved Hide resolved
'kube_verticalpodautoscaler_status_recommendation_containerrecommendations_upperbound' : 'vpa.upperbound',
dturn marked this conversation as resolved.
Show resolved Hide resolved
'kube_verticalpodautoscaler_spec_updatepolicy_updatemode' : 'vpa.update_mode',
}
],
'ignore_metrics': [
Expand Down Expand Up @@ -257,6 +262,7 @@ def _create_kubernetes_state_prometheus_instance(self, instance):
'kube_job_status_active',
'kube_job_status_completion_time', # We could compute the duration=completion-start as a gauge
'kube_job_status_start_time',
'kube_verticalpodautoscaler_labels'
dturn marked this conversation as resolved.
Show resolved Hide resolved
],
'label_joins': {
'kube_pod_info': {'label_to_match': 'pod', 'labels_to_get': ['node']},
Expand Down
5 changes: 5 additions & 0 deletions kubernetes_state/metadata.csv
Original file line number Diff line number Diff line change
Expand Up @@ -104,3 +104,8 @@ kubernetes_state.telemetry.metrics.input.count,counter,,,,The number of metrics
kubernetes_state.telemetry.metrics.blacklist.count,counter,,,,The number of metrics blacklisted by the check,0,kubernetes,k8s_state.telemetry.metrics.blacklist.count
kubernetes_state.telemetry.metrics.ignored.count,counter,,,,The number of metrics ignored by the check,0,kubernetes,k8s_state.telemetry.metrics.ignored.count
kubernetes_state.telemetry.collector.metrics.count,counter,,,,The number of metrics by collector (kubernetes object kind) by kubernetes namespaces,0,kubernetes,k8s_state.telemetry.collector.metrics.count
kubernetes_state.vpa.lower_bound,,,,The vpa lower bound recommendation,0,kubernetes,k8s_state.vpa.lower_bound
dturn marked this conversation as resolved.
Show resolved Hide resolved
kubernetes_state.vpa.target,,,,The vpa target recommendation,0,kubernetes,k8s_state.vpa.target
dturn marked this conversation as resolved.
Show resolved Hide resolved
kubernetes_state.vpa.uncapped_target,,,,The vpa uncapped recommendation recommendation,0,kubernetes,k8s_state.vpa.uncapped_target
dturn marked this conversation as resolved.
Show resolved Hide resolved
kubernetes_state.vpa.upperbound,,,,The vpa upper bound recommendation,0,kubernetes,k8s_state.vpa.upper_bound
dturn marked this conversation as resolved.
Show resolved Hide resolved
kubernetes_state.vpa.update_mode,,,,The vpa update mode,0,kubernetes,k8s_state.vpa.update_mode
dturn marked this conversation as resolved.
Show resolved Hide resolved
18 changes: 18 additions & 0 deletions kubernetes_state/tests/fixtures/prometheus.txt
Original file line number Diff line number Diff line change
Expand Up @@ -874,3 +874,21 @@ kube_hpa_status_condition{namespace="default",hpa="myhpa",condition="unknown",st
kube_hpa_status_condition{namespace="default",hpa="myhpa",condition="true",status="ScalingLimited"} 1
kube_hpa_status_condition{namespace="default",hpa="myhpa",condition="false",status="ScalingLimited"} 0
kube_hpa_status_condition{namespace="default",hpa="myhpa",condition="unknown",status="ScalingLimited"} 0
# HELP kube_verticalpodautoscaler_labels Kubernetes labels converted to Prometheus labels.
# TYPE kube_verticalpodautoscaler_labels gauge
kube_verticalpodautoscaler_labels{label_app="foobar",namespace="ns1",target_api_version="extensions/v1beta1",target_kind="Deployment",target_name="deployment1",verticalpodautoscaler="vpa1"} 1
# HELP kube_verticalpodautoscaler_spec_updatepolicy_updatemode Update mode of the VPA.
# TYPE kube_verticalpodautoscaler_spec_updatepolicy_updatemode gauge
kube_verticalpodautoscaler_spec_updatepolicy_updatemode{namespace="default",target_api_version="extensions/v1beta1",target_kind="Deployment",target_name="deployment1",update_mode="Recreate",verticalpodautoscaler="vpa1"} 1
# HELP kube_verticalpodautoscaler_status_recommendation_containerrecommendations_lowerbound Minimum resources the container can use before the VPA updater evicts it.
# TYPE kube_verticalpodautoscaler_status_recommendation_containerrecommendations_lowerbound gauge
kube_verticalpodautoscaler_status_recommendation_containerrecommendations_lowerbound{container="container1",namespace="default",resource="cpu",target_api_version="extensions/v1beta1",target_kind="Deployment",target_name="deployment1",unit="core",verticalpodautoscaler="vpa1"} 1
# HELP kube_verticalpodautoscaler_status_recommendation_containerrecommendations_upperbound Maximum resources the container can use before the VPA updater evicts it.
# TYPE kube_verticalpodautoscaler_status_recommendation_containerrecommendations_upperbound gauge
kube_verticalpodautoscaler_status_recommendation_containerrecommendations_upperbound{container="container1",namespace="default",resource="cpu",target_api_version="extensions/v1beta1",target_kind="Deployment",target_name="deployment1",unit="core",verticalpodautoscaler="vpa1"} 4
# HELP kube_verticalpodautoscaler_status_recommendation_containerrecommendations_target Target resources the VPA recommends for the container.
# TYPE kube_verticalpodautoscaler_status_recommendation_containerrecommendations_target gauge
kube_verticalpodautoscaler_status_recommendation_containerrecommendations_target{container="container1",namespace="default",resource="cpu",target_api_version="extensions/v1beta1",target_kind="Deployment",target_name="deployment1",unit="core",verticalpodautoscaler="vpa1"} 3
# HELP kube_verticalpodautoscaler_status_recommendation_containerrecommendations_uncappedtarget Target resources the VPA recommends for the container ignoring bounds.
# TYPE kube_verticalpodautoscaler_status_recommendation_containerrecommendations_uncappedtarget gauge
kube_verticalpodautoscaler_status_recommendation_containerrecommendations_uncappedtarget{container="container1",namespace="default",resource="cpu",target_api_version="extensions/v1beta1",target_kind="Deployment",target_name="deployment1",unit="core",verticalpodautoscaler="vpa1"} 6
14 changes: 10 additions & 4 deletions kubernetes_state/tests/test_kubernetes_state.py
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,12 @@
# jobs
NAMESPACE + '.job.failed',
NAMESPACE + '.job.succeeded',
# vpa
NAMESPACE + '.vpa.lower_bound',
NAMESPACE + '.vpa.target',
NAMESPACE + '.vpa.uncapped_target',
NAMESPACE + '.vpa.upperbound',
NAMESPACE + '.vpa.update_mode',
]

TAGS = {
Expand Down Expand Up @@ -394,11 +400,11 @@ def test_telemetry(aggregator, instance):

for _ in range(2):
check.check(instance)
aggregator.assert_metric(NAMESPACE + '.telemetry.payload.size', tags=['optional:tag1'], value=87416.0)
aggregator.assert_metric(NAMESPACE + '.telemetry.metrics.processed.count', tags=['optional:tag1'], value=956.0)
aggregator.assert_metric(NAMESPACE + '.telemetry.metrics.input.count', tags=['optional:tag1'], value=1270.0)
aggregator.assert_metric(NAMESPACE + '.telemetry.payload.size', tags=['optional:tag1'], value=90270.0)
aggregator.assert_metric(NAMESPACE + '.telemetry.metrics.processed.count', tags=['optional:tag1'], value=966.0)
aggregator.assert_metric(NAMESPACE + '.telemetry.metrics.input.count', tags=['optional:tag1'], value=1282.0)
aggregator.assert_metric(NAMESPACE + '.telemetry.metrics.blacklist.count', tags=['optional:tag1'], value=24.0)
aggregator.assert_metric(NAMESPACE + '.telemetry.metrics.ignored.count', tags=['optional:tag1'], value=314.0)
aggregator.assert_metric(NAMESPACE + '.telemetry.metrics.ignored.count', tags=['optional:tag1'], value=316.0)
aggregator.assert_metric(
NAMESPACE + '.telemetry.collector.metrics.count',
tags=['resource_name:pod', 'resource_namespace:default', 'optional:tag1'],
Expand Down