You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flink.apache.org by ch...@apache.org on 2019/01/16 12:10:23 UTC

[flink] branch master updated: [FLINK-11174][prometheus] Add option to not filter label values

This is an automated email from the ASF dual-hosted git repository.

chesnay pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/flink.git


The following commit(s) were added to refs/heads/master by this push:
     new 53034cd  [FLINK-11174][prometheus] Add option to not filter label values
53034cd is described below

commit 53034cd70e2a39e08c828bbc812ad8eef93e4f9d
Author: ZILI CHEN <wa...@gmail.com>
AuthorDate: Wed Jan 16 20:10:16 2019 +0800

    [FLINK-11174][prometheus] Add option to not filter label values
---
 ...prometheus_push_gateway_reporter_configuration.html |  5 +++++
 docs/monitoring/metrics.md                             |  1 +
 .../metrics/prometheus/AbstractPrometheusReporter.java | 18 ++++++++++++++++--
 .../prometheus/PrometheusPushGatewayReporter.java      |  2 ++
 .../PrometheusPushGatewayReporterOptions.java          | 13 +++++++++++++
 .../flink/metrics/prometheus/PrometheusReporter.java   |  2 ++
 6 files changed, 39 insertions(+), 2 deletions(-)

diff --git a/docs/_includes/generated/prometheus_push_gateway_reporter_configuration.html b/docs/_includes/generated/prometheus_push_gateway_reporter_configuration.html
index 2d14b50..5eee4c6 100644
--- a/docs/_includes/generated/prometheus_push_gateway_reporter_configuration.html
+++ b/docs/_includes/generated/prometheus_push_gateway_reporter_configuration.html
@@ -13,6 +13,11 @@
             <td>Specifies whether to delete metrics from the PushGateway on shutdown.</td>
         </tr>
         <tr>
+            <td><h5>filterLabelValueCharacters</h5></td>
+            <td style="word-wrap: break-word;">true</td>
+            <td>Specifies whether to filter label value characters. If enabled, all characters not matching [a-zA-Z0-9:_] will be removed, otherwise no characters will be removed. Before disabling this option please ensure that your label values meet the <a href="https://prometheus.io/docs/concepts/data_model/#metric-names-and-labels">Prometheus requirements</a>.</td>
+        </tr>
+        <tr>
             <td><h5>host</h5></td>
             <td style="word-wrap: break-word;">(none)</td>
             <td>The PushGateway server host.</td>
diff --git a/docs/monitoring/metrics.md b/docs/monitoring/metrics.md
index bfa0576..ae51f9e 100644
--- a/docs/monitoring/metrics.md
+++ b/docs/monitoring/metrics.md
@@ -652,6 +652,7 @@ of your Flink distribution.
 Parameters:
 
 - `port` - (optional) the port the Prometheus exporter listens on, defaults to [9249](https://github.com/prometheus/prometheus/wiki/Default-port-allocations). In order to be able to run several instances of the reporter on one host (e.g. when one TaskManager is colocated with the JobManager) it is advisable to use a port range like `9250-9260`.
+- `filterLabelValueCharacters` - (optional) Specifies whether to filter label value characters. If enabled, all characters not matching \[a-zA-Z0-9:_\] will be removed, otherwise no characters will be removed. Before disabling this option please ensure that your label values meet the [Prometheus requirements](https://prometheus.io/docs/concepts/data_model/#metric-names-and-labels).
 
 Example configuration:
 
diff --git a/flink-metrics/flink-metrics-prometheus/src/main/java/org/apache/flink/metrics/prometheus/AbstractPrometheusReporter.java b/flink-metrics/flink-metrics-prometheus/src/main/java/org/apache/flink/metrics/prometheus/AbstractPrometheusReporter.java
index 426cd4c..72bff5b 100644
--- a/flink-metrics/flink-metrics-prometheus/src/main/java/org/apache/flink/metrics/prometheus/AbstractPrometheusReporter.java
+++ b/flink-metrics/flink-metrics-prometheus/src/main/java/org/apache/flink/metrics/prometheus/AbstractPrometheusReporter.java
@@ -26,6 +26,7 @@ import org.apache.flink.metrics.Gauge;
 import org.apache.flink.metrics.Histogram;
 import org.apache.flink.metrics.Meter;
 import org.apache.flink.metrics.Metric;
+import org.apache.flink.metrics.MetricConfig;
 import org.apache.flink.metrics.MetricGroup;
 import org.apache.flink.metrics.reporter.MetricReporter;
 import org.apache.flink.runtime.metrics.groups.AbstractMetricGroup;
@@ -46,6 +47,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.regex.Pattern;
 
+import static org.apache.flink.metrics.prometheus.PrometheusPushGatewayReporterOptions.FILTER_LABEL_VALUE_CHARACTER;
 
 /**
  * base prometheus reporter for prometheus metrics.
@@ -75,6 +77,18 @@ public abstract class AbstractPrometheusReporter implements MetricReporter {
 		return UNALLOWED_CHAR_PATTERN.matcher(input).replaceAll("_");
 	}
 
+	private CharacterFilter labelValueCharactersFilter = CHARACTER_FILTER;
+
+	@Override
+	public void open(MetricConfig config) {
+		boolean filterLabelValueCharacters = config.getBoolean(
+			FILTER_LABEL_VALUE_CHARACTER.key(), FILTER_LABEL_VALUE_CHARACTER.defaultValue());
+
+		if (!filterLabelValueCharacters) {
+			labelValueCharactersFilter = input -> input;
+		}
+	}
+
 	@Override
 	public void close() {
 		CollectorRegistry.defaultRegistry.clear();
@@ -88,7 +102,7 @@ public abstract class AbstractPrometheusReporter implements MetricReporter {
 		for (final Map.Entry<String, String> dimension : group.getAllVariables().entrySet()) {
 			final String key = dimension.getKey();
 			dimensionKeys.add(CHARACTER_FILTER.filterCharacters(key.substring(1, key.length() - 1)));
-			dimensionValues.add(CHARACTER_FILTER.filterCharacters(dimension.getValue()));
+			dimensionValues.add(labelValueCharactersFilter.filterCharacters(dimension.getValue()));
 		}
 
 		final String scopedMetricName = getScopedName(metricName, group);
@@ -173,7 +187,7 @@ public abstract class AbstractPrometheusReporter implements MetricReporter {
 
 		List<String> dimensionValues = new LinkedList<>();
 		for (final Map.Entry<String, String> dimension : group.getAllVariables().entrySet()) {
-			dimensionValues.add(CHARACTER_FILTER.filterCharacters(dimension.getValue()));
+			dimensionValues.add(labelValueCharactersFilter.filterCharacters(dimension.getValue()));
 		}
 
 		final String scopedMetricName = getScopedName(metricName, group);
diff --git a/flink-metrics/flink-metrics-prometheus/src/main/java/org/apache/flink/metrics/prometheus/PrometheusPushGatewayReporter.java b/flink-metrics/flink-metrics-prometheus/src/main/java/org/apache/flink/metrics/prometheus/PrometheusPushGatewayReporter.java
index 164eaf3..ac09c33 100644
--- a/flink-metrics/flink-metrics-prometheus/src/main/java/org/apache/flink/metrics/prometheus/PrometheusPushGatewayReporter.java
+++ b/flink-metrics/flink-metrics-prometheus/src/main/java/org/apache/flink/metrics/prometheus/PrometheusPushGatewayReporter.java
@@ -48,6 +48,8 @@ public class PrometheusPushGatewayReporter extends AbstractPrometheusReporter im
 
 	@Override
 	public void open(MetricConfig config) {
+		super.open(config);
+
 		String host = config.getString(HOST.key(), HOST.defaultValue());
 		int port = config.getInteger(PORT.key(), PORT.defaultValue());
 		String configuredJobName = config.getString(JOB_NAME.key(), JOB_NAME.defaultValue());
diff --git a/flink-metrics/flink-metrics-prometheus/src/main/java/org/apache/flink/metrics/prometheus/PrometheusPushGatewayReporterOptions.java b/flink-metrics/flink-metrics-prometheus/src/main/java/org/apache/flink/metrics/prometheus/PrometheusPushGatewayReporterOptions.java
index 74fe7cb..8f1713b 100644
--- a/flink-metrics/flink-metrics-prometheus/src/main/java/org/apache/flink/metrics/prometheus/PrometheusPushGatewayReporterOptions.java
+++ b/flink-metrics/flink-metrics-prometheus/src/main/java/org/apache/flink/metrics/prometheus/PrometheusPushGatewayReporterOptions.java
@@ -20,6 +20,8 @@ package org.apache.flink.metrics.prometheus;
 
 import org.apache.flink.configuration.ConfigOption;
 import org.apache.flink.configuration.ConfigOptions;
+import org.apache.flink.configuration.description.Description;
+import org.apache.flink.configuration.description.LinkElement;
 
 /**
  * Config options for the {@link PrometheusPushGatewayReporter}.
@@ -50,4 +52,15 @@ public class PrometheusPushGatewayReporterOptions {
 		.key("deleteOnShutdown")
 		.defaultValue(true)
 		.withDescription("Specifies whether to delete metrics from the PushGateway on shutdown.");
+
+	public static final ConfigOption<Boolean> FILTER_LABEL_VALUE_CHARACTER = ConfigOptions
+		.key("filterLabelValueCharacters")
+		.defaultValue(true)
+		.withDescription(Description.builder()
+			.text("Specifies whether to filter label value characters." +
+				" If enabled, all characters not matching [a-zA-Z0-9:_] will be removed," +
+				" otherwise no characters will be removed." +
+				" Before disabling this option please ensure that your" +
+				" label values meet the %s.", LinkElement.link("https://prometheus.io/docs/concepts/data_model/#metric-names-and-labels", "Prometheus requirements"))
+			.build());
 }
diff --git a/flink-metrics/flink-metrics-prometheus/src/main/java/org/apache/flink/metrics/prometheus/PrometheusReporter.java b/flink-metrics/flink-metrics-prometheus/src/main/java/org/apache/flink/metrics/prometheus/PrometheusReporter.java
index 190e120..4697685 100644
--- a/flink-metrics/flink-metrics-prometheus/src/main/java/org/apache/flink/metrics/prometheus/PrometheusReporter.java
+++ b/flink-metrics/flink-metrics-prometheus/src/main/java/org/apache/flink/metrics/prometheus/PrometheusReporter.java
@@ -51,6 +51,8 @@ public class PrometheusReporter extends AbstractPrometheusReporter {
 
 	@Override
 	public void open(MetricConfig config) {
+		super.open(config);
+
 		String portsConfig = config.getString(ARG_PORT, DEFAULT_PORT);
 		Iterator<Integer> ports = NetUtils.getPortRangeFromString(portsConfig);