Debugging is the developer’s best friend when it comes to understanding how code really executes – especially when trying to figure out why the code is not behaving as expected. Debugging works exceptionally well in monolithic apps or in service-oriented apps when you know exactly to which service instance you need to attach your debugger.

In modern application architectures that embrace micro-services which either run on your machine, in a container or in the cloud, it is getting trickier to attach your debugger to all those JVMs, CLRs, PHP or Node.js engines. Amazon in their recent AWS X-Ray announcement made a good step forward to raise the awareness of distributed tracing. Zipkin is another library that tries to address the same problem of collecting transactional data of highly-distributed applications. I have to admit that I haven’t used either of them but AFAIK both require manual instrumentation in order to trace transactional executions, and you need to take care of passing the trace token (Transaction ID) from one tier to the next.

When I started at Dynatrace back in April 2008 this problem of distributed tracing was already solved through our PurePath technology which never required any manual code change. We leverage the runtime instrumentation capabilities of Java, .NET, PHP, Node.js and other technologies to automatically inject these “tracing calls” into your application containers and leverage the same mechanism to transport the PurePath ID (Transaction ID) from one service layer to the next. We even automatically trace asychronous communication channels such as asynchronous threads, messaging or asynchronous web service calls. I recorded a YouTube Tutorial that explains how PurePath works in case you are interested: PurePath Deep Dive

Transaction Flow is a popular visualization of the data highlighting how transactions flow through the distributed application.
Transaction Flow is a popular visualization of the data highlighting how transactions flow through the distributed application.

Besides overwhelming our users with too much data, we focus on telling you where we can start improving. Through our Automatic Pattern Detection capability we tell you whether your code is suffering from common problems such as N+1 Query Pattern to the Database or between Services, whether you are spawning too many threads, or sending too many bytes over the wire:

Instead of just tracing Dynatrace also tells you which problem patterns your code is currently suffering from. Allowing you to focus on fixing and not finding.
Instead of just tracing Dynatrace also tells you which problem patterns your code is currently suffering from. Allowing you to focus on fixing and not finding.

PurePath enables more than Distributed Tracing

There are many cool things I love about PurePath. You can find a YouTube Tutorial for all the reasons on my channel if you want to learn more – but here are some of the things everyone should know!

Extending PurePath Information via Configuration

PurePath relies on so-called Sensors. A Sensor defines which method to instrument (e.g: Servlet.doGet, Statement.execute, AxisEngine.send) and what type of information to capture (HTTP Parameter, method argument or return value, SQL statements & bind values). While Dynatrace provides a great deal of out-of-the-box Sensors it also allows you to define your own Sensors to trace method executions that you care about. You can also configure the behavior of out-of-the-box Sensors, e.g: capture certain log messages, HTTP Session Objects or Exceptions. This can all be done through simple configuration – no code change necessary:

The PurePath Tree itself shows the real power of Dynatrace. Automatic Tracing across runtime and thread boundaries and capturing additional performance relevant information through Auto Sensors.
The PurePath Tree itself shows the real power of Dynatrace. Automatic Tracing across runtime and thread boundaries and capturing additional performance relevant information through Auto Sensors.

Learn more about Sensors by watching these YouTube Tutorials: Capturing Context Data with Sensors and Advanced Sensors.

Memory, CPU and Stack Analysis comes for free

If you want to analyze a memory leak, take a CPU Sample, or a stack trace, there is no need any longer to remote connect to that runtime or ask anyone to take a thread dump and send it over to you. Once Dynatrace monitors your application tier you can create full heap dumps, thread dumps or capture CPU Samples from your central Dynatrace Client. Or do it via the REST API and automate it J

Dynatrace automatically provides Memory, CPU and Thread Dump analysis of every tier monitored. All through the Dynatrace Client or the REST API
Dynatrace automatically provides Memory, CPU and Thread Dump analysis of every tier monitored. All through the Dynatrace Client or the REST API.

Make sure to watch my Tutorial on Memory Diagnostics with Dynatrace to see this in action.

Did I mention End-User Monitoring?

If you are not developing a batch job or “just a service” chances are that some real end user is using your software. Whether through a browser or a mobile app, Dynatrace provides that additional level of visibility by automatically extending the trace towards the end user device. We call this UEM (User Experience Management). For web applications, we automatically inject a JavaScript library on your page to capture performance in the browser (mobile or desktop). For mobile native, we give you a library that you compile into your app. Now you see every single click, swip & drag of your users and how that invokes your backend code.

Dynatrace captures every user interaction starting from the device. Helps you understand how users navigate through your application and where they struggle.
Dynatrace captures every user interaction starting from the device. Helps you understand how users navigate through your application and where they struggle.
Dynatrace extends its PurePath to start on the users device. Full End-to-End tracing including key web performance metrics from the device itself
Dynatrace extends its PurePath to start on the users device. Full End-to-End tracing including key web performance metrics from the device itself

Check out my tutorials on Advanced User Experience Management as well as Web Performance Optimization with UEM to learn more.

Tracing should be free and easy for Developer and Architects

About two years ago I was happy to give Developers the Dynatrace AppMon & UEM Free Trial and Personal License. You start off with 30 Days of capturing PurePath for distributed applications across multiple servers (physical or virtual doesn’t matter). After 30 days it converted to a Personal License which still gives you full features with the only limitation that it only works on your local workstation.

Times have changed – so have development environments. I see many developers building microservice applications. They may use a local IDE but the services get automatically deployed into Docker containers, into EC2, or straight to a PaaS. To give developers free access to PurePaths in these environments we decided to provide a new Personal License Model that is not limited to localhost applications. It is our “Online Personal License” which allows you to connect agents that are distributed across containers, clouds, or old fashioned bare-metal servers to your Dynatrace AppMon Server. This also allows you to install your Dynatrace Server wherever you like and then connect agents from different machines. In order to support the use cases for developers, architects and testers, but to avoid abuse, we limit the number of concurrent connected agents, as well as enforcing a time limit (if we see agents being connected 24/7 for weeks you are probably not using it for your local development use case).

I think these are exciting times because we all understand that Distributed Tracing is the new Debugging. But it shouldn’t require you to modify your code to obtain visibility. It should just work out of the box with all the bells and whistles that you expect from a modern tracing solution.

It just takes two steps to get it:

  1. Register for a regular Personal License @ http://bit.ly/dtpersonal
  2. Follow the instructions you get via email and apply for the Online Personal License option at the end of your regular 30 day trial