Analysing Kieker with JBoss DVDStore sample application
Kieker Monitoring is a free, open-source application performance monitoring and dynamics software analysis framework, that is developed by the university of Kiel and the university of Stuttgart. According to them, it has been used and extended in several academic and industrial projects. Together with my collegue Ivan Senic we thought we give it a try.
What is Kieker all about
Kieker provides a easy, yet powerful framework that allow the user to build up an application monitoring environment. This environment is highly configurable and allows the user to easily integrate his own realizations.
MonitoringProbes collect monitoring metrics and provide them to the MonitoringController. Connected MonitoringWriters take the monitoring metrics and write them to a suitable storage. Monitoring readers read the Monitoring Records and pass them on to a sophisticated pipe and filter framework that analyzes the data and provide the visualization. Kieker provides out-of-the-box several different realizations for all components in the framework.
(taken from the user guide at http://sourceforge.net/projects/kieker/files/kieker/kieker-1.7/kieker-1.7_userguide.pdf/download)
Trying it out with the JBoss DVDStore
We chose to use the DVD store sample application that ships with JBoss 5.1 to test Kieker; basically because we use this application to test our performance diagnosis tool inspectIT and thus have everything already setup.
We used the AspectJ approach of Kieker to integrate the monitoring probes with the application. This process is quite straight-forward, we only needed to adapt the aop.xml file and define the classes we want to monitor within it.
Packaging the aop.xml file and the kieker-aspectj.jar with the application and adapting the startup script of the application server, we had the monitoring running and saw that the monitoring writer (an asynchronous file writer by default) writing monitoring data to a local folder.
In order to also integrate the monitoring of classes loaded by the system classloader of JBoss (e.g. Servlets), we figured that we have to move the kieker-aspectj.jar to the library folder of JBoss, so that the system classloader loads the jar and can weave the monitoring probes into the classes loaded by the system classloader as well. To simplify matters, we added the aop.xml file to the kieker-aspectj.jar so we did not have to bother with the correct positioning of this file.
To allow Kieker to collect monitoring data, we fired up a JMeter script that simulates about 20 users on the DVDStore application. The result were 94MB of monitoring data that the monitoring writer wrote to the defined output folder.
Currently Kieker Monitoring does not provide a continuous monitoring view of the collected data, but provides offine scripts to create various representations of the collected monitoring data. Using the script is a bit cumbersome at start, but the results are very nice.
The execution of this script creates a deployment component dependency graph for all calls that were made on the application. It provides the number of calls between the components and includes response time information.
The tool allows to create lots of different graphical representations of the monitoring data. Most of these visualizations show high-level overviews of the application.
Kieker comes with a call tracing that correlates method that were invoked with the same request and allow to build call trees from this information. Correlating the traces over multiple JVMs is currently possible for a CXF servlets. Other technologies still have to be implemented.
The monitoring probes that ship with Kieker address time measurements within components. Features like the monitoring of the database calls including the SQL being invoked, very often still the cause for bad performance, is currently not possible. Another feature that we use often in application monitoring is a way to monitor errors and exceptions. But the generic framework would allow to write the monitoring probes, so perhaps we see these features in an upcoming version.
Kieker Monitoring is a monitoring framework that provides – out-of-the-box – offline analysis functionality for the application monitoring. We think that these features are especially useful for architecture and infrastructure detection.
It is possible to use the tool for monitoring of an application, but to do so you need to realize the visualization based on the pipe and filter analysis architecture, which might take some time. The Kieker guys are currently implementing a Kieker-WebGui that will provide out-of-the-box visualization components that can be used for monitoring an application. We are looking forward to that.