You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@bookkeeper.apache.org by eo...@apache.org on 2021/01/27 07:38:33 UTC

[bookkeeper] branch master updated: Allow to configure Prometheus HTTP Server bind address

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

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


The following commit(s) were added to refs/heads/master by this push:
     new c5d7026  Allow to configure Prometheus HTTP Server bind address
c5d7026 is described below

commit c5d7026cc38ce3fdfcac8f569327c1d4837813ad
Author: Shoothzj <sh...@gmail.com>
AuthorDate: Wed Jan 27 15:38:26 2021 +0800

    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 <eo...@gmail.com>, Sijie Guo <si...@apache.org>
    
    This closes #2543 from Shoothzj/promethes_addr
---
 .../stats/prometheus/PrometheusMetricsProvider.java       |  6 +++++-
 .../stats/prometheus/TestPrometheusMetricsProvider.java   | 15 +++++++++++++++
 conf/bk_server.conf                                       |  5 ++++-
 site/_data/config/bk_server.yaml                          |  3 +++
 4 files changed, 27 insertions(+), 2 deletions(-)

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 class PrometheusMetricsProvider implements StatsProvider {
     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 @@ public class PrometheusMetricsProvider implements StatsProvider {
         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 @@ public class TestPrometheusMetricsProvider {
     }
 
     @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 @@ zkEnableSecurity=false
 # 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 @@ groups:
 
 - 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