-
Notifications
You must be signed in to change notification settings - Fork 2k
/
AsyncListKeyVaultSecretsLoggingExporterSample.java
84 lines (71 loc) · 3.29 KB
/
AsyncListKeyVaultSecretsLoggingExporterSample.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
package com.azure.core.tracing.opentelemetry;
import com.azure.identity.DefaultAzureCredentialBuilder;
import com.azure.security.keyvault.secrets.SecretAsyncClient;
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.exporter.logging.LoggingSpanExporter;
import io.opentelemetry.sdk.OpenTelemetrySdk;
import io.opentelemetry.sdk.trace.SdkTracerProvider;
import io.opentelemetry.sdk.trace.export.SimpleSpanProcessor;
import reactor.util.context.Context;
import static com.azure.core.util.tracing.Tracer.PARENT_SPAN_KEY;
/**
* Sample to demonstrate using {@link LoggingSpanExporter} to export telemetry events when asynchronously creating
* and listing secrets from a Key Vault using the {@link SecretAsyncClient}.
*/
public class AsyncListKeyVaultSecretsLoggingExporterSample {
private static final Tracer TRACER = configureLoggingSpanExporter();
private static final String VAULT_URL = "<YOUR_VAULT_URL>";
/**
* The main method to run the application.
*
* @param args Ignored args.
*/
public static void main(String[] args) {
doClientWork();
}
/**
* Configure the OpenTelemetry {@link LoggingSpanExporter} to enable tracing.
*
* @return The OpenTelemetry {@link Tracer} instance.
*/
private static Tracer configureLoggingSpanExporter() {
// Tracer provider configured to export spans with SimpleSpanProcessor using
// the Azure Monitor exporter.
SdkTracerProvider tracerProvider =
SdkTracerProvider.builder()
.addSpanProcessor(SimpleSpanProcessor.create(new LoggingSpanExporter()))
.build();
return OpenTelemetrySdk.builder()
.setTracerProvider(tracerProvider)
.buildAndRegisterGlobal()
.getTracer("Async-List-KV-Secrets-Sample");
}
/**
* Create a secret and list all the secrets for a Key Vault using the
* {@link SecretAsyncClient} with distributed tracing enabled and using the Azure Monitor Exporter
* to export telemetry events.
*/
private static void doClientWork() {
SecretAsyncClient secretAsyncClient = new SecretClientBuilder()
.vaultUrl(VAULT_URL)
.credential(new DefaultAzureCredentialBuilder().build())
.buildAsyncClient();
Span userParentSpan = TRACER.spanBuilder("user-parent-span").startSpan();
Context traceContext = Context.of(PARENT_SPAN_KEY, Span.current());
secretAsyncClient.setSecret(new KeyVaultSecret("Secret1", "password1"))
.contextWrite(traceContext)
.subscribe(secretResponse -> System.out.printf("Secret with name: %s%n", secretResponse.getName()));
secretAsyncClient.listPropertiesOfSecrets()
.contextWrite(traceContext)
.doOnNext(secretBase -> secretAsyncClient.getSecret(secretBase.getName())
.contextWrite(traceContext)
.doOnNext(secret -> System.out.printf("Secret with name: %s%n", secret.getName())))
.blockLast();
userParentSpan.end();
}
}