Eine einfache Monitoring-Plattform zum Überwachen einer Java-Anwendung kann mit Hilfe einiger OpenSource-Tools leicht erstellt werden. Dafür werden folgende Komponenten benötigt: Das JMX-Framework, evtl. eine Möglichkeit zum entfernten Zugriff auf die Anwendung, hierzu wird Jolokia vorgestellt, und ein Framework zum Darstellen schöner Diagramme auf der Monitoring-Webseite.
Was ist JMX?
JMX steht für Java Management Extension und ist eine vom Java Community Process (JSR-3) entwickelte Spezifikation zur Verwaltung und Überwachung von Java-Anwendungen. Teile der JMX Spezifikation sind bereits in der Java 1.5 Standard-API integriert und wurden mit Java 6 stark erweitert. JMX ist nicht nur eine geeignete Technologie, um das Verhalten von Systemen zu kontrollieren, sondern erleichtert auch die Kommunikation von unterschiedlichen Java-Programmen. In der ursprünglichen API unterstützte JMX nur die Kommunikation innerhalb einer JVM (Java Virtual Machine), aber seit der Java Version 6 wird auch die Kommunikation mit anderen JVMs unterstützt.
Die Systemdaten werden von sogenannten MBeans ausgelesen. Diese Java-Objekte werden von speziellen Agents verwaltet oder es kann (wenn die Sicherheitsbestimmtungen das zulassen) auch direkt auf die MBeans zugegriffen werden. Es lassen sich statische (z.B. Betriebssystemdaten) und dynamische (Speicherverbrauch, geladene Klassen..) Systemdaten auslesen. Es stehen fertige HTTP-Adapter für JMX zur Verfügung, wodurch es möglich ist, direkt über einen Webbrowser Werte einer Java-Anwendung zu verändern und auszulesen.
Mit JConsole das System überwachen
Die einfachste Art und Weise seine Systemdaten auszulesen und sich einen Überblick zu verschaffen, ist die von jedem JDK mitgelieferte JConsole zu benutzen. JConsole ist eine seit Java Version 1.5 mitgelieferte Swing-Applikation zur Überwachung von Java Prozessen via JMX auf lokalen oder entfernten Systemen. Sie wird über die Konsole mit Eingabe von jconsole
gestartet (wenn das Verzeichnis JDK_HOME/bin
im System-Pfad ist). Danach kann man wählen, ob das lokale System oder ein entferntes System überwacht werden soll.
Nach dem Aufbau der Verbindung bekommt man einen schnellen Überblick über den aktuellen Speicherbedarf der virtuellen Machine, die durch Java verursachte Prozessorauslastung und vieles mehr. Alle Hauptsichten bieten die Möglichkeit verschiedene Zeitbereiche auszuwählen, welche jedoch nur während der Laufzeit der JConsole aufgezeichnet werden.
Anwendungsbeispiel zum Auslesen der JMX-MBeans mit Java
Im folgenden Beispiel werden die Systemdaten der MBeans in einer Java-Klasse ausgelesen, in Attributen abgespeichert und auf der Konsole ausgegeben.
Downloads:
Jolokia: Remote JMX mit JSON über HTTP
Eine Alternative für den entfernten Zugriff auf JMX ist das Tool Jolokia. Es dient als Alternative zu dem in JMX integrierten JSR-160 connector. Der Client kommuniziert mit seinem Agent über HTTP (GET und POST) und die übertragenen Daten werden in JSON dargestellt.
Jolokia unterstützt auch nicht-Java-Plattformen. So gibt es bisher Clients für JavaScript und Perl und weitere sollen hinzukommen. Zusätzlich zu den standard JMX Operationen bietet Jolokia einmalige Features wie z.B. bulk requests oder feingranulare Sicherheitsbestimmungen.
Die Abhängigkeiten zu Jolokia können mit Maven eingebunden werden. Im folgenden Beispiel wird die Jolokia-Bibliothek für den Jolokia-Java-Client benutzt. Außerdem gibt es noch einen Client für JavaScript und die Jolokia-Core-Bibliothek für die Hauptfunktionalität verschiedenener Agents.
<dependency>
<groupId>org.jolokia</groupId>
<artifactId>jolokia-client-java</artifactId>
<version>
1.0
.
4
</version>
</dependency>
Anwendungsbeispiel für Jolokia mit Java
Downloads:
Darstellung der Monitoring-Daten
Für die Darstellung der ausgelesenen Daten in einer eigenen Anwendung können Diagramme mit den Javascript-Bibliotheken von FLOT oder Highcharts erstellt werden.
Flot ist eine reine Javascript Bibliothek für graphische Darstellungen mit jQuery. Es erstellt graphische Darstellungen aus frei wählbaren Datensätzen auf der Client-Seite.
Highcharts ist ebenfalls eine reine Javascript-Bibliothek für Diagramme. Es bietet die intuitive Erstellung von interaktiven Diagrammen für Web-Applikationen an.
Links:
http://docs.oracle.com/javase/tutorial/jmx/
http://docs.oracle.com/javase/6/docs/technotes/guides/jmx/
http://nurkiewicz.blogspot.de/2011/03/jolokia-highcharts-jmx-for-human-beings.html