Kürzlich wurde Version 2.0 von JAMon veröffentlicht. JAMon ist eine kleine, für Java-Anwendungen nützliche Monitoring-Bibliothek.

In Version 1 gab es die Möglichkeit, Ausführungszeiten von Code programmatisch zu messen:

  1. Monitor m = MonitorFactory.start("berechnung");
  2. BerechnungsModul.berechne();
  3. m.stop();

misst die Ausführungszeit der berechne-Methode. Das interessante hierbei ist

  1. Statistiken werden über die Ausführungszeiten (genauer: Ausführungsdauer) erstellt (Summe, Mittelwert, Standardabweichung und sogar Einteilung in bestimmte Klassen),
  2. Ausführungszeiten werden Namen gegeben (hier „berechnung“) und
  3. Die Statistiken können als HTML-Report ausgegeben (programmatisch oder per JSP).

Damit ist schon viel getan, u.a.:

  • in Webanwendungen kann ich einen Servletfilter erstellen, der die Ausführungsdauer aller (oder nur bestimmter) Aufrufe misst (dies hat bei geringem Aufwand großen Nutzen),
  • Aufrufe an „externe Systeme“ (z.B. Datenbank, Web-Services oder Betriebssystem) können gemessen werden
  • anhand der Messergebnisse kann der Entwickler abschätzen, ob eine Optimierung notwendig ist
  • anhand der Messergebnisse (z.B. im Vergleich zum Vortag) kann der Betrieb abschätzen, ob sich das System derzeit aussergewöhnlich verhält.

In Version 2 (ein komplettes Redesign) kommt hinzu, dass ich nicht nur Zeiten messen kann, sondern beliebige Einheiten. Ich kann z.B. eine Statistik über die Trefferzahl einer Suche führen:

  1. int treffer = Suche.ausfuehren(...)
  2. MonitorFactory.add("treffer","anzahl",treffer);

fügt die Trefferzahl dem Statistikeintrag „treffer“, die in der Einheit „anzahl“ gemessen wird, zu. Bisher habe ich nur noch nicht herausgefunden, wie man Klassen (im Sinne von „Unterteilung des Wertebereiches“) für nutzerdefinierte Einheiten definieren kann.
Alles in allem ein Tool, welches einen großen Nutzen bringt. Das Spring-Framework unterstützt JAMon.