From a562e657ec3a20e05839e1c5d6d2edf47e6d12f4 Mon Sep 17 00:00:00 2001 From: Liudmila Molkova Date: Wed, 27 Sep 2023 14:07:27 -0700 Subject: [PATCH] Minor tracing samples improvements (#36226) * tracing samples - flush otel, remove deprecated jaeger, use autoconfigure --- .vscode/cspell.json | 2 + eng/versioning/external_dependencies.txt | 1 - .../README.md | 3 +- .../azure-core-metrics-opentelemetry/pom.xml | 1 - .../OpenTelemetryMeterProvider.java | 2 +- .../MetricsJavaDocCodeSnippets.java | 8 +- .../pom.xml | 4 +- ...igurationSettingLoggingExporterSample.java | 51 ++++++------ ...eyVaultSecretsAutoConfigurationSample.java | 26 ++---- ...stKeyVaultSecretsJaegerExporterSample.java | 83 ------------------- .../samples/TracingJavaDocCodeSnippets.java | 17 ++-- .../README.md | 7 +- .../OpenTelemetryTracingOptions.java | 4 +- 13 files changed, 60 insertions(+), 149 deletions(-) delete mode 100644 sdk/core/azure-core-tracing-opentelemetry-samples/src/samples/java/com/azure/core/tracing/opentelemetry/samples/ListKeyVaultSecretsJaegerExporterSample.java diff --git a/.vscode/cspell.json b/.vscode/cspell.json index 086147a324541..6f802b861ef19 100644 --- a/.vscode/cspell.json +++ b/.vscode/cspell.json @@ -127,6 +127,7 @@ "sdk/core/azure-xml/**", "sdk/cosmos/azure-cosmos-dotnet-benchmark/**", "sdk/core/azure-core-tracing-opentelemetry/**", + "sdk/core/azure-core-tracing-opentelemetry-samples/**", "sdk/cosmos/azure-cosmos-benchmark/**", "sdk/core/azure-json-gson/**", "sdk/cosmos/azure-cosmos-spark_3-1_2-12/**", @@ -339,6 +340,7 @@ "odata", "ODBC", "okhttp", + "OTLP", "OLTP", "onboarded", "Onco", diff --git a/eng/versioning/external_dependencies.txt b/eng/versioning/external_dependencies.txt index 8e23faf7e4bc6..b8601cb632a37 100644 --- a/eng/versioning/external_dependencies.txt +++ b/eng/versioning/external_dependencies.txt @@ -200,7 +200,6 @@ io.opentelemetry:opentelemetry-sdk;1.28.0 io.opentelemetry:opentelemetry-sdk-metrics;1.28.0 io.opentelemetry:opentelemetry-sdk-logs;1.28.0 io.opentelemetry:opentelemetry-exporter-logging;1.28.0 -io.opentelemetry:opentelemetry-exporter-jaeger;1.28.0 io.opentelemetry:opentelemetry-exporter-otlp;1.28.0 io.opentelemetry:opentelemetry-api-logs;1.26.0-alpha io.opentelemetry:opentelemetry-sdk-testing;1.28.0 diff --git a/sdk/core/azure-core-metrics-opentelemetry/README.md b/sdk/core/azure-core-metrics-opentelemetry/README.md index 1377837ede0d8..bf2897a875730 100644 --- a/sdk/core/azure-core-metrics-opentelemetry/README.md +++ b/sdk/core/azure-core-metrics-opentelemetry/README.md @@ -81,9 +81,10 @@ SdkMeterProvider meterProvider = SdkMeterProvider.builder() .registerMetricReader(PeriodicMetricReader.builder(OtlpGrpcMetricExporter.builder().build()).build()) .build(); +OpenTelemetrySdk openTelemetry = OpenTelemetrySdk.builder().setMeterProvider(meterProvider).build(); // Pass OpenTelemetry instance to MetricsOptions. MetricsOptions customMetricsOptions = new OpenTelemetryMetricsOptions() - .setOpenTelemetry(OpenTelemetrySdk.builder().setMeterProvider(meterProvider).build()); + .setOpenTelemetry(openTelemetry); // configure Azure Client to use customMetricsOptions - it will use meterProvider // to create meters and instruments diff --git a/sdk/core/azure-core-metrics-opentelemetry/pom.xml b/sdk/core/azure-core-metrics-opentelemetry/pom.xml index f3eeda546dce0..c0ec62ea49415 100644 --- a/sdk/core/azure-core-metrics-opentelemetry/pom.xml +++ b/sdk/core/azure-core-metrics-opentelemetry/pom.xml @@ -141,7 +141,6 @@ io.opentelemetry:opentelemetry-sdk-testing:[1.28.0] io.opentelemetry:opentelemetry-exporter-logging:[1.28.0] io.opentelemetry:opentelemetry-exporter-otlp:[1.28.0] - io.opentelemetry:opentelemetry-exporter-jaeger:[1.28.0] diff --git a/sdk/core/azure-core-metrics-opentelemetry/src/main/java/com/azure/core/metrics/opentelemetry/OpenTelemetryMeterProvider.java b/sdk/core/azure-core-metrics-opentelemetry/src/main/java/com/azure/core/metrics/opentelemetry/OpenTelemetryMeterProvider.java index 48ed6e292360c..11b081910de25 100644 --- a/sdk/core/azure-core-metrics-opentelemetry/src/main/java/com/azure/core/metrics/opentelemetry/OpenTelemetryMeterProvider.java +++ b/sdk/core/azure-core-metrics-opentelemetry/src/main/java/com/azure/core/metrics/opentelemetry/OpenTelemetryMeterProvider.java @@ -68,7 +68,7 @@ public OpenTelemetryMeterProvider() { * .registerMetricReader(PeriodicMetricReader.builder(OtlpGrpcMetricExporter.builder().build()).build()) * .build(); * - * OpenTelemetry openTelemetry = OpenTelemetrySdk.builder() + * OpenTelemetrySdk openTelemetry = OpenTelemetrySdk.builder() * .setTracerProvider(tracerProvider) * .setMeterProvider(meterProvider) * .setPropagators(ContextPropagators.create(W3CTraceContextPropagator.getInstance())) diff --git a/sdk/core/azure-core-metrics-opentelemetry/src/samples/java/com/azure/core/metrics/opentelemetry/MetricsJavaDocCodeSnippets.java b/sdk/core/azure-core-metrics-opentelemetry/src/samples/java/com/azure/core/metrics/opentelemetry/MetricsJavaDocCodeSnippets.java index cd9b07106b3c5..448bd2e59a7bf 100644 --- a/sdk/core/azure-core-metrics-opentelemetry/src/samples/java/com/azure/core/metrics/opentelemetry/MetricsJavaDocCodeSnippets.java +++ b/sdk/core/azure-core-metrics-opentelemetry/src/samples/java/com/azure/core/metrics/opentelemetry/MetricsJavaDocCodeSnippets.java @@ -11,7 +11,6 @@ import com.azure.core.util.metrics.Meter; import com.azure.core.util.metrics.MeterProvider; import io.opentelemetry.api.GlobalOpenTelemetry; -import io.opentelemetry.api.OpenTelemetry; import io.opentelemetry.api.trace.Span; import io.opentelemetry.api.trace.Tracer; import io.opentelemetry.api.trace.propagation.W3CTraceContextPropagator; @@ -93,9 +92,10 @@ public void readmeSampleCustomSdkConfiguration() { .registerMetricReader(PeriodicMetricReader.builder(OtlpGrpcMetricExporter.builder().build()).build()) .build(); + OpenTelemetrySdk openTelemetry = OpenTelemetrySdk.builder().setMeterProvider(meterProvider).build(); // Pass OpenTelemetry instance to MetricsOptions. MetricsOptions customMetricsOptions = new OpenTelemetryMetricsOptions() - .setOpenTelemetry(OpenTelemetrySdk.builder().setMeterProvider(meterProvider).build()); + .setOpenTelemetry(openTelemetry); // configure Azure Client to use customMetricsOptions - it will use meterProvider // to create meters and instruments @@ -108,6 +108,7 @@ public void readmeSampleCustomSdkConfiguration() { sampleClient.methodCall("get items"); // END: readme-sample-customConfiguration + openTelemetry.close(); } /** @@ -125,7 +126,7 @@ public void configureClientLibraryToUseCustomMeter() { .registerMetricReader(PeriodicMetricReader.builder(OtlpGrpcMetricExporter.builder().build()).build()) .build(); - OpenTelemetry openTelemetry = OpenTelemetrySdk.builder() + OpenTelemetrySdk openTelemetry = OpenTelemetrySdk.builder() .setTracerProvider(tracerProvider) .setMeterProvider(meterProvider) .setPropagators(ContextPropagators.create(W3CTraceContextPropagator.getInstance())) @@ -157,6 +158,7 @@ public void configureClientLibraryToUseCustomMeter() { span.end(); // END: com.azure.core.util.metrics.OpenTelemetryMeterProvider.createMeter#custom + openTelemetry.close(); } /** diff --git a/sdk/core/azure-core-tracing-opentelemetry-samples/pom.xml b/sdk/core/azure-core-tracing-opentelemetry-samples/pom.xml index 0a60221a7aab4..903b28e642a58 100644 --- a/sdk/core/azure-core-tracing-opentelemetry-samples/pom.xml +++ b/sdk/core/azure-core-tracing-opentelemetry-samples/pom.xml @@ -59,8 +59,8 @@ io.opentelemetry - opentelemetry-exporter-jaeger - 1.28.0 + opentelemetry-sdk-extension-autoconfigure + 1.28.0 test diff --git a/sdk/core/azure-core-tracing-opentelemetry-samples/src/samples/java/com/azure/core/tracing/opentelemetry/samples/CreateConfigurationSettingLoggingExporterSample.java b/sdk/core/azure-core-tracing-opentelemetry-samples/src/samples/java/com/azure/core/tracing/opentelemetry/samples/CreateConfigurationSettingLoggingExporterSample.java index a8cfc139a79d6..5bfd36c69ed9f 100644 --- a/sdk/core/azure-core-tracing-opentelemetry-samples/src/samples/java/com/azure/core/tracing/opentelemetry/samples/CreateConfigurationSettingLoggingExporterSample.java +++ b/sdk/core/azure-core-tracing-opentelemetry-samples/src/samples/java/com/azure/core/tracing/opentelemetry/samples/CreateConfigurationSettingLoggingExporterSample.java @@ -3,6 +3,9 @@ package com.azure.core.tracing.opentelemetry.samples; +import com.azure.core.tracing.opentelemetry.OpenTelemetryTracingOptions; +import com.azure.core.util.ClientOptions; +import com.azure.core.util.TracingOptions; import com.azure.data.appconfiguration.ConfigurationClient; import com.azure.data.appconfiguration.ConfigurationClientBuilder; import io.opentelemetry.api.trace.Span; @@ -18,7 +21,6 @@ * in App Configuration through the {@link ConfigurationClient}. */ public class CreateConfigurationSettingLoggingExporterSample { - private static final Tracer TRACER = configureLoggingExporter(); private static final String CONNECTION_STRING = ""; /** @@ -26,22 +28,38 @@ public class CreateConfigurationSettingLoggingExporterSample { * * @param args Ignored args. */ + @SuppressWarnings("try") public static void main(String[] args) { - configureLoggingExporter(); + OpenTelemetrySdk openTelemetry = configureTracing(); + + // In this sample we configured OpenTelemetry without registering global instance, so we need to pass it explicitly to the Azure SDK. + // If we used ApplicationInsights or OpenTelemetry agent, or registered global instance, we would not need to pass it explicitly. + TracingOptions tracingOptions = new OpenTelemetryTracingOptions().setOpenTelemetry(openTelemetry); ConfigurationClient client = new ConfigurationClientBuilder() .connectionString(CONNECTION_STRING) + .clientOptions(new ClientOptions().setTracingOptions(tracingOptions)) .buildClient(); - doClientWork(client); + Tracer tracer = openTelemetry.getTracer("sample"); + + Span span = tracer.spanBuilder("my-span").startSpan(); + try (Scope s = span.makeCurrent()) { + // current span propagates into synchronous calls automatically. ApplicationInsights or OpenTelemetry agent + // also propagate context through async reactor calls. + client.setConfigurationSetting("hello", "text", "World"); + } finally { + span.end(); + } + + openTelemetry.close(); } /** - * Configure the OpenTelemetry {@link LoggingSpanExporter} to enable tracing. - * - * @return The OpenTelemetry {@link Tracer} instance. + * Configure the OpenTelemetry to print traces with {@link LoggingSpanExporter}. */ - private static Tracer configureLoggingExporter() { + private static OpenTelemetrySdk configureTracing() { + // configure OpenTelemetry explicitly or with io.opentelemetry:opentelemetry-sdk-extension-autoconfigure package SdkTracerProvider tracerProvider = SdkTracerProvider.builder() .addSpanProcessor(BatchSpanProcessor.builder(LoggingSpanExporter.create()).build()) @@ -49,23 +67,6 @@ private static Tracer configureLoggingExporter() { return OpenTelemetrySdk.builder() .setTracerProvider(tracerProvider) - .buildAndRegisterGlobal() - .getTracer("AppConfig-Sample"); - } - - /** - * Creates the {@link ConfigurationClient} and creates a configuration in Azure App Configuration with distributed - * tracing enabled and using the Logging exporter to export telemetry events. - */ - @SuppressWarnings("try") - private static void doClientWork(ConfigurationClient client) { - Span span = TRACER.spanBuilder("my-span").startSpan(); - try (Scope s = span.makeCurrent()) { - // current span propagates into synchronous calls automatically. ApplicationInsights or OpenTelemetry agent - // also propagate context through async reactor calls. - client.setConfigurationSetting("hello", "text", "World"); - } finally { - span.end(); - } + .build(); } } diff --git a/sdk/core/azure-core-tracing-opentelemetry-samples/src/samples/java/com/azure/core/tracing/opentelemetry/samples/ListKeyVaultSecretsAutoConfigurationSample.java b/sdk/core/azure-core-tracing-opentelemetry-samples/src/samples/java/com/azure/core/tracing/opentelemetry/samples/ListKeyVaultSecretsAutoConfigurationSample.java index c0651fc95be42..f917f5a474d9f 100644 --- a/sdk/core/azure-core-tracing-opentelemetry-samples/src/samples/java/com/azure/core/tracing/opentelemetry/samples/ListKeyVaultSecretsAutoConfigurationSample.java +++ b/sdk/core/azure-core-tracing-opentelemetry-samples/src/samples/java/com/azure/core/tracing/opentelemetry/samples/ListKeyVaultSecretsAutoConfigurationSample.java @@ -8,11 +8,11 @@ import com.azure.security.keyvault.secrets.SecretClient; import com.azure.security.keyvault.secrets.SecretClientBuilder; import com.azure.security.keyvault.secrets.models.KeyVaultSecret; -import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.api.trace.Span; import io.opentelemetry.api.trace.Tracer; import io.opentelemetry.context.Scope; -import io.opentelemetry.exporter.logging.LoggingSpanExporter; +import io.opentelemetry.sdk.OpenTelemetrySdk; +import io.opentelemetry.sdk.autoconfigure.AutoConfiguredOpenTelemetrySdk; import reactor.util.context.Context; import static com.azure.core.util.tracing.Tracer.PARENT_TRACE_CONTEXT_KEY; @@ -26,7 +26,8 @@ public class ListKeyVaultSecretsAutoConfigurationSample { private static final String VAULT_URL = ""; @SuppressWarnings("try") public void syncClient() { - Tracer tracer = configureTracing(); + OpenTelemetrySdk openTelemetry = AutoConfiguredOpenTelemetrySdk.initialize().getOpenTelemetrySdk(); + Tracer tracer = openTelemetry.getTracer("sample"); // BEGIN: readme-sample-context-auto-propagation SecretClient secretClient = new SecretClientBuilder() @@ -46,10 +47,12 @@ public void syncClient() { } // END: readme-sample-context-auto-propagation + openTelemetry.close(); } public void asyncClient() { - Tracer tracer = configureTracing(); + OpenTelemetrySdk openTelemetry = AutoConfiguredOpenTelemetrySdk.initialize().getOpenTelemetrySdk(); + Tracer tracer = openTelemetry.getTracer("sample"); // BEGIN: readme-sample-context-manual-propagation SecretAsyncClient secretAsyncClient = new SecretClientBuilder() @@ -73,20 +76,7 @@ public void asyncClient() { } finally { span.end(); } - // END: readme-sample-context-manual-propagation - } - - /** - * Configure the OpenTelemetry {@link LoggingSpanExporter} to enable tracing. - * - * @return The OpenTelemetry {@link Tracer} instance. - */ - private static Tracer configureTracing() { - // configure OpenTelemetry SDK using io.opentelemetry:opentelemetry-sdk-extension-autoconfigure: - // OpenTelemetrySdk sdk = AutoConfiguredOpenTelemetrySdk.initialize() - // .getOpenTelemetrySdk(); - - return GlobalOpenTelemetry.getTracer("Async-List-KV-Secrets-Sample"); + openTelemetry.close(); } } diff --git a/sdk/core/azure-core-tracing-opentelemetry-samples/src/samples/java/com/azure/core/tracing/opentelemetry/samples/ListKeyVaultSecretsJaegerExporterSample.java b/sdk/core/azure-core-tracing-opentelemetry-samples/src/samples/java/com/azure/core/tracing/opentelemetry/samples/ListKeyVaultSecretsJaegerExporterSample.java deleted file mode 100644 index f6a1a87960608..0000000000000 --- a/sdk/core/azure-core-tracing-opentelemetry-samples/src/samples/java/com/azure/core/tracing/opentelemetry/samples/ListKeyVaultSecretsJaegerExporterSample.java +++ /dev/null @@ -1,83 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package com.azure.core.tracing.opentelemetry.samples; - -import com.azure.identity.DefaultAzureCredentialBuilder; -import com.azure.security.keyvault.secrets.SecretClient; -import com.azure.security.keyvault.secrets.SecretClientBuilder; -import com.azure.security.keyvault.secrets.models.KeyVaultSecret; -import io.opentelemetry.api.trace.Span; -import io.opentelemetry.api.trace.Tracer; -import io.opentelemetry.context.Scope; -import io.opentelemetry.exporter.jaeger.JaegerGrpcSpanExporter; -import io.opentelemetry.sdk.OpenTelemetrySdk; -import io.opentelemetry.sdk.trace.SdkTracerProvider; -import io.opentelemetry.sdk.trace.export.SimpleSpanProcessor; - -import java.time.Duration; - -/** - * Sample to demonstrate using {@link JaegerGrpcSpanExporter} to export telemetry events when asynchronously creating - * and listing secrets from a Key Vault using the {@link SecretClient}. - */ -public class ListKeyVaultSecretsJaegerExporterSample { - private static final Tracer TRACER = configureJaegerExporter(); - private static final String VAULT_URL = ""; - - /** - * The main method to run the application. - * - * @param args Ignored args. - */ - public static void main(String[] args) { - SecretClient secretClient = new SecretClientBuilder() - .vaultUrl(VAULT_URL) - .credential(new DefaultAzureCredentialBuilder().build()) - .buildClient(); - - doClientWork(secretClient); - } - - /** - * Configure the OpenTelemetry {@link JaegerGrpcSpanExporter} to enable tracing. - * - * @return The OpenTelemetry {@link Tracer} instance. - */ - private static Tracer configureJaegerExporter() { - // Export traces to Jaeger - JaegerGrpcSpanExporter jaegerExporter = - JaegerGrpcSpanExporter.builder() - .setEndpoint("http://localhost:14250") - .setTimeout(Duration.ofMinutes(30000)) - .build(); - - // Set to process the spans by the Jaeger Exporter - return OpenTelemetrySdk.builder() - .setTracerProvider( - SdkTracerProvider.builder().addSpanProcessor(SimpleSpanProcessor.create(jaegerExporter)).build()) - .buildAndRegisterGlobal() - .getTracer("List-KV-Secrets-Sample"); - } - - /** - * Create a secret and list all the secrets for a Key Vault using the - * {@link SecretClient} with distributed tracing enabled and using the Jaeger exporter to export telemetry events. - */ - @SuppressWarnings("try") - private static void doClientWork(SecretClient secretClient) { - - Span span = TRACER.spanBuilder("my-span").startSpan(); - try (Scope s = span.makeCurrent()) { - // current span propagates into synchronous calls automatically. ApplicationInsights or OpenTelemetry agent - // also propagate context through async reactor calls. - secretClient.setSecret(new KeyVaultSecret("StorageAccountPassword", "password")); - secretClient.listPropertiesOfSecrets().forEach(secretProperties -> { - KeyVaultSecret secret = secretClient.getSecret(secretProperties.getName()); - System.out.printf("Retrieved Secret with name: %s%n", secret.getName()); - }); - } finally { - span.end(); - } - } -} diff --git a/sdk/core/azure-core-tracing-opentelemetry-samples/src/samples/java/com/azure/core/tracing/opentelemetry/samples/TracingJavaDocCodeSnippets.java b/sdk/core/azure-core-tracing-opentelemetry-samples/src/samples/java/com/azure/core/tracing/opentelemetry/samples/TracingJavaDocCodeSnippets.java index bba479c1a55fd..5bf4d5d352f46 100644 --- a/sdk/core/azure-core-tracing-opentelemetry-samples/src/samples/java/com/azure/core/tracing/opentelemetry/samples/TracingJavaDocCodeSnippets.java +++ b/sdk/core/azure-core-tracing-opentelemetry-samples/src/samples/java/com/azure/core/tracing/opentelemetry/samples/TracingJavaDocCodeSnippets.java @@ -9,15 +9,15 @@ import com.azure.core.util.Context; import com.azure.core.util.TracingOptions; import com.azure.core.util.tracing.TracerProvider; -import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.api.OpenTelemetry; import io.opentelemetry.api.trace.Span; import io.opentelemetry.api.trace.Tracer; import io.opentelemetry.context.Scope; import io.opentelemetry.exporter.logging.LoggingSpanExporter; import io.opentelemetry.sdk.OpenTelemetrySdk; +import io.opentelemetry.sdk.autoconfigure.AutoConfiguredOpenTelemetrySdk; import io.opentelemetry.sdk.trace.SdkTracerProvider; -import io.opentelemetry.sdk.trace.export.SimpleSpanProcessor; +import io.opentelemetry.sdk.trace.export.BatchSpanProcessor; import static com.azure.core.util.tracing.Tracer.PARENT_TRACE_CONTEXT_KEY; @@ -31,16 +31,15 @@ public void sampleGlobalSdkConfiguration() { // BEGIN: com.azure.core.util.tracing.TracingOptions#default // no need to configure OpenTelemetry if you're using the OpenTelemetry Java agent (or another vendor-specific Java agent based on it). - // if you're using OpenTelemetry SDK, you can configure it with io.opentelemetry:opentelemetry-sdk-extension-autoconfigure package: - // AutoConfiguredOpenTelemetrySdk.initialize(); + OpenTelemetry opentelemetry = AutoConfiguredOpenTelemetrySdk.initialize().getOpenTelemetrySdk(); // configure Azure Client, no metric configuration needed AzureClient sampleClient = new AzureClientBuilder() .endpoint("https://my-client.azure.com") .build(); - Span span = GlobalOpenTelemetry.getTracer("azure-core-samples") + Span span = opentelemetry.getTracer("azure-core-samples") .spanBuilder("doWork") .startSpan(); @@ -63,10 +62,10 @@ public void customProviderSdkConfiguration() { // configure OpenTelemetry SDK explicitly per https://opentelemetry.io/docs/instrumentation/java/manual/ SdkTracerProvider tracerProvider = SdkTracerProvider.builder() - .addSpanProcessor(SimpleSpanProcessor.create(LoggingSpanExporter.create())) + .addSpanProcessor(BatchSpanProcessor.builder(LoggingSpanExporter.create()).build()) .build(); - OpenTelemetry openTelemetry = OpenTelemetrySdk.builder().setTracerProvider(tracerProvider).build(); + OpenTelemetrySdk openTelemetry = OpenTelemetrySdk.builder().setTracerProvider(tracerProvider).build(); // Pass OpenTelemetry container to TracingOptions. TracingOptions customTracingOptions = new OpenTelemetryTracingOptions() .setOpenTelemetry(openTelemetry); @@ -82,13 +81,14 @@ public void customProviderSdkConfiguration() { sampleClient.methodCall("get items"); // END: com.azure.core.tracing.TracingOptions#custom + openTelemetry.close(); } public void passContextExplicitly() { // BEGIN: com.azure.core.util.tracing#explicit-parent SdkTracerProvider tracerProvider = SdkTracerProvider.builder() - .addSpanProcessor(SimpleSpanProcessor.create(LoggingSpanExporter.create())) + .addSpanProcessor(BatchSpanProcessor.builder(LoggingSpanExporter.create()).build()) .build(); AzureClient sampleClient = new AzureClientBuilder() @@ -110,6 +110,7 @@ public void passContextExplicitly() { parent.end(); // END: com.azure.core.util.tracing#explicit-parent + tracerProvider.close(); } /** diff --git a/sdk/core/azure-core-tracing-opentelemetry/README.md b/sdk/core/azure-core-tracing-opentelemetry/README.md index 666ea28e868dd..17662d13cedae 100644 --- a/sdk/core/azure-core-tracing-opentelemetry/README.md +++ b/sdk/core/azure-core-tracing-opentelemetry/README.md @@ -75,10 +75,10 @@ Pass OpenTelemetry TracerProvider to Azure client: // configure OpenTelemetry SDK explicitly per https://opentelemetry.io/docs/instrumentation/java/manual/ SdkTracerProvider tracerProvider = SdkTracerProvider.builder() - .addSpanProcessor(SimpleSpanProcessor.create(LoggingSpanExporter.create())) + .addSpanProcessor(BatchSpanProcessor.builder(LoggingSpanExporter.create()).build()) .build(); -OpenTelemetry openTelemetry = OpenTelemetrySdk.builder().setTracerProvider(tracerProvider).build(); +OpenTelemetrySdk openTelemetry = OpenTelemetrySdk.builder().setTracerProvider(tracerProvider).build(); // Pass OpenTelemetry container to TracingOptions. TracingOptions customTracingOptions = new OpenTelemetryTracingOptions() .setOpenTelemetry(openTelemetry); @@ -133,7 +133,7 @@ Pass OpenTelemetry `Context` under `PARENT_TRACE_CONTEXT_KEY` in `com.azure.core ```java com.azure.core.util.tracing#explicit-parent SdkTracerProvider tracerProvider = SdkTracerProvider.builder() - .addSpanProcessor(SimpleSpanProcessor.create(LoggingSpanExporter.create())) + .addSpanProcessor(BatchSpanProcessor.builder(LoggingSpanExporter.create()).build()) .build(); AzureClient sampleClient = new AzureClientBuilder() @@ -181,7 +181,6 @@ try { } finally { span.end(); } - ``` ### Using the plugin package with AMQP client libraries diff --git a/sdk/core/azure-core-tracing-opentelemetry/src/main/java/com/azure/core/tracing/opentelemetry/OpenTelemetryTracingOptions.java b/sdk/core/azure-core-tracing-opentelemetry/src/main/java/com/azure/core/tracing/opentelemetry/OpenTelemetryTracingOptions.java index 00d39794a7061..6183b68910b84 100644 --- a/sdk/core/azure-core-tracing-opentelemetry/src/main/java/com/azure/core/tracing/opentelemetry/OpenTelemetryTracingOptions.java +++ b/sdk/core/azure-core-tracing-opentelemetry/src/main/java/com/azure/core/tracing/opentelemetry/OpenTelemetryTracingOptions.java @@ -40,10 +40,10 @@ TracerProvider getOpenTelemetryProvider() { * * // configure OpenTelemetry SDK explicitly per https://opentelemetry.io/docs/instrumentation/java/manual/ * SdkTracerProvider tracerProvider = SdkTracerProvider.builder() - * .addSpanProcessor(SimpleSpanProcessor.create(LoggingSpanExporter.create())) + * .addSpanProcessor(BatchSpanProcessor.builder(LoggingSpanExporter.create()).build()) * .build(); * - * OpenTelemetry openTelemetry = OpenTelemetrySdk.builder().setTracerProvider(tracerProvider).build(); + * OpenTelemetrySdk openTelemetry = OpenTelemetrySdk.builder().setTracerProvider(tracerProvider).build(); * // Pass OpenTelemetry container to TracingOptions. * TracingOptions customTracingOptions = new OpenTelemetryTracingOptions() * .setOpenTelemetry(openTelemetry);