Dynamically change monitoring points during JVM run-time with inspectIT
For a long time commercial Application Performance Management tools like Dynatrace or AppDyanmics have been able to update the monitoring points in your application without a need to restart the JVM where the application runs. No matter if you are trying to configure sensibility of your monitoring tool in development or production environment, this feature enables you to do it fast and easy. Especially when restarting your application is not something you can afford easily.
The inspectIT team worked hard in order to provide the same feature in inspectIT, as we strongly believe that open-source APM scene deserves to finally have a tool that can support dynamic modification of monitoring points. As a part of version 1.7 inspectIT has seamlessly integrated the dynamic instrumentation to its configuration interface.
What is dynamic instrumentation?
With inspectIT dynamic instrumentation you can change monitoring profiles by adding or removing method sensors and afterwards applying those changes to the Java agents that are currently active. It’s very similar to a hot code deployment, where your code changes are immediately applied to the running application. With every configuration change inspectIT will inform you if there is an agent that has pending updates and you can easily fire the update. It takes no more than 30 seconds for changes to be applied.
What can be dynamically changed?
At the moment you can dynamically change settings for every method sensor that inspectIT offers. Be it timer, exception or SQL sensor: it’s just one click to activate or deactivate it. The things that you cannot dynamically change are: exclude-rules, JMX monitoring points and general environment configuration.
Of course, check out the following video where we started the DVD Store application without any monitoring points. Then we added new method sensors via inspectIT configuration interface, fired the dynamic instrumentation and voilá! We have instrumented our application during run-time. Fast & easy!
The dynamic instrumentation feature should be used as less as possible on your production systems. The reason for this is that in the background inspectIT has to re-transform every class which contains new instrumentation points. Additionally, the re-transformation will screw up all the method inlinings that the JIT compiler has done already, which decreases performance of your application. Furthermore, re-transformation is not working very well for the IBM JVMs, thus, if your application runs on an IBM JVM you won’t be able to use dynamic instrumentation by default. However, inspectIT provides configuration options to control whether dynamic instrumentation should be used or not.