diff --git a/runners/google-cloud-dataflow-java/worker/src/main/java/org/apache/beam/runners/dataflow/worker/StreamingDataflowWorker.java b/runners/google-cloud-dataflow-java/worker/src/main/java/org/apache/beam/runners/dataflow/worker/StreamingDataflowWorker.java index b6aaaf76271b..fd00cea775f2 100644 --- a/runners/google-cloud-dataflow-java/worker/src/main/java/org/apache/beam/runners/dataflow/worker/StreamingDataflowWorker.java +++ b/runners/google-cloud-dataflow-java/worker/src/main/java/org/apache/beam/runners/dataflow/worker/StreamingDataflowWorker.java @@ -1082,23 +1082,7 @@ public static void main(String[] args) throws Exception { WindowedValues.FullWindowedValueCoder.setMetadataSupported(); } - SdkHarnessOptions sdkHarnessOptions = options.as(SdkHarnessOptions.class); - Map openTelemetryProperties = sdkHarnessOptions.getOpenTelemetryProperties(); - if (openTelemetryProperties != null && !openTelemetryProperties.isEmpty()) { - openTelemetryProperties.forEach( - (k, v) -> { - if (k != null && v != null) { - System.setProperty(k, v); - } - }); - LOG.info("Enabled Open Telemetry with properties: {}", openTelemetryProperties); - } else { - // turn off auth extension so it doesn't interfere if user is configuring otel e.g. via - // JvmInitializer. - if (System.getProperty("google.otel.auth.target.signals") == null) { - System.setProperty("google.otel.auth.target.signals", "none"); - } - } + SdkHarnessOptions.configureOpenTelemetry(options); LOG.debug("Creating StreamingDataflowWorker from options: {}", options); StreamingDataflowWorker worker = StreamingDataflowWorker.fromOptions(options); 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 531c86ef0438..0fcd770c1d11 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 @@ -30,6 +30,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.UUID; import java.util.logging.Level; import java.util.logging.LogManager; import java.util.logging.Logger; @@ -475,6 +476,29 @@ public Duration create(PipelineOptions options) { void setOpenTelemetryProperties(Map value); + static void configureOpenTelemetry(PipelineOptions options) { + SdkHarnessOptions sdkHarnessOptions = options.as(SdkHarnessOptions.class); + Map openTelemetryProperties = sdkHarnessOptions.getOpenTelemetryProperties(); + if (openTelemetryProperties != null && !openTelemetryProperties.isEmpty()) { + openTelemetryProperties.forEach( + (k, v) -> { + if (k != null && v != null) { + System.setProperty(k, v); + } + }); + if (System.getProperty("otel.service.instance.id") == null) { + String instanceId = UUID.randomUUID().toString(); + System.setProperty("otel.service.instance.id", instanceId); + } + } else { + // turn off auth extension so it doesn't interfere if user is configuring otel e.g. via + // JvmInitializer. + if (System.getProperty("google.otel.auth.target.signals") == null) { + System.setProperty("google.otel.auth.target.signals", "none"); + } + } + } + @JsonIgnore @Hidden @Default.InstanceFactory(GlobalOpenTelemetryFactory.class) diff --git a/sdks/java/harness/src/main/java/org/apache/beam/fn/harness/FnHarness.java b/sdks/java/harness/src/main/java/org/apache/beam/fn/harness/FnHarness.java index 7bda0e18cad8..63f6c41b5a71 100644 --- a/sdks/java/harness/src/main/java/org/apache/beam/fn/harness/FnHarness.java +++ b/sdks/java/harness/src/main/java/org/apache/beam/fn/harness/FnHarness.java @@ -305,23 +305,7 @@ public static void main( // Register standard file systems. FileSystems.setDefaultPipelineOptions(options); CoderTranslation.verifyModelCodersRegistered(); - SdkHarnessOptions sdkHarnessOptions = options.as(SdkHarnessOptions.class); - Map openTelemetryProperties = sdkHarnessOptions.getOpenTelemetryProperties(); - if (openTelemetryProperties != null && !openTelemetryProperties.isEmpty()) { - openTelemetryProperties.forEach( - (k, v) -> { - if (k != null && v != null) { - System.setProperty(k, v); - } - }); - LOG.info("Enabled Open Telemetry with properties: {}", openTelemetryProperties); - } else { - // turn off auth extension so it doesn't interfere if user is configuring otel e.g. via - // JvmInitializer. - if (System.getProperty("google.otel.auth.target.signals") == null) { - System.setProperty("google.otel.auth.target.signals", "none"); - } - } + SdkHarnessOptions.configureOpenTelemetry(options); EnumMap< BeamFnApi.InstructionRequest.RequestCase, ThrowingFunction>