This is an automated email from the ASF dual-hosted git repository.
sijie 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 0ccde17 Enable Prometheus stats provider to use custom http container
0ccde17 is described below
commit 0ccde17214168ec1f87741d1053ef66ce2344fff
Author: Enrico Olivelli <[email protected]>
AuthorDate: Mon May 7 16:46:30 2018 +0800
Enable Prometheus stats provider to use custom http container
This change enable Prometheus stats provider to:
- use an user supplied registry
- do not start internal Jetty server
The context is to run the Bookie inside a process together with a servlet
container (like Apache Tomcat) and use the existing web endpoint instead of
opening another http (plain) port
Author: Enrico Olivelli <[email protected]>
Reviewers: Sijie Guo <[email protected]>
This closes #1394 from eolivelli/prom-use-servlet
---
.../prometheus/PrometheusMetricsProvider.java | 47 +++++++++++++---------
.../prometheus/TestPrometheusMetricsProvider.java | 30 ++++++++++++++
2 files changed, 59 insertions(+), 18 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 c3dbe2d..ee9b541 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
@@ -59,15 +59,18 @@ public class PrometheusMetricsProvider implements
StatsProvider {
private ScheduledExecutorService executor;
- private static final String PROMETHEUS_STATS_HTTP_PORT =
"prometheusStatsHttpPort";
- private static final int DEFAULT_PROMETHEUS_STATS_HTTP_PORT = 8000;
+ public static final String PROMETHEUS_STATS_HTTP_ENABLE =
"prometheusStatsHttpEnable";
+ public static final boolean DEFAULT_PROMETHEUS_STATS_HTTP_ENABLE = true;
- private static final String PROMETHEUS_STATS_LATENCY_ROLLOVER_SECONDS =
"prometheusStatsLatencyRolloverSeconds";
- private static final int DEFAULT_PROMETHEUS_STATS_LATENCY_ROLLOVER_SECONDS
= 60;
+ public static final String PROMETHEUS_STATS_HTTP_PORT =
"prometheusStatsHttpPort";
+ public static final int DEFAULT_PROMETHEUS_STATS_HTTP_PORT = 8000;
- final CollectorRegistry registry = new CollectorRegistry();
+ public static final String PROMETHEUS_STATS_LATENCY_ROLLOVER_SECONDS =
"prometheusStatsLatencyRolloverSeconds";
+ public static final int DEFAULT_PROMETHEUS_STATS_LATENCY_ROLLOVER_SECONDS
= 60;
- private Server server;
+ final CollectorRegistry registry;
+
+ Server server;
private final CachingStatsProvider cachingStatsProvider;
/*
@@ -78,6 +81,11 @@ public class PrometheusMetricsProvider implements
StatsProvider {
final ConcurrentMap<String, DataSketchesOpStatsLogger> opStats = new
ConcurrentSkipListMap<>();
public PrometheusMetricsProvider() {
+ this(new CollectorRegistry());
+ }
+
+ public PrometheusMetricsProvider(CollectorRegistry registry) {
+ this.registry = registry;
this.cachingStatsProvider = new CachingStatsProvider(new
StatsProvider() {
@Override
public void start(Configuration conf) {
@@ -98,19 +106,23 @@ public class PrometheusMetricsProvider implements
StatsProvider {
@Override
public void start(Configuration conf) {
- int httpPort = conf.getInt(PROMETHEUS_STATS_HTTP_PORT,
DEFAULT_PROMETHEUS_STATS_HTTP_PORT);
- InetSocketAddress httpEndpoint =
InetSocketAddress.createUnresolved("0.0.0.0", httpPort);
- this.server = new Server(httpEndpoint);
- ServletContextHandler context = new ServletContextHandler();
- context.setContextPath("/");
- server.setHandler(context);
+ boolean httpEnabled = conf.getBoolean(PROMETHEUS_STATS_HTTP_ENABLE,
DEFAULT_PROMETHEUS_STATS_HTTP_ENABLE);
+ if (httpEnabled) {
+ int httpPort = conf.getInt(PROMETHEUS_STATS_HTTP_PORT,
DEFAULT_PROMETHEUS_STATS_HTTP_PORT);
+ InetSocketAddress httpEndpoint =
InetSocketAddress.createUnresolved("0.0.0.0", httpPort);
+ this.server = new Server(httpEndpoint);
+ ServletContextHandler context = new ServletContextHandler();
+ context.setContextPath("/");
+ server.setHandler(context);
- context.addServlet(new ServletHolder(new PrometheusServlet(this)),
"/metrics");
+ context.addServlet(new ServletHolder(new PrometheusServlet(this)),
"/metrics");
- try {
- server.start();
- } catch (Exception e) {
- throw new RuntimeException(e);
+ try {
+ server.start();
+ log.info("Started Prometheus stats endpoint at {}",
httpEndpoint);
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
}
// Include standard JVM stats
@@ -143,7 +155,6 @@ public class PrometheusMetricsProvider implements
StatsProvider {
rotateLatencyCollection();
}, 1, latencyRolloverSeconds, TimeUnit.SECONDS);
- log.info("Started Prometheus stats endpoint at {}", httpEndpoint);
}
@Override
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 b969970..a69ac42 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
@@ -17,11 +17,14 @@
package org.apache.bookkeeper.stats.prometheus;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertSame;
import org.apache.bookkeeper.stats.Counter;
import org.apache.bookkeeper.stats.OpStatsLogger;
import org.apache.bookkeeper.stats.StatsLogger;
+import org.apache.commons.configuration.PropertiesConfiguration;
import org.junit.Test;
/**
@@ -49,6 +52,33 @@ public class TestPrometheusMetricsProvider {
}
@Test
+ public void testStartNoHttp() {
+ PropertiesConfiguration config = new PropertiesConfiguration();
+
config.setProperty(PrometheusMetricsProvider.PROMETHEUS_STATS_HTTP_ENABLE,
false);
+ PrometheusMetricsProvider provider = new PrometheusMetricsProvider();
+ try {
+ provider.start(config);
+ assertNull(provider.server);
+ } finally {
+ provider.stop();
+ }
+ }
+
+ @Test
+ public void testStartWithHttp() {
+ PropertiesConfiguration config = new PropertiesConfiguration();
+
config.setProperty(PrometheusMetricsProvider.PROMETHEUS_STATS_HTTP_ENABLE,
true);
+
config.setProperty(PrometheusMetricsProvider.PROMETHEUS_STATS_HTTP_PORT, 0); //
ephemeral
+ 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();
--
To stop receiving notification emails like this one, please contact
[email protected].