Instrumentação

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

1. Uso do WithSpan para a instrumentação

Pode ser utilizado o WithSpan para a instrumentação conforme a documentação

2. Criação de spans manuais

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();
  }
}

No DataDog

1. Ver código java

Pode ser conferido na documentação

2. Fazer querys agrupando por serviço

Exemplo

3. Query dos jobs

Link

4. Query de logics

Link

5. Heap dump