A Guide to Local Debugging with Datadog Agent

Written by hacker5281989 | Published 2023/03/21
Tech Story Tags: debugging-tools | java | logging-and-monitoring | mobiledebugging | debugging | testing | software-testing | api-testing

TLDRThe Datadog tool is used to visualize production logs. It can be installed on a MacOSX machine. The tool is written in Java and can be used to monitor Java applications. It is free and available for free on the company's website. The instructions below are for the local installation.via the TL;DR App

Let’s start with ā€œwhyā€ should one even bother with setting up Datadog on the local machine. I can share my motivation to set it up

My strong ā€˜why’:trying to make sense of the flaky tests:

We had an extensive end-to-end test suite with high coverage. But sadly, the tests grew flakier and flakier over time. To my dismay, when the tests were run in isolation, they’d pass. When we ran the entire test suite, many tests would start failing. The application logs corresponding to the tests should help us debug. But I couldn’t even understand where the logs for a particular test started and ended, let alone make sense of them.

Datadog to the rescue 🦸!

We have been usingĀ DatadogĀ in our project to visualize the production logs and we found it super useful. That’s when I had an epiphany! What if I set up Datadog locally to dissect these logs? And that’s what triggered the contents of this blog post.

Our application is written in Java and my local machine runs on MacOS. You could tweak the below steps to suit your need.

What do you need to set up:

  1. Sign up for DatadogĀ here. Our scope here is only local debugging, so aĀ free trialĀ should suffice.
  2. Datadog Agent is theĀ software that monitors the host on which it runs.Ā Settings like service name, environment, etc. can be made in the agent.
  3. dd-trace-java, Datadog's APM (App Performance Monitoring) client Java library.Ā dd-trace-javaĀ is a jar that contains APIs to automatically or manuallyĀ traceĀ andĀ profileĀ Java applications.

Step 1 — Sign up process:

  • After giving your email id and other details, you would be prompted to choose your tech stack on the next page.

  • after you click ā€˜Next’, comes the most important part. You would be given the ā€˜agent setup’ instructions. My local machine is MacOSX, so I chose it appropriately. Please note down theĀ DD_API_KEYĀ andĀ DD_SITEĀ values, as they will be used in the subsequent steps.

Step 2— Datadog Agent Installation:

For MacOS, you could install via brew (package manager for MacOS). Use the commands given here for installation. ¹

  • Customize theĀ datadog-agentĀ as shown below

  • After the above step is completed, you’ll be asked to ā€˜Finish’ in the Datadog-web-UI.

  • You’ll be prompted to add anyĀ integrations. You could addĀ Java,Ā DockerĀ etc (as per your project needs).

Step 3 — Install Datadog tracer:

  • Download theĀ dd-java-agentĀ jar fromĀ here ²

  • For your Java application, make sure you’re using a version of Java that comes with an in-builtĀ FlightRecorder. This is needed for tracing. OpenJdK8 comes with an inbuiltĀ FlightRecorder. If you’re using Oracle Java, you need a commercial license to useĀ **FlightRecorder.**³

Running your application:

  • add the VM options for our java application:
-javaagent:"/Users/home/Downloads/dd-java-agent.jar" -Ddd.profiling.enabled=true -Ddd.logs.injection=true -Ddd.agent.port=8126 -Ddd.service=ecommerce-service -Ddd.env=local -XX:FlightRecorderOptions=stackdepth=256

  • If you are using aĀ gradleĀ task, you can include theĀ jvmArgsĀ as below:

jvmArgs = ["-javaagent:/Users/home/Downloads/dd-java-agent.jar", "-XX:FlightRecorderOptions=stackdepth=256", "-Ddd.profiling.enabled=true", "-Ddd.logs.injection=true", "-Ddd.agent.port=8126", "-Ddd.service=ecommerce-service", "-Ddd.env=local"]

  • Now start your Java application. If the tracing is happening correctly, you should see the below logs:

Logging in Datadog:

  • To enable logs to be streamed to Datadog, follow the instructions in the Datadog Web UI. ⁓

  • ForĀ macOS— Config directory isĀ ~/.datadog-agent/conf.d/java.dĀ and the file is present atĀ ~/.datadog-agent/conf.d/java.d/conf.yaml

  • and now, theĀ logsshould start flowing in Datadog.

Some Tips:

  • Add appropriateĀ debuglogs at the beginning and end of each method in your application. It’s very useful while debugging.

  • Add a mechanism to injectĀ span idandĀ trace id. It’s an amazing lifesaver and puts the logs in proper context.⁵

Conclusion:

Once I had the Datadog agent up and running locally, I was able to view all the requests contextually.

And voila! All of my end-to-end tests are passing now šŸ™‚ Happy logging!

Additional Info:

  • ¹Alternatively, you could also download theĀ dmg packageĀ and install it. This link can also be obtained in the above ā€˜Agent Setup’ step (refer to screenshot)

  • ²Direct download theĀ dd-trace-javaĀ jar.

  • ³ Starting from JDK 11, we may useĀ FlightRecorderwithout activating anything. More details can be foundĀ here.

  • ⁓More details areĀ here.

  • ⁵If your application is Java, you could you this libraryĀ spring-cloud-sleuthĀ for addingĀ span_idĀ andĀ trace_idĀ to the request.


Written by hacker5281989 | Coder
Published by HackerNoon on 2023/03/21