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);