diff --git a/buildSrc/src/main/groovy/org/apache/beam/gradle/BeamModulePlugin.groovy b/buildSrc/src/main/groovy/org/apache/beam/gradle/BeamModulePlugin.groovy index 3f299916db8c..e941de9dfb64 100644 --- a/buildSrc/src/main/groovy/org/apache/beam/gradle/BeamModulePlugin.groovy +++ b/buildSrc/src/main/groovy/org/apache/beam/gradle/BeamModulePlugin.groovy @@ -634,6 +634,8 @@ class BeamModulePlugin implements Plugin { def nemo_version = "0.1" // [bomupgrader] determined by: io.grpc:grpc-netty, consistent with: google_cloud_platform_libraries_bom def netty_version = "4.1.110.Final" + // [bomupgrader] determined by: io.opentelemetry:opentelemetry-sdk, consistent with: google_cloud_platform_libraries_bom + def opentelemetry_version = "1.47.0" def postgres_version = "42.2.16" // [bomupgrader] determined by: com.google.protobuf:protobuf-java, consistent with: google_cloud_platform_libraries_bom def protobuf_version = "4.33.0" @@ -853,6 +855,8 @@ class BeamModulePlugin implements Plugin { netty_tcnative_boringssl_static : "io.netty:netty-tcnative-boringssl-static:2.0.52.Final", netty_transport : "io.netty:netty-transport:$netty_version", netty_transport_native_epoll : "io.netty:netty-transport-native-epoll:$netty_version", + opentelemetry_api : "io.opentelemetry:opentelemetry-api", // google_cloud_platform_libraries_bom sets version + opentelemetry_bom : "io.opentelemetry:opentelemetry-bom-alpha:$opentelemetry_version-alpha", // alpha required by extensions postgres : "org.postgresql:postgresql:$postgres_version", protobuf_java : "com.google.protobuf:protobuf-java:$protobuf_version", protobuf_java_util : "com.google.protobuf:protobuf-java-util:$protobuf_version", diff --git a/scripts/tools/bomupgrader.py b/scripts/tools/bomupgrader.py index 23de807a4faf..a759bae827ba 100644 --- a/scripts/tools/bomupgrader.py +++ b/scripts/tools/bomupgrader.py @@ -52,6 +52,7 @@ class BeamModulePluginProcessor: "grpc": "io.grpc:grpc-netty", # use "grpc-netty" to pick up proper netty version "netty": "io.netty:netty-transport", + "opentelemetry": "io.opentelemetry:opentelemetry-sdk", "protobuf": "com.google.protobuf:protobuf-java" } # dependencies managed by GCP-BOM that used the dependencies in KNOWN_DEPS diff --git a/sdks/java/container/license_scripts/dep_urls_java.yaml b/sdks/java/container/license_scripts/dep_urls_java.yaml index 06e6235fd2de..cc103c376e1d 100644 --- a/sdks/java/container/license_scripts/dep_urls_java.yaml +++ b/sdks/java/container/license_scripts/dep_urls_java.yaml @@ -65,6 +65,14 @@ org.eclipse.jgit: '4.4.1.201607150455-r': license: "https://www.eclipse.org/org/documents/edl-v10.html" type: "Eclipse Distribution License - v1.0" +opentelemetry-bom: + '1.47.0': + license: "https://raw.githubusercontent.com/open-telemetry/opentelemetry-java/v1.47.0/LICENSE" + type: "Apache License 2.0" +opentelemetry-bom-alpha: + '1.47.0-alpha': + license: "https://raw.githubusercontent.com/open-telemetry/opentelemetry-java/v1.47.0/LICENSE" + type: "Apache License 2.0" zstd-jni: '1.5.2-5': license: "https://raw.githubusercontent.com/luben/zstd-jni/master/LICENSE" diff --git a/sdks/java/core/build.gradle b/sdks/java/core/build.gradle index 4a6d2f11973e..4f37ad47ec4c 100644 --- a/sdks/java/core/build.gradle +++ b/sdks/java/core/build.gradle @@ -96,6 +96,8 @@ dependencies { shadow library.java.jackson_core shadow library.java.jackson_annotations shadow library.java.jackson_databind + shadow platform(library.java.opentelemetry_bom) + shadow library.java.opentelemetry_api shadow library.java.slf4j_api shadow library.java.snappy_java shadow library.java.joda_time diff --git a/sdks/java/core/src/main/java/org/apache/beam/sdk/options/SdkHarnessOptions.java b/sdks/java/core/src/main/java/org/apache/beam/sdk/options/SdkHarnessOptions.java index ecebeee4bba3..5833bcc21a42 100644 --- a/sdks/java/core/src/main/java/org/apache/beam/sdk/options/SdkHarnessOptions.java +++ b/sdks/java/core/src/main/java/org/apache/beam/sdk/options/SdkHarnessOptions.java @@ -20,6 +20,9 @@ import static org.apache.beam.vendor.guava.v32_1_2_jre.com.google.common.base.Preconditions.checkNotNull; import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnore; +import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.api.OpenTelemetry; import java.time.Duration; import java.util.ArrayList; import java.util.Arrays; @@ -452,4 +455,29 @@ public Duration create(PipelineOptions options) { List getAvroSerializableClasses(); void setAvroSerializableClasses(List options); + + /** + * The OpenTelemetry properties that will be appended to the set of system properties for SDK + * harness instances. Property names must be specified without the 'otel.' prefix. + */ + @Description( + "The OpenTelemetry properties that will be appended to the set of system properties for SDK " + + "harness instances. Property names must be specified without the 'otel.' prefix.") + Map getOpenTelemetryProperties(); + + void setOpenTelemetryProperties(Map value); + + @JsonIgnore + @Hidden + @Default.InstanceFactory(GlobalOpenTelemetryFactory.class) + OpenTelemetry getOpenTelemetry(); + + void setOpenTelemetry(OpenTelemetry value); + + class GlobalOpenTelemetryFactory implements DefaultValueFactory { + @Override + public OpenTelemetry create(PipelineOptions options) { + return GlobalOpenTelemetry.get(); + } + } }