Java Simon 1.0, monitoring API, released
December 16, 2008 Leave a comment
It is some time ago when we wanted to use JaMON API to add some monitoring capabilities to our applications. After a few we found it to lack some featrues – especially it was difficult to organize monitors. Hence we decided to create our own alternative that brings two features JaMON can’t provide – monitors organized in a tree hierarchy (similar to JDK14 logging API) and nanosecond precision (which bind us to JDK 1.5 or higher – which we see as no problem for most newly developed applications).
That’s how Java Simon API was born – the project is hosted on Google Code: http://code.google.com/p/javasimon/
Short description from our page:
Java Simon is a simple monitoring API that allows you to follow and better understand your application. Monitors (familiarly called Simons) are placed directly into your code and you can choose whether you want to count something or measure time/duration. Access to Simons is provided via static SimonManager.
We hope all necessary documentation is there and it will be extended in the future for sure. Aside from core functionality featuring standard stopwatch/counter monitor types we provide Simon JDBC proxy driver featuring these monitors – so you can check how various JDBC calls perform, pin down slowest selects, etc. Driver is JDBC 3 compliant with data source implementations available and it was tested with Glassfish/XA datasource with Oracle as the underlying database.
What can typical Stopwatch do?
- it can measure time splits, parallel measurement is supported;
- it provides total time, number of time splits, tracks max/min time, time stamp when extremes were measured, deviation, …;
- and like every Simon it tracks first/last usage time stamp and features like enable/disable/reset are also available.
Why we brought in a new API when there is JaMON available? Well, we tried it with JaMON but than we wanted to crucial things that JaMON doesn’t provide:
- as said – we wanted to measure time in nanoseconds (hence JDK 1.5 or higher is required);
- we wanted all monitors to be organized somehow – so we implemented tree hierarchy similar to java.util.logging API – this provides powerful features like enable/disable/reset of the whole subtrees of this monitor hierarchy.
Version 1.0 contains core functionality and we realize it lacks many important features in the bigger picture of application monitoring. Our plans in the future covers:
- Declarative Simon configuration.
- JMX access to Simons, their values and enable/disable features.
- Sampling, collecting, agregating with persistence backend (file/DB).
- …and probably more, but not all in the next major release.