Atualmente iremos utilizar a lib da opentelemetry para instrumentação manual pois a opentracing está depreciada
Obs: deve ser utilizado -Ddd.trace.otel.enabled=true
- PLATFORM_JAVA_OPTS= -javaagent:/usr/local/se/tools/dd-java-agent.jar -Ddd.service=platform -Ddd.env=dev-patrick -Ddd.agent.host=datadog-agent -Ddd.agent.port=8126 -Ddd.profiling.ddprof.liveheap.enabled=true -Ddd.profiling.ddprof.enabled=true -Ddd.profiling.ddprof.alloc.enabled=true -Ddd.profiling.ddprof.wall.enabled=false -Ddd.profiling.enabled=true -Ddd.trace.otel.enabled=true -Xms512m -Xmx3072m -XX:MaxMetaspaceSize=1024m
Pode ser utilizado o WithSpan para a instrumentação conforme a documentação
Pode ser criado spans manuais utilizando a lib open telemetry api. Abaixo temos um exemplo:
import io.opentelemetry.api.trace.Span;
import io.opentelemetry.context.Scope;
// ...
@GetMapping("/rolldice")
public List<Integer> index(@RequestParam("player") Optional<String> player,
@RequestParam("rolls") Optional<Integer> rolls) {
Span span = tracer.spanBuilder("rollTheDice").startSpan();
// Make the span the current span
try (Scope scope = span.makeCurrent()) {
if (!rolls.isPresent()) {
throw new ResponseStatusException(HttpStatus.BAD_REQUEST, "Missing rolls parameter", null);
}
List<Integer> result = new Dice(1, 6).rollTheDice(rolls.get());
if (player.isPresent()) {
logger.info("{} is rolling the dice: {}", player.get(), result);
} else {
logger.info("Anonymous player is rolling the dice: {}", result);
}
return result;
} catch(Throwable t) {
span.recordException(t);
throw t;
} finally {
span.end();
}
}
Pode ser conferido na documentação