Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Instrumentez vos applications Java avec OpenTel...

Instrumentez vos applications Java avec OpenTelemetry !

Second projet le plus actif de la CNCF derrière Kubernetes, OpenTelemetry s'est déjà imposé comme un standard incontournable de l'observabilité. Il permet d’instrumenter vos applications pour générer et exporter des traces, logs, et métriques de façon interopérable sans vendor lock-in.

Mais démarrer avec OpenTelemetry peut être intimidant avec beaucoup de concepts et de choix à faire lors de sa mise en œuvre. Quels sont les concepts clés à connaître ? Quelles sont les approches à explorer lorsque que l'on souhaite l'appliquer à son projet ? Comment poser les fondations de l'observabilité de son système distribué ?

Joignez-vous à Bruce Bujon pour une présentation pragmatique, illustrée par du live-coding, des différentes façons d'instrumenter vos applications Java via les outils offerts par OpenTelemetry. Il abordera et implémentera aussi bien les instrumentations manuelles via le SDK, que les supports natifs des différents frameworks, ou encore les instrumentations automatiques à base d'agent. Vous serez alors en mesure de générer des traces dans vos applications, de connaître les avantages et les inconvénients des différentes approches, de savoir comment propager un contexte dans un environnement distribué et bien plus encore. Ne ratez pas sa présentation et commencez à améliorer votre observabilité dès aujourd'hui !

Bruce Bujon

April 18, 2024
Tweet

More Decks by Bruce Bujon

Other Decks in Programming

Transcript

  1. Simple Demo Application 8 Expected Trace: 2 Web Services: order

    storage /order/buy /storage/sock /storage/bag /storage/hat {"count": 234} {"name": "hat, "count": 38} /order/buy /storage/hat /storage/bag /storage/sock
  2. Getting a Tracer - for free 28 SDK extension: autoconfigure

    Environment configuration OTEL_JAVA_GLOBAL_AUTOCONFIGURE_ENABLED=true OTEL_SERVICE_NAME=storage OTEL_DEPLOYMENT_ENVIRONMENT=otel-demo OTEL_EXPORTER_OTLP_ENDPOINT= http://datadog-agent-otel:4317
  3. 30 Framework Support to the rescue Spring Boot OpenTelemetry Starter

    • Logback, Spring Web, Spring Web MVC, Spring Webflux integrations • Native-image support Micronaut OpenTelemetry Module • Tracing only • HTTP, gRPC, Kafka integrations • Native-image support Quarkus OpenTelemetry Extension • Tracing only • REST/Resteasy, GraphQL, Messaging, JDBC, Security integrations • Native-image support Vert.x Tracing Component • Tracing only • HTTP & Event bus integrations
  4. Leveraging Spring Boot starter 31 Spring Boot Starter Environment configuration

    OTEL_SERVICE_NAME=order OTEL_DEPLOYMENT_ENVIRONMENT=otel-demo OTEL_EXPORTER_OTLP_ENDPOINT= http://datadog-agent-otel:4317
  5. Expected Trace 34 Expected Trace: 2 Web Services: {"count": 234}

    {"name": "hat, "count": 38} order storage /order/buy /storage/sock /storage/bag /storage/hat /order/buy /storage/hat /storage/bag /storage/sock
  6. Disconnected Traces 35 4 Distinct traces: 2 Web services: /order/buy

    /storage/hat /storage/bag /storage/sock order storage /order/buy /storage/sock /storage/bag /storage/hat
  7. Context Propagation 37 Produced Traces: 2 Web Services: /order/buy /storage/hat

    order storage /order/buy No tracing context /storage/hat
  8. Context Propagation 38 Produced Trace: W3C Trace Context Headers: traceparent:

    00-0af7651916cd43dd8448eb211c803 19c-b7ad6b7169203331-01 tracestate: datadog=xxx,vendor2=opaqueValue2 2 Web Services: /order/buy /storage/hat order storage /order/buy + Trace Context headers /storage/hat
  9. 47 All other libraries No OpenTelemetry support No hooks to

    attach to No API to retrieve data to observe
  10. 48 All other libraries OpenTelemetry JVM Agent No OpenTelemetry support

    No hooks to attach to No API to retrieve data to observe Bundles 100+ integrations Dynamically patches bytecode Can extract and expose private data
  11. Leveraging OpenTelemetry JVM Agent 49 Environment configuration JAVA_TOOL_OPTIONS= -javaagent:/path/to/opentelemetry-javaagent.jar OTEL_SERVICE_NAME=order

    OTEL_DEPLOYMENT_ENVIRONMENT=otel-demo OTEL_EXPORTER_OTLP_ENDPOINT= http://datadog-agent-otel:4317 Alternative run configuration $ java -javaagent:/path/to/opentelemetry-javaagent.jar \ -Dotel.service.name=order \ -Dotel.deployment.environment=otel-demo \ -Dotel.exporter.otlp.endpoint=http://... \ -jar app.jar
  12. Leveraging OpenTelemetry JVM Agent 50 Dependencies • Remove SDK, exporter,

    autoconfigure • Remove framework support extension • Keep API and semconv Custom instrumentations • Remove route instrumentations • Remove context propagation • Keep manual instrumentation where it adds value Environment configuration JAVA_TOOL_OPTIONS= -javaagent:/path/to/opentelemetry-javaagent.jar OTEL_SERVICE_NAME=order OTEL_DEPLOYMENT_ENVIRONMENT=otel-demo OTEL_EXPORTER_OTLP_ENDPOINT= http://datadog-agent-otel:4317 Alternative run configuration $ java -javaagent:/path/to/opentelemetry-javaagent.jar \ -Dotel.service.name=order \ -Dotel.deployment.environment=otel-demo \ -Dotel.exporter.otlp.endpoint=http://... \ -jar app.jar
  13. OpenTelemetry Instrumentation Summary 54 Framework Support • Good generic instrumentation

    • Only custom instrumentation needed • Support and configuration varies per framework • Limited control over signals OTel auto-instrumentation • The most complete instrumentation • The best support of libraries • Only custom instrumentation needed • Configuration vendor specific • JVM agent required OTel API/SDK • Full control of instrumentation • Good knowledge of OTel required • A lot of custom developments • Painful to instrument libraries