Relic Solution: "Supported" Technologies and Instrumentation

The world of Java is tremendously diverse, but there are only a relative few foundational technologies that everything else is built on. If it has a JVM, we can very likely get some data out of it. See the “What is a Java Agent” post

As this is the case, I’d like to elaborate a bit on what is meant when we list a technology as supported.

Application Servers
Listed application servers are those that our developers test against. The Java Agent should install without issue and generally give JVM stats out of the box. The Agent knows what to instrument for an application on a supported app server essentially through a dictionary method of common method and class names which are expected to be found based on the app server.

Application Frameworks, etc.
There’s no magic to how the Java Agent knows what to track. A supported framework is one where our developers have gone in and told the Java Agent what to instrument. Essentially, it is custom instrumentation that is built into the agent.

This instrumentation is built into packages based on the framework. When the New Relic Java Agent is loading, it checks the application for each method in a package. If a method is not found, that package is skipped. Skipping the package on missing methods helps keep overhead down as well as prevent colliding instrumentation. I note this specifically because we in NR Support have seen instances where customers have reworked/renamed a method in a supported framework and lose instrumentation.

Given that the supported instrumentation is essentially based on a list of methods known to our developers, it should be obvious that any methods in your application that are custom written will not be instrumented. Typically this is not an issue as those custom methods are calling methods within the framework and the instrumentation is picking up methods throughout the transaction. I mention this because sometimes customers can be confused as to why the Agent isn’t seeing MyAwesomeMethod() when they are using supported technologies.

I hope that sheds some light on what can easily be considered a black box of instrumentation magic.