...
Code Block | ||
---|---|---|
| ||
final SdkTracerProvider sdkTracerProvider = SdkTracerProvider .builder() ... .build(); final OpenTelemetrySdkOpenTelemetry openTelemetrySdkopenTelemetry = OpenTelemetrySdk .builder() .setTracerProvider(sdkTracerProvider) ... .buildAndRegisterGlobal(); final Tracer tracer = openTelemetrySdkopenTelemetry.getTracer("web-client"); Response response = WebClient .create("http://localhost:9000/catalog", Arrays.asList(new OpenTelemetryClientProvider(openTelemetry, tracer)) .accept(MediaType.APPLICATION_JSON) .get(); |
...
Code Block | ||||
---|---|---|---|---|
| ||||
final SdkTracerProvider sdkTracerProvider = SdkTracerProvider .builder() ... .build(); final OpenTelemetrySdkOpenTelemetry openTelemetrySdkopenTelemetry = OpenTelemetrySdk .builder() .setTracerProvider(sdkTracerProvider) ... .buildAndRegisterGlobal(); final Tracer tracer = openTelemetrySdkopenTelemetry.getTracer("jaxrs-client"); final OpenTelemetryClientProvider provider = new OpenTelemetryClientProvider(openTelemetrySdkopenTelemetry, tracer); final Client client = ClientBuilder.newClient().register(provider); final Response response = client .target("http://localhost:9000/catalog") .request() .accept(MediaType.APPLICATION_JSON) .get(); |
Configuring Server
Server
...
configuration is a bit simpler than the client one thanks to the feature class available, OpenTelemetryFeature. Depending on the way the Apache CXF is used to configure JAX-RS services, it could be part of JAX-RS application configuration, for example:
Code Block | ||||
---|---|---|---|---|
| ||||
@ApplicationPath("/")
public class CatalogApplication extends Application {
@Override
public Set<Object> getSingletons() {
final SdkTracerProvider sdkTracerProvider = SdkTracerProvider
.builder()
...
.build();
final OpenTelemetry openTelemetry = OpenTelemetrySdk
.builder()
.setTracerProvider(sdkTracerProvider)
...
.buildAndRegisterGlobal();
final Tracer tracer = openTelemetry.getTracer("tracer");
return new HashSet<>(
Arrays.asList(
new OpenTelemetryFeature(openTelemetry, tracer)
)
);
}
} |
Or it could be configured using JAXRSServerFactoryBean as well, for example:
Code Block | ||||
---|---|---|---|---|
| ||||
final SdkTracerProvider sdkTracerProvider = SdkTracerProvider
.builder()
...
.build();
final OpenTelemetry openTelemetry = OpenTelemetrySdk
.builder()
.setTracerProvider(sdkTracerProvider)
...
.buildAndRegisterGlobal();
final Tracer tracer = openTelemetry.getTracer("tracer");
final JAXRSServerFactoryBean factory = RuntimeDelegate.getInstance().createEndpoint(/* application instance */, JAXRSServerFactoryBean.class);
factory.setProvider(new OpenTelemetryFeature(openTelemetry, tracer));
...
return factory.create(); |
Once the span processor(s) and sampler are properly configured, all generated spans are going to be collected and available for analysis and/or visualization.TBD
Distributed Tracing In Action: Usage Scenarios
...