in google-cloud-spanner-hibernate-samples/spring-data-jpa-full-sample/src/main/java/com/google/cloud/spanner/sample/opentelemetry/OpenTelemetryInitializer.java [54:96]
public void onApplicationEvent(ApplicationEnvironmentPreparedEvent event) {
ConfigurableEnvironment environment = event.getEnvironment();
boolean enabled =
Boolean.TRUE.equals(environment.getProperty("open_telemetry.enabled", Boolean.class));
String project = environment.getProperty("open_telemetry.project");
String serviceName = environment.getProperty("open_telemetry.service_name");
if (Strings.isNullOrEmpty(serviceName)) {
serviceName = "spanner-spring-data-jpa-sample-" + ThreadLocalRandom.current().nextInt();
}
if (!enabled || Strings.isNullOrEmpty(project)) {
return;
}
// Enable OpenTelemetry tracing in Spanner.
SpannerOptions.enableOpenTelemetryTraces();
if (!hasDefaultCredentials()) {
// Do not create an OpenTelemetry object if this environment does not have any default
// credentials configured. This could for example be on local test environments that use
// the Spanner emulator. This will trigger the use of OpenTelemetry.noop().
return;
}
TraceConfiguration traceConfiguration =
TraceConfiguration.builder().setProjectId(project).build();
SpanExporter traceExporter = TraceExporter.createWithConfiguration(traceConfiguration);
// Create an OpenTelemetry object and register it as the global OpenTelemetry object. This
// will automatically be picked up by the Spanner libraries and used for tracing.
this.openTelemetrySdk =
OpenTelemetrySdk.builder()
.setTracerProvider(
SdkTracerProvider.builder()
// Set sampling to 'AlwaysOn' in this example. In production, you want to reduce
// this to a smaller fraction to limit the number of traces that are being
// collected.
.setSampler(Sampler.alwaysOn())
.setResource(Resource.builder().put("service.name", serviceName).build())
.addSpanProcessor(BatchSpanProcessor.builder(traceExporter).build())
.build())
.buildAndRegisterGlobal();
}