hangc0276 commented on pull request #6814:
URL: https://github.com/apache/pulsar/pull/6814#issuecomment-636474961


   @sijie  I try to use bookkeeper prometheus provider lib the export the 
bookie client metric, but failed. The exception is
   ```
   21:49:06.142 [prometheus-stats-43-1] ERROR 
org.apache.bookkeeper.common.util.SafeRunnable - Unexpected throwable caught
   java.lang.ExceptionInInitializerError: null
           at 
org.apache.pulsar.broker.stats.prometheus.PrometheusMetricsServlet.lambda$doGet$0(PrometheusMetricsServlet.java:70)
 ~[org.apache.pulsar-pulsar-broker-2.6.0-SNAPSHOT.jar:2.6.0-SNAPSHOT]
           at 
org.apache.bookkeeper.mledger.util.SafeRun$1.safeRun(SafeRun.java:32) 
~[org.apache.pulsar-managed-ledger-2.6.0-SNAPSHOT.jar:2.6.0-SNAPSHOT]
           at 
org.apache.bookkeeper.common.util.SafeRunnable.run(SafeRunnable.java:36) 
[org.apache.bookkeeper-bookkeeper-common-4.10.0.jar:4.10.0]
           at 
java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) 
[?:1.8.0_92]
           at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
[?:1.8.0_92]
           at 
java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)
 [?:1.8.0_92]
           at 
java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
 [?:1.8.0_92]
           at 
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
[?:1.8.0_92]
           at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
[?:1.8.0_92]
           at 
io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
 [io.netty-netty-common-4.1.48.Final.jar:4.1.48.Final]
           at java.lang.Thread.run(Thread.java:745) [?:1.8.0_92]
   Caused by: java.lang.IllegalArgumentException: Collector already registered 
that provides name: process_cpu_seconds_total
           at 
io.prometheus.client.CollectorRegistry.register(CollectorRegistry.java:54) 
~[io.prometheus-simpleclient-0.5.0.jar:?]
           at io.prometheus.client.Collector.register(Collector.java:139) 
~[io.prometheus-simpleclient-0.5.0.jar:?]
           at io.prometheus.client.Collector.register(Collector.java:132) 
~[io.prometheus-simpleclient-0.5.0.jar:?]
           at 
io.prometheus.client.hotspot.DefaultExports.initialize(DefaultExports.java:23) 
~[io.prometheus-simpleclient_hotspot-0.5.0.jar:?]
           at 
org.apache.pulsar.broker.stats.prometheus.PrometheusMetricsGenerator.<clinit>(PrometheusMetricsGenerator.java:61)
 ~[org.apache.pulsar-pulsar-broker-2.6.0-SNAPSHOT.jar:2.6.0-SNAPSHOT]
           ... 11 more
   ```
   The reason is bookkeeper lib `PrometheusMetricsProvider` will export the 
follow metrics by default and can't turn off. 
   ```
   this.registerMetrics(new StandardExports());
   this.registerMetrics(new MemoryPoolsExports());
   this.registerMetrics(new GarbageCollectorExports());
   this.registerMetrics(new ThreadExports());
   this.registerMetrics(Gauge.build("jvm_memory_direct_bytes_used", 
"-").create().setChild(new Child() {
            public double get() {
                   return PrometheusMetricsProvider.directMemoryUsage != null ? 
(double)PrometheusMetricsProvider.directMemoryUsage.longValue() : 0.0D / 0.0;
               }
           }, new String[0]));
           this.registerMetrics(Gauge.build("jvm_memory_direct_bytes_max", 
"-").create().setChild(new Child() {
               public double get() {
                   return (double)PlatformDependent.maxDirectMemory();
               }
           }, new String[0]));
   ```
   However the pulsar broker prometheus metric also export those metrics to 
prometheus, some of the metrics registered twice, which will lead to metric 
export failed.
   
   Could you give me some ideas ?


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


Reply via email to