This is an automated email from the ASF dual-hosted git repository.
shibd pushed a commit to branch branch-4.2
in repository https://gitbox.apache.org/repos/asf/pulsar.git
The following commit(s) were added to refs/heads/branch-4.2 by this push:
new 9000452d10b7 [improve][monitor][branch-4.2] Upgrade OpenTelemetry
libraries (#26182)
9000452d10b7 is described below
commit 9000452d10b7ac3124bda792adf05fa14508b6de
Author: Baodi Shi <[email protected]>
AuthorDate: Mon Jul 13 15:25:11 2026 +0800
[improve][monitor][branch-4.2] Upgrade OpenTelemetry libraries (#26182)
---
distribution/server/src/assemble/LICENSE.bin.txt | 61 +++++++++++-----------
distribution/shell/src/assemble/LICENSE.bin.txt | 10 ++--
pom.xml | 6 +--
pulsar-opentelemetry/pom.xml | 2 +-
.../pulsar/opentelemetry/OpenTelemetryService.java | 31 ++++++-----
.../opentelemetry/OpenTelemetryServiceTest.java | 17 ++++++
6 files changed, 75 insertions(+), 52 deletions(-)
diff --git a/distribution/server/src/assemble/LICENSE.bin.txt
b/distribution/server/src/assemble/LICENSE.bin.txt
index b9815fd3927e..adbfc41bbda6 100644
--- a/distribution/server/src/assemble/LICENSE.bin.txt
+++ b/distribution/server/src/assemble/LICENSE.bin.txt
@@ -338,12 +338,12 @@ The Apache Software License, Version 2.0
- io.prometheus-simpleclient_tracer_otel-0.16.0.jar
- io.prometheus-simpleclient_tracer_otel_agent-0.16.0.jar
* Prometheus exporter
- - io.prometheus-prometheus-metrics-config-1.3.10.jar
- - io.prometheus-prometheus-metrics-exporter-common-1.3.10.jar
- - io.prometheus-prometheus-metrics-exporter-httpserver-1.3.10.jar
- -
io.prometheus-prometheus-metrics-exposition-formats-no-protobuf-1.3.10.jar
- - io.prometheus-prometheus-metrics-model-1.3.10.jar
- - io.prometheus-prometheus-metrics-exposition-textformats-1.3.10.jar
+ - io.prometheus-prometheus-metrics-config-1.5.1.jar
+ - io.prometheus-prometheus-metrics-exporter-common-1.5.1.jar
+ - io.prometheus-prometheus-metrics-exporter-httpserver-1.5.1.jar
+ -
io.prometheus-prometheus-metrics-exposition-formats-no-protobuf-1.5.1.jar
+ - io.prometheus-prometheus-metrics-exposition-textformats-1.5.1.jar
+ - io.prometheus-prometheus-metrics-model-1.5.1.jar
* Jakarta Bean Validation API
- jakarta.validation-jakarta.validation-api-2.0.2.jar
- javax.validation-validation-api-1.1.0.Final.jar
@@ -530,31 +530,30 @@ The Apache Software License, Version 2.0
- io.reactivex.rxjava3-rxjava-3.0.1.jar
* RoaringBitmap
- org.roaringbitmap-RoaringBitmap-1.6.9.jar
- * OpenTelemetry
- - io.opentelemetry-opentelemetry-api-1.56.0.jar
- - io.opentelemetry-opentelemetry-api-incubator-1.56.0-alpha.jar
- - io.opentelemetry-opentelemetry-common-1.56.0.jar
- - io.opentelemetry-opentelemetry-context-1.56.0.jar
- - io.opentelemetry-opentelemetry-exporter-common-1.56.0.jar
- - io.opentelemetry-opentelemetry-exporter-otlp-1.56.0.jar
- - io.opentelemetry-opentelemetry-exporter-otlp-common-1.56.0.jar
- - io.opentelemetry-opentelemetry-exporter-prometheus-1.56.0-alpha.jar
- - io.opentelemetry-opentelemetry-exporter-sender-okhttp-1.56.0.jar
- - io.opentelemetry-opentelemetry-sdk-1.56.0.jar
- - io.opentelemetry-opentelemetry-sdk-common-1.56.0.jar
- - io.opentelemetry-opentelemetry-sdk-extension-autoconfigure-1.56.0.jar
- - io.opentelemetry-opentelemetry-sdk-extension-autoconfigure-spi-1.56.0.jar
- - io.opentelemetry-opentelemetry-sdk-logs-1.56.0.jar
- - io.opentelemetry-opentelemetry-sdk-metrics-1.56.0.jar
- - io.opentelemetry-opentelemetry-sdk-trace-1.56.0.jar
- -
io.opentelemetry.instrumentation-opentelemetry-instrumentation-api-2.21.0.jar
- -
io.opentelemetry.instrumentation-opentelemetry-instrumentation-api-incubator-2.21.0-alpha.jar
- - io.opentelemetry.instrumentation-opentelemetry-resources-2.21.0-alpha.jar
- -
io.opentelemetry.instrumentation-opentelemetry-runtime-telemetry-java17-2.21.0-alpha.jar
- -
io.opentelemetry.instrumentation-opentelemetry-runtime-telemetry-java8-2.21.0-alpha.jar
- - io.opentelemetry.semconv-opentelemetry-semconv-1.37.0.jar
- - com.google.cloud.opentelemetry-detector-resources-support-0.36.0.jar
- - io.opentelemetry.contrib-opentelemetry-gcp-resources-1.48.0-alpha.jar
+* OpenTelemetry
+ - io.opentelemetry-opentelemetry-api-1.62.0.jar
+ - io.opentelemetry-opentelemetry-api-incubator-1.62.0-alpha.jar
+ - io.opentelemetry-opentelemetry-common-1.62.0.jar
+ - io.opentelemetry-opentelemetry-context-1.62.0.jar
+ - io.opentelemetry-opentelemetry-exporter-common-1.62.0.jar
+ - io.opentelemetry-opentelemetry-exporter-otlp-1.62.0.jar
+ - io.opentelemetry-opentelemetry-exporter-otlp-common-1.62.0.jar
+ - io.opentelemetry-opentelemetry-exporter-prometheus-1.62.0-alpha.jar
+ - io.opentelemetry-opentelemetry-exporter-sender-okhttp-1.62.0.jar
+ - io.opentelemetry-opentelemetry-sdk-1.62.0.jar
+ - io.opentelemetry-opentelemetry-sdk-common-1.62.0.jar
+ - io.opentelemetry-opentelemetry-sdk-extension-autoconfigure-1.62.0.jar
+ -
io.opentelemetry-opentelemetry-sdk-extension-autoconfigure-spi-1.62.0.jar
+ - io.opentelemetry-opentelemetry-sdk-logs-1.62.0.jar
+ - io.opentelemetry-opentelemetry-sdk-metrics-1.62.0.jar
+ - io.opentelemetry-opentelemetry-sdk-trace-1.62.0.jar
+ -
io.opentelemetry.instrumentation-opentelemetry-instrumentation-api-2.28.1.jar
+ -
io.opentelemetry.instrumentation-opentelemetry-instrumentation-api-incubator-2.28.1-alpha.jar
+ -
io.opentelemetry.instrumentation-opentelemetry-resources-2.28.1-alpha.jar
+ -
io.opentelemetry.instrumentation-opentelemetry-runtime-telemetry-2.28.1-alpha.jar
+ - io.opentelemetry.semconv-opentelemetry-semconv-1.41.1.jar
+ - com.google.cloud.opentelemetry-detector-resources-support-0.36.0.jar
+ - io.opentelemetry.contrib-opentelemetry-gcp-resources-1.48.0-alpha.jar
* Spotify completable-futures
- com.spotify-completable-futures-0.3.6.jar
* JSpecify
diff --git a/distribution/shell/src/assemble/LICENSE.bin.txt
b/distribution/shell/src/assemble/LICENSE.bin.txt
index 94ce08f9ecae..cd833d373388 100644
--- a/distribution/shell/src/assemble/LICENSE.bin.txt
+++ b/distribution/shell/src/assemble/LICENSE.bin.txt
@@ -385,11 +385,11 @@ The Apache Software License, Version 2.0
- log4j-core-2.25.4.jar
- log4j-slf4j2-impl-2.25.4.jar
- log4j-web-2.25.4.jar
- * OpenTelemetry
- - opentelemetry-api-1.56.0.jar
- - opentelemetry-api-incubator-1.56.0-alpha.jar
- - opentelemetry-common-1.56.0.jar
- - opentelemetry-context-1.56.0.jar
+* OpenTelemetry
+ - opentelemetry-api-1.62.0.jar
+ - opentelemetry-api-incubator-1.62.0-alpha.jar
+ - opentelemetry-common-1.62.0.jar
+ - opentelemetry-context-1.62.0.jar
* BookKeeper
- bookkeeper-common-allocator-4.17.3.jar
diff --git a/pom.xml b/pom.xml
index f1d5fc11b1a0..b75fc8d4f1e3 100644
--- a/pom.xml
+++ b/pom.xml
@@ -308,11 +308,11 @@ flexible messaging model and an intuitive client
API.</description>
the core logic is switched to java implementation of zstd in
org.apache.commons:commons-compress -->
<zstd-jni.version>1.5.7-3</zstd-jni.version>
<netty-reactive-streams.version>2.0.6</netty-reactive-streams.version>
- <opentelemetry.version>1.56.0</opentelemetry.version>
+ <opentelemetry.version>1.62.0</opentelemetry.version>
<opentelemetry.alpha.version>${opentelemetry.version}-alpha</opentelemetry.alpha.version>
-
<opentelemetry.instrumentation.version>2.21.0</opentelemetry.instrumentation.version>
+
<opentelemetry.instrumentation.version>2.28.1</opentelemetry.instrumentation.version>
<opentelemetry.instrumentation.alpha.version>${opentelemetry.instrumentation.version}-alpha</opentelemetry.instrumentation.alpha.version>
- <opentelemetry.semconv.version>1.37.0</opentelemetry.semconv.version>
+ <opentelemetry.semconv.version>1.41.1</opentelemetry.semconv.version>
<picocli.version>4.7.7</picocli.version>
<re2j.version>1.8</re2j.version>
<completable-futures.version>0.3.6</completable-futures.version>
diff --git a/pulsar-opentelemetry/pom.xml b/pulsar-opentelemetry/pom.xml
index b6b5826d3f0c..e15be8f3bb1a 100644
--- a/pulsar-opentelemetry/pom.xml
+++ b/pulsar-opentelemetry/pom.xml
@@ -61,7 +61,7 @@
</dependency>
<dependency>
<groupId>io.opentelemetry.instrumentation</groupId>
- <artifactId>opentelemetry-runtime-telemetry-java17</artifactId>
+ <artifactId>opentelemetry-runtime-telemetry</artifactId>
</dependency>
<dependency>
diff --git
a/pulsar-opentelemetry/src/main/java/org/apache/pulsar/opentelemetry/OpenTelemetryService.java
b/pulsar-opentelemetry/src/main/java/org/apache/pulsar/opentelemetry/OpenTelemetryService.java
index d143b743d349..084b0ee3737a 100644
---
a/pulsar-opentelemetry/src/main/java/org/apache/pulsar/opentelemetry/OpenTelemetryService.java
+++
b/pulsar-opentelemetry/src/main/java/org/apache/pulsar/opentelemetry/OpenTelemetryService.java
@@ -22,7 +22,10 @@ import static
com.google.common.base.Preconditions.checkArgument;
import com.google.common.annotations.VisibleForTesting;
import io.opentelemetry.api.OpenTelemetry;
import io.opentelemetry.exporter.prometheus.PrometheusHttpServer;
-import io.opentelemetry.instrumentation.runtimemetrics.java17.RuntimeMetrics;
+import io.opentelemetry.instrumentation.runtimetelemetry.RuntimeTelemetry;
+import
io.opentelemetry.instrumentation.runtimetelemetry.RuntimeTelemetryBuilder;
+import io.opentelemetry.instrumentation.runtimetelemetry.internal.Experimental;
+import io.opentelemetry.instrumentation.runtimetelemetry.internal.Internal;
import io.opentelemetry.sdk.OpenTelemetrySdk;
import io.opentelemetry.sdk.autoconfigure.AutoConfiguredOpenTelemetrySdk;
import
io.opentelemetry.sdk.autoconfigure.AutoConfiguredOpenTelemetrySdkBuilder;
@@ -44,11 +47,12 @@ import org.apache.commons.lang3.StringUtils;
public class OpenTelemetryService implements Closeable {
public static final String OTEL_SDK_DISABLED_KEY = "otel.sdk.disabled";
+ static final String OTEL_EXPORTER_PROMETHEUS_HOST_KEY =
"otel.exporter.prometheus.host";
static final int MAX_CARDINALITY_LIMIT = 10000;
private final AtomicReference<OpenTelemetrySdk> openTelemetrySdkReference
= new AtomicReference<>();
- private final AtomicReference<RuntimeMetrics> runtimeMetricsReference =
new AtomicReference<>();
+ private final AtomicReference<RuntimeTelemetry> runtimeTelemetryReference
= new AtomicReference<>();
/**
* Instantiates the OpenTelemetry SDK. All attributes are overridden by
system properties or environment
@@ -76,7 +80,9 @@ public class OpenTelemetryService implements Closeable {
// Cardinality limit includes the overflow attribute set, so
we need to add 1.
"otel.java.metrics.cardinality.limit",
Integer.toString(MAX_CARDINALITY_LIMIT + 1),
// Reduce number of allocations by using reusable data mode.
- "otel.java.exporter.memory_mode",
MemoryMode.REUSABLE_DATA.name()
+ "otel.java.exporter.memory_mode",
MemoryMode.REUSABLE_DATA.name(),
+ // Preserve the pre-1.62.0 Prometheus exporter default of
binding to all interfaces.
+ OTEL_EXPORTER_PROMETHEUS_HOST_KEY, "0.0.0.0"
));
sdkBuilder.addResourceCustomizer(
@@ -119,12 +125,13 @@ public class OpenTelemetryService implements Closeable {
openTelemetrySdkReference.set(sdkBuilder.build().getOpenTelemetrySdk());
// For a list of exposed metrics, see
https://opentelemetry.io/docs/specs/semconv/runtime/jvm-metrics/
-
runtimeMetricsReference.set(RuntimeMetrics.builder(openTelemetrySdkReference.get())
- // disable JFR based telemetry and use only JMX telemetry
- .disableAllFeatures()
- // enable experimental JMX telemetry in addition
- .emitExperimentalTelemetry()
- .build());
+ RuntimeTelemetryBuilder runtimeTelemetryBuilder =
+ RuntimeTelemetry.builder(openTelemetrySdkReference.get());
+ // Disable JFR-based telemetry and rely on JMX-based metrics only.
+ Internal.setDisableAllJfrFeatures(runtimeTelemetryBuilder, true);
+ // Emit experimental JMX-based runtime metrics in addition to the
stable ones.
+ Experimental.setEmitExperimentalMetrics(runtimeTelemetryBuilder, true);
+ runtimeTelemetryReference.set(runtimeTelemetryBuilder.build());
}
public OpenTelemetry getOpenTelemetry() {
@@ -133,9 +140,9 @@ public class OpenTelemetryService implements Closeable {
@Override
public void close() {
- RuntimeMetrics runtimeMetrics =
runtimeMetricsReference.getAndSet(null);
- if (runtimeMetrics != null) {
- runtimeMetrics.close();
+ RuntimeTelemetry runtimeTelemetry =
runtimeTelemetryReference.getAndSet(null);
+ if (runtimeTelemetry != null) {
+ runtimeTelemetry.close();
}
OpenTelemetrySdk openTelemetrySdk =
openTelemetrySdkReference.getAndSet(null);
if (openTelemetrySdk != null) {
diff --git
a/pulsar-opentelemetry/src/test/java/org/apache/pulsar/opentelemetry/OpenTelemetryServiceTest.java
b/pulsar-opentelemetry/src/test/java/org/apache/pulsar/opentelemetry/OpenTelemetryServiceTest.java
index e3dd29cd1b23..059152eb0c2b 100644
---
a/pulsar-opentelemetry/src/test/java/org/apache/pulsar/opentelemetry/OpenTelemetryServiceTest.java
+++
b/pulsar-opentelemetry/src/test/java/org/apache/pulsar/opentelemetry/OpenTelemetryServiceTest.java
@@ -33,6 +33,7 @@ import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.concurrent.atomic.AtomicReference;
import java.util.function.Consumer;
import lombok.Cleanup;
import org.apache.commons.lang3.StringUtils;
@@ -153,6 +154,22 @@ public class OpenTelemetryServiceTest {
});
}
+ @Test
+ public void testPrometheusExporterDefaultsToAllInterfacesHost() {
+ var capturedHost = new AtomicReference<String>();
+ @Cleanup
+ var ots = OpenTelemetryService.builder()
+ .builderCustomizer(getBuilderCustomizer(null,
+ Map.of(OpenTelemetryService.OTEL_SDK_DISABLED_KEY,
"false"))
+ .andThen(builder ->
builder.addPropertiesCustomizer(config -> {
+
capturedHost.set(config.getString(OpenTelemetryService.OTEL_EXPORTER_PROMETHEUS_HOST_KEY));
+ return Map.of();
+ })))
+ .clusterName("openTelemetryServicePrometheusHostTestCluster")
+ .build();
+ assertThat(capturedHost.get()).isEqualTo("0.0.0.0");
+ }
+
@Test
public void testLongCounter() {
var longCounter = meter.counterBuilder("dummyLongCounter").build();