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 telemetry metrics counter by ksm collector #4125

Merged
merged 3 commits into from
Jul 18, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
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 @@ -71,7 +71,7 @@ def _finalize_tags_to_submit(self, _tags, metric_name, val, metric, custom_tags=
"""
return _tags

def _filter_metric(self, metric):
def _filter_metric(self, metric, scraper_config):
"""
Used to filter metrics at the begining of the processing, by default no metric is filtered
"""
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -340,13 +340,15 @@ def _send_telemetry_gauge(self, metric_name, val, scraper_config):
tags.extend(scraper_config['_metric_tags'])
self.gauge(metric_name_with_namespace, val, tags=tags)

def _send_telemetry_counter(self, metric_name, val, scraper_config):
def _send_telemetry_counter(self, metric_name, val, scraper_config, extra_tags=None):
if scraper_config['telemetry']:
metric_name_with_namespace = self._telemetry_metric_name_with_namespace(metric_name, scraper_config)
# Determine the tags to send
custom_tags = scraper_config['custom_tags']
tags = list(custom_tags)
tags.extend(scraper_config['_metric_tags'])
if extra_tags:
tags.extend(extra_tags)
self.count(metric_name_with_namespace, val, tags=tags)

def _store_labels(self, metric, scraper_config):
Expand Down Expand Up @@ -413,7 +415,7 @@ def process_metric(self, metric, scraper_config, metric_transformers=None):

self._send_telemetry_counter(self.TELEMETRY_COUNTER_METRICS_PROCESS_COUNT, 1, scraper_config)

if self._filter_metric(metric):
if self._filter_metric(metric, scraper_config):
return # Ignore the metric

# Filter metric to see if we can enrich with joined labels
Expand Down
2 changes: 1 addition & 1 deletion datadog_checks_base/tests/test_openmetrics.py
Original file line number Diff line number Diff line change
Expand Up @@ -1562,7 +1562,7 @@ def mock_filter_get():


class FilterOpenMetricsCheck(OpenMetricsBaseCheck):
def _filter_metric(self, metric):
def _filter_metric(self, metric, scraper_config):
return metric.documentation.startswith("(Deprecated)")


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -154,7 +154,7 @@ def check(self, instance):
leader_config["tags"] = instance.get("tags", [])
self.check_election_status(leader_config)

def _ignore_deprecated_metric(self, metric):
def _ignore_deprecated_metric(self, metric, scraper_config):
return metric.documentation.startswith("(Deprecated)")

def _tag_and_submit(self, metric, scraper_config, metric_name, tag_name, tag_value_trim):
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,25 @@ def check(self, instance):
for job_tags, job_count in iteritems(self.job_failed_count):
self.monotonic_count(scraper_config['namespace'] + '.job.failed', job_count, list(job_tags))

def _filter_metric(self, metric, scraper_config):
if scraper_config['telemetry']:
# name is like "kube_pod_execution_duration"
name_part = metric.name.split("_", 3)
if len(name_part) < 2:
return False
family = name_part[1]
tags = ["name:" + family]
for sample in metric.samples:
if "namespace" in sample[self.SAMPLE_LABELS]:
ns = sample[self.SAMPLE_LABELS]["namespace"]
tags.append("kube_namespace:" + ns)
break
self._send_telemetry_counter(
'collector.metrics.count', len(metric.samples), scraper_config, extra_tags=tags
)
# do not filter
return False

def _create_kubernetes_state_prometheus_instance(self, instance):
"""
Set up the kubernetes_state instance so it can be used in OpenMetricsBaseCheck
Expand Down
6 changes: 6 additions & 0 deletions kubernetes_state/metadata.csv
Original file line number Diff line number Diff line change
Expand Up @@ -98,3 +98,9 @@ kubernetes_state.statefulset.replicas_desired,gauge,,,,The number of desired rep
kubernetes_state.statefulset.replicas_current,gauge,,,,The number of current replicas per StatefulSet,0,kubernetes,k8s_state.statefulset.replicas_current
kubernetes_state.statefulset.replicas_ready,gauge,,,,The number of ready replicas per StatefulSet,0,kubernetes,k8s_state.statefulset.replicas_ready
kubernetes_state.statefulset.replicas_updated,gauge,,,,The number of updated replicas per StatefulSet,0,kubernetes,k8s_state.statefulset.replicas_updated
kubernetes_state.telemetry.payload.size,gauge,,byte,,The message size received from kube-state-metrics,0,kubernetes,k8s_state.telemetry.payload.size
kubernetes_state.telemetry.metrics.processed.count,counter,,,,The number of metrics processed,0,kubernetes,k8s_state.telemetry.metrics.processed.count
kubernetes_state.telemetry.metrics.input.count,counter,,,,The number of metrics received,0,kubernetes,k8s_state.telemetry.metrics.input.count
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
10 changes: 10 additions & 0 deletions kubernetes_state/tests/test_kubernetes_state.py
Original file line number Diff line number Diff line change
Expand Up @@ -399,3 +399,13 @@ def test_telemetry(aggregator, instance):
aggregator.assert_metric(NAMESPACE + '.telemetry.metrics.input.count', tags=['optional:tag1'], value=230.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=76.0)
aggregator.assert_metric(
NAMESPACE + '.telemetry.collector.metrics.count',
tags=['name:pod', 'kube_namespace:default', 'optional:tag1'],
value=600.0,
)
aggregator.assert_metric(
NAMESPACE + '.telemetry.collector.metrics.count',
tags=['name:hpa', 'kube_namespace:ns1', 'optional:tag1'],
value=8.0,
)