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
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:
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:
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
Make sure to watch my Tutorial on Memory Diagnostics with Dynatrace to see this in action.
Did I mention End-User Monitoring?
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:
- Register for a regular Personal License @ http://bit.ly/dtpersonal
- Follow the instructions you get via email and apply for the Online Personal License option at the end of your regular 30 day trial