As an architect, one of my most critical activity is to regularly monitor my Java based web application’s health during business hours; identify performance bottlenecks and suggest remedial measures. Basically keep the engine humming sweetly without any hiccups. My application is monitored using dynaTrace. dynaTrace has been my trusted partner along with whom I have fought numerous performance related skirmishes and I have come to like it a lot. Recently my organization decided to do an enterprise wide APM roll out of the new kid on the block ‘New Relic‘. The aim of this blog post is to share with all my experiences and observations around the two APM tools, their design philosophies and their differences. My observations are solely in the context of web application performance monitoring, pure Java application monitoring is a completely different ball game.
Detailed Transaction View
So here’s the first point of differentiation. dynaTrace monitors and provides detailed trace for each and every transaction. New Relic samples and reports detailed traces for a few representative transactions.
This is a key design philosophy difference between the two APM tools. dynaTrace provides the performance engineer with individual transaction visibility. This is a great feature for application developers who want to understand what went wrong for a specific transaction. My support teams use the trace information to determine application code issues. The feature is something my team heavily depends on. Today in production we do not need any independent application logging to be enabled. dynaTrace provides all the information we need. I am not saying that APMs should necessarily provide this feature, but it’s a nice to have. If the scope of APM is limited to IT operations team, then what New Relic provides is adequate; however if the potential end user is an application developer, then dynaTrace’s detailed view is worth it’s weight in gold.
The next point I would love to dive into is the concept of ‘plugins’. An application or a platform is a sum of many parts. It includes multiple software products. Both allow end users to create custom product related plugin. Here’s what dynaTrace supports and here’s what New Relic supports. Both depend on open sourced implementation, however i find dynaTrace plugins to be better integrated with the product vis-a-vis the New Relic ones which are grouped together under the New Relic plugins tab.
The end user is interested in getting a pictorial depiction of how an HTTP web request flows through the various components, how time does the request spend in each component. This assists in determining normal or abnormal behavior within the application and helps identify the bottleneck area swiftly. Both the tools provide such a view. dynaTrace calls it ‘Transaction Flow’; New Relic calls it ‘Service Maps’.
Here’s how dynaTrace’s Transaction Flow looks visually.
This is how New Relic’s Service Maps looks visually.
There are two things which I like in dynaTrace’s depiction. It shows the time spent and % contribution against each component. Secondly it lists all dynaTrace monitored components. New Relic lists applications, external services and databases. In a typical web application, web server is an important part of the transaction. New Relic does not depict it in its map.
Data Storage location
dynaTrace offers you an on premise data storage option. This provides you to ability to decide how much data you want to store and for how long. New Relic provides a purely cloud storage option and it’s data storage policy to my knowledge is a standard. No variation allowed. Because the storage location is on cloud, the application team has to be careful around allowing request parameter, query parameter(http or database) binding. Potentially PII/PHI data might be exposed. So some turn off the monitoring or others scrub and push data in cloud. Either way it introduces inefficiencies in monitoring performance especially if the issue is data specific.
New Relic provides a feature called New Relic Query Language(NRQL). This allows the end user the ability to put custom information/attributes and query that stored information. This is something new and dynaTrace does not appear to have an equivalent. This is basically moving from performance monitoring into the reporting/analytics domain, so it brings the question. Do I need my APM tool to provide this or I am better off pushing the data into an analytics/reporting engine which is more suited to handle such activities.
Browser Behavior Monitoring
To summarize, if you want to know how your application is performing, New Relic is adequate. On the other hand you need to determine why the application is slow you need dynaTrace.
So what makes New Relic a compelling offer? It is it’s pricing. dynaTrace is way too expensive as compared to New Relic. Well all good things in life come at a price.
That’s all from my desk at the moment.