Allow to configure Prometheus HTTP Server bind address
Descriptions of the changes in this PR:
make prometheus bind addr can cofigure
### Motivation
For security, make prometheus bind addr can config.
For compatibility, make default value is 0.0.0.0
### Changes
make prometheus bind addr can cofigure
Reviewers: Enrico Olivelli <eolivelli@gmail.com>, Sijie Guo <sijie@apache.org>
This closes #2543 from Shoothzj/promethes_addr
diff --git a/bookkeeper-stats-providers/prometheus-metrics-provider/src/main/java/org/apache/bookkeeper/stats/prometheus/PrometheusMetricsProvider.java b/bookkeeper-stats-providers/prometheus-metrics-provider/src/main/java/org/apache/bookkeeper/stats/prometheus/PrometheusMetricsProvider.java
index 0b4c0c2..f999068 100644
--- a/bookkeeper-stats-providers/prometheus-metrics-provider/src/main/java/org/apache/bookkeeper/stats/prometheus/PrometheusMetricsProvider.java
+++ b/bookkeeper-stats-providers/prometheus-metrics-provider/src/main/java/org/apache/bookkeeper/stats/prometheus/PrometheusMetricsProvider.java
@@ -63,6 +63,9 @@
public static final String PROMETHEUS_STATS_HTTP_ENABLE = "prometheusStatsHttpEnable";
public static final boolean DEFAULT_PROMETHEUS_STATS_HTTP_ENABLE = true;
+ public static final String PROMETHEUS_STATS_HTTP_ADDRESS = "prometheusStatsHttpAddress";
+ public static final String DEFAULT_PROMETHEUS_STATS_HTTP_ADDR = "0.0.0.0";
+
public static final String PROMETHEUS_STATS_HTTP_PORT = "prometheusStatsHttpPort";
public static final int DEFAULT_PROMETHEUS_STATS_HTTP_PORT = 8000;
@@ -124,8 +127,9 @@
boolean bkHttpServerEnabled = conf.getBoolean("httpServerEnabled", false);
// only start its own http server when prometheus http is enabled and bk http server is not enabled.
if (httpEnabled && !bkHttpServerEnabled) {
+ String httpAddr = conf.getString(PROMETHEUS_STATS_HTTP_ADDRESS, DEFAULT_PROMETHEUS_STATS_HTTP_ADDR);
int httpPort = conf.getInt(PROMETHEUS_STATS_HTTP_PORT, DEFAULT_PROMETHEUS_STATS_HTTP_PORT);
- InetSocketAddress httpEndpoint = InetSocketAddress.createUnresolved("0.0.0.0", httpPort);
+ InetSocketAddress httpEndpoint = InetSocketAddress.createUnresolved(httpAddr, httpPort);
this.server = new Server(httpEndpoint);
ServletContextHandler context = new ServletContextHandler();
context.setContextPath("/");
diff --git a/bookkeeper-stats-providers/prometheus-metrics-provider/src/test/java/org/apache/bookkeeper/stats/prometheus/TestPrometheusMetricsProvider.java b/bookkeeper-stats-providers/prometheus-metrics-provider/src/test/java/org/apache/bookkeeper/stats/prometheus/TestPrometheusMetricsProvider.java
index 8e90e04..5fd34a3 100644
--- a/bookkeeper-stats-providers/prometheus-metrics-provider/src/test/java/org/apache/bookkeeper/stats/prometheus/TestPrometheusMetricsProvider.java
+++ b/bookkeeper-stats-providers/prometheus-metrics-provider/src/test/java/org/apache/bookkeeper/stats/prometheus/TestPrometheusMetricsProvider.java
@@ -90,6 +90,21 @@
}
@Test
+ public void testStartWithHttpSpecifyAddr() {
+ PropertiesConfiguration config = new PropertiesConfiguration();
+ config.setProperty(PrometheusMetricsProvider.PROMETHEUS_STATS_HTTP_ENABLE, true);
+ config.setProperty(PrometheusMetricsProvider.PROMETHEUS_STATS_HTTP_PORT, 0); // ephemeral
+ config.setProperty(PrometheusMetricsProvider.PROMETHEUS_STATS_HTTP_ADDRESS, "127.0.0.1");
+ PrometheusMetricsProvider provider = new PrometheusMetricsProvider();
+ try {
+ provider.start(config);
+ assertNotNull(provider.server);
+ } finally {
+ provider.stop();
+ }
+ }
+
+ @Test
public void testCounter() {
LongAdderCounter counter = new LongAdderCounter();
long value = counter.get();
diff --git a/conf/bk_server.conf b/conf/bk_server.conf
index 64a7b48..12a443f 100755
--- a/conf/bk_server.conf
+++ b/conf/bk_server.conf
@@ -787,7 +787,10 @@
# These configs are used when using `PrometheusMetricsProvider`.
# statsProviderClass=org.apache.bookkeeper.stats.prometheus.PrometheusMetricsProvider
-# Default port for Prometheus metrics exporter
+# default bind address for Prometheus metrics exporter
+# prometheusStatsHttpAddress=0.0.0.0
+
+# default port for Prometheus metrics exporter
# prometheusStatsHttpPort=8000
# latency stats rollover interval, in seconds
diff --git a/site/_data/config/bk_server.yaml b/site/_data/config/bk_server.yaml
index f1a72c8..167844f 100644
--- a/site/_data/config/bk_server.yaml
+++ b/site/_data/config/bk_server.yaml
@@ -554,6 +554,9 @@
- name: Prometheus Metrics Provider Settings
params:
+ - param: prometheusStatsHttpAddress
+ description: default bind address for Prometheus metrics exporter
+ default: 0.0.0.0
- param: prometheusStatsHttpPort
description: default port for prometheus metrics exporter
default: 8000