## Datadog Java Tracer ### Motivations The Datadog Java Tracer is an OpenTracing-compatible tracer. It provides all resources needed to instrument your code. Opentracing introduces the concept of the *span*. A span is *timed operation* representing an action in the code. The span can *be linked together*. And a trace is a list of spans, each related to the same top action/operation. Let's see an example. When a client does a request on a Http Endpoint, asking for some BD resources, Opentracing provides a way for measuring the time consumed for each operation: ```` TRACE: client ---> HTTP Endpoint ---> DB Query/Result ---> Custom processing ---> client SPAN 1 (Root Span) ................................................... (end) - 200ms |--------SPAN 2 (Child of 1).................................(end) - 100ms |-----------SPAN 3 (Child of 2).(end) - 50 ms |----------------------------------------SPAN 4 (Child of 2)..(end) - 50 ms ```` This shows a very simple example of how works [Opentracing](http://opentracing.io/). Here, the tracer produces a trace composed of 4 spans, each representing a specific action. ### How to load the Datadog Tracer (DDTrace) in the project? The current implementation uses the trace-resolver feature provides by Opentracing. That means you can add and load the tracer using a Java Agent directly with the JVM. And then, the DDTrace can be configured using a YAML file: `dd-trace.yaml`. By default, the DDTrace tries to reach a local Datadog Agent, but it can change by settings a different location in the config file. Please, refer to the latest configuration template: [dd-trace.yaml](src/main/resources/dd-trace.yaml) ### How to use the Datadog Tracer (DDTrace) to instrument the code? Once, the DDTrace is loaded, you can start to instrument your code using: * The `@Trace` annotation, * Or the Opentracing SDK. This agent is build on the top of the [Open-Tracing contributions](https://github.com/opentracing-contrib/) and the [Datadog tracer](https://github.com/DataDog/dd-trace-java). At the moment, the Datadog Java Agent supports the following framework and librairies: * Databases * JDBC connections * Mongo * Elasticsearch * Web servers and clients * Spring Boot * Jetty Server * Tomcat Servlet * Apache HTTP Client * OkHttp * Queueing * JMS * Third-party * AMS SDK Client #### Instrument your code Here are the instructions. Before start, make sure you have a running Datadog Agent with the [APM feature enabled](http://docs.datadoghq.com/tracing/). 1. Download the latest Datadog Java Agent version: https://mvnrepository.com/artifact/com.datadoghq/dd-java-agent. ```pom.xml com.datadoghq dd-java-agent ${dd-trace.version} ``` 2. Add to the JVM the agent. This can be done by editing the command line or via the pom file. ```pom.xml org.apache.maven.plugins maven-surefire-plugin 2.20 *Test.java ElasticSearchInstrumentationTest.java 3 false -javaagent:${M2_REPO}/com/datadoghq/dd-java-agent/${dd-trace.version}/dd-java-agent-${dd-trace.version}.jar target/FORK_DIRECTORY_${surefire.forkNumber} ``` ### How it's work ### Dig deeper Du coup le Readme.md de `java-trace` il faut un truc plutot simple qui expliqe que c la librarie opentracing compliant de Datadog. Il faut expliquer aussi le resolver et son fichier `.yaml` [10:41] Prend peut etre exemple aussi sur une autre lib opentracing compliant [10:41] Peut etre expliquer ce que c’est un tracer, un span et un ou deux exemple d’instrumentation a la mano¡¡