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 <wander4...@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);