Neben kommerziellen Angeboten für das Applikationsmonitoring existiert eine kleine Schar quelloffener Werkzeuge. Diese hinken zwar oftmals im Leistungsumfang den Marktführern hinterher, bieten dafür einen kostengünstigen Einstieg in das APM. Der Beitrag bietet einen Überblick der Open-Source-Tools für das Performance-Monitoring von Java-Applikationen.
Als James Gosling im Jahr 1995 die erste Java-Version freigibt, sind sich Experten einig: Die stark von C beeinflusste Programmiersprache wird einhellig als großer Wurf bewertet. Nicht nur die Einfachheit und die Objektorientierung wecken große Erwartungen, sondern gerade auch die Architekturneutralität, die Sicherheit und die Netzwerkunterstützung decken vieles von dem ab, was sich Entwickler zu Beginn des Internetbooms wünschen. Heute, 25 Jahre später, ist Java eine der bedeutendsten Entwicklungsplattformen und kommt auf den meisten Rechnern und Mobilgeräten zum Einsatz. Im Bereich der Unternehmens- und Webapplikationen gilt Java Platform Enterprise Edition (Java EE) neben Microsofts NET-Plattform als die wichtigste Softwarearchitektur.
Laut BuiltWith kommt Java EE auf fast 5,3 Millionen Webseiten zum Einsatz [1]. Nicht mitgezählt sind die Millionen lokale Enterprise-Umgebungen, die auf Java basieren. Je bedeutender eine Ausführungsumgebung innerhalb einer IT-Infrastruktur ist, umso kritischer ist das Überwachen relevanter Ausführungsparameter. Administratoren interessieren sich dabei für performance-, datenbank-, speicher- und applikationsspezifische Aspekte. Zwar verfügt die Java-Plattform über verschiedene Monitoringtools [2], doch eignen sich diese in verteilten Umgebungen nur bedingt für umfassende Überwachungsaufgaben. Deutlich einfacher gestaltet sich das Monitoring mithilfe von Werkzeugen, die einen einheitlichen Blick auf alle relevanten Systeminformationen und komplexe Anwendungstopologie erlauben.
Um diese Anforderung zu erfüllen, sind spezielle Überwachungstools notwendig. Hier kommen in der Regel APM-Tools (Application Performance Monitoring) zum Einsatz. Der Markt bietet eine Vielzahl kommerzieller Angebote, die viele Funktionen unter einer Haube vereinen. Auch wenn sich Open-Source-Tools in der Regel auf nur einen Aspekt des Monitorings konzentrieren, bieten sie einen kostengünstigen Einstieg in das APM.
Als James Gosling im Jahr 1995 die erste Java-Version freigibt, sind sich Experten einig: Die stark von C beeinflusste Programmiersprache wird einhellig als großer Wurf bewertet. Nicht nur die Einfachheit und die Objektorientierung wecken große Erwartungen, sondern gerade auch die Architekturneutralität, die Sicherheit und die Netzwerkunterstützung decken vieles von dem ab, was sich Entwickler zu Beginn des Internetbooms wünschen. Heute, 25 Jahre später, ist Java eine der bedeutendsten Entwicklungsplattformen und kommt auf den meisten Rechnern und Mobilgeräten zum Einsatz. Im Bereich der Unternehmens- und Webapplikationen gilt Java Platform Enterprise Edition (Java EE) neben Microsofts NET-Plattform als die wichtigste Softwarearchitektur.
Laut BuiltWith kommt Java EE auf fast 5,3 Millionen Webseiten zum Einsatz [1]. Nicht mitgezählt sind die Millionen lokale Enterprise-Umgebungen, die auf Java basieren. Je bedeutender eine Ausführungsumgebung innerhalb einer IT-Infrastruktur ist, umso kritischer ist das Überwachen relevanter Ausführungsparameter. Administratoren interessieren sich dabei für performance-, datenbank-, speicher- und applikationsspezifische Aspekte. Zwar verfügt die Java-Plattform über verschiedene Monitoringtools [2], doch eignen sich diese in verteilten Umgebungen nur bedingt für umfassende Überwachungsaufgaben. Deutlich einfacher gestaltet sich das Monitoring mithilfe von Werkzeugen, die einen einheitlichen Blick auf alle relevanten Systeminformationen und komplexe Anwendungstopologie erlauben.
Um diese Anforderung zu erfüllen, sind spezielle Überwachungstools notwendig. Hier kommen in der Regel APM-Tools (Application Performance Monitoring) zum Einsatz. Der Markt bietet eine Vielzahl kommerzieller Angebote, die viele Funktionen unter einer Haube vereinen. Auch wenn sich Open-Source-Tools in der Regel auf nur einen Aspekt des Monitorings konzentrieren, bieten sie einen kostengünstigen Einstieg in das APM.
inspectIT
Die schwäbische Firma NovaTec stellt den APM-Spezialisten "inspectIT" [3] als Open Source zur Verfügung. Nach Angaben der Entwickler verfolgt die Software einen benutzertransaktionsfokussierten Ansatz. Der Fokus liegt auf der Analyse von Benutzeranfragen, für die inspectIT einen detaillierten Aufrufsbaum generiert – auch "Invocation Sequence" genannt. Die Sequenz erfasst für jeden Request die konkreten Laufzeiten.
Mit den Daten, die das Tool liefert, lassen sich Perfomance-Probleme aufspüren – angefangen bei der Benutzeranfrage bis hin zur Ursache. Dank der transparenten Integration von Anfragen an das Datenbanksystem kann der IT-Verantwortliche auch Probleme in der Datenbankzugriffslogik identifizieren. Mit inspectIT 1.8.1 haben die Entwickler die Funktion "Real User Monitoring" eingeführt, die Benutzerinteraktionen mit webbasierten Applikationen überwacht.
inspectIT basiert auf drei Komponenten: inspectIT-Sever, -Agent und -User-Interface. Der Agent sammelt die Diagnoseinformationen der Messpunkte und übergibt die Daten an den zentralen inspectIT-Server. Dieser bündelt die Diagnoseinformationen der Agenten und stellt sie dem Anwender über das inspectIT-User-Interface zur Verfügung. Grundsätzlich ist der Agent so konzipiert, dass der Overhead bezüglich CPU- und Speicherverbrauch minimal ausfällt.
Bild 1: inspectIT verwendet das Grafana-Dashboard für die Visualisierung der überwachten Services und deren Interaktionen.
JavaMelody
Zu den weniger bekannten Monitoring-Tools zählt JavaMelody [4], das speziell für Java-EE-Anwendungen entwickelt wurde. Mit dem Programm können Administratoren die Performance von laufenden Anwendungen in QS- und Produktionsumgebungen messen. Aus den Messergebnissen kalkuliert JavaMelody Statistiken, die es über ein schnörkelloses Webinterface ausgibt. Es handelt sich um ein leichtgewichtiges Tool, bei dem die Entwickler bewusst auf eine eigene Datenbank verzichtet haben. Stattdessen kann sich JavaMelody in gängige Java-EE-Applikationen integrieren. Für verschiedene Anwendungsserver wie Alfresco, Liferay und Sonar stehen Plug-ins zur Verfügung, die für eine nahtlose Integration sorgen.
Neben systemspezifischen Zusammenfassungen liefert die Software Einblicke in die Speichernutzung, Threads, Verbindungen, verschiedene Dienste und Fehlerquellen. Anpassungen in JavaMelody erfolgen insbesondere über die XML-basierte Konfiguration. Mit dem Tool lassen sich nicht nur grafische Visualisierungen, sondern auch PDF-Reports generieren. Grundsätzlich bietet das Werkzeug eine passable Bandbreite an Monitoring-Funktionen. Um in den Genuss erweiterter Features zu gelangen, ist allerdings eine intensive Einarbeitung in die Konfigurationsmöglichkeiten notwendig.
Bild 2: JavaMelody bietet eine sehr schlichte Benutzeroberfläche.
MoSKito
Zu den etablierten Werkzeugen gehört das seit 2007 entwickelte MoSKito [5]. Ursprünglich als DevOps-Werkzeug konzipiert, liegt der Fokus heute auf der Performance-Überwachung. Das Open-Source- Projekt dient dem Messen, Analysieren und Optimieren der Geschwindigkeit und des Verhaltens von Java-Applikationen. Dabei ist das primäre Ziel, dem Administrator einen Überblick über den Anwendungsstatus zu präsentieren. MoSKito besteht aus drei unterschiedlichen Werkzeugen, die zusammenspielen:
- MoSKito-Essential: Der Kern des Projekts – das Application-Monitoring.
- MoSKito-Central: Der zentrale Storage-Server speichert die Performancedaten.
- MoSKito-Control: Dient dem Performance-Monitoring in verteilten Webapplikationen.
Nach der Inbetriebnahme sammelt das Tool Leistungsdaten, analysiert diese in Echtzeit und speichert sie in der Datenbank. Das System sammelt unter anderem Leistungsmetriken von Threads, Speichern, Caches, Diensten, SQL-Transaktionen und Lastverteilungen. Es sind keine Code-Anpassungen notwendig, um gängige Anwendungsserver wie Tomcat, Jetty, JBoss oder WebLogic zu überwachen.
MoSKito unterscheidet sich in einem weiteren Punkt von anderen Angeboten: Das Werkzeug verfügt über ein Benachrichtigungssystem, das beim Erreichen eines bestimmten Schwellenwerts Alarm schlägt. Neben den webbasierten Dashboards bietet MoSKito eine mobile App, mit der sich Anwendungen unterwegs überwachen lassen.
Das Open-Source-Projekt unterscheidet sich nicht nur hinsichtlich der Funktionalität von anderen hier vorgestellten Werkzeugen: Der Hersteller bietet zudem kommerziellen Support an.
Glowroot
Die Entwickler von Glowroot [6] heben die besonders einfache Verwendungen, den minimalen Overhead, die umfangreiche Funktionalität sowie die Unterstützung einer Vielzahl von Anwendungsservern hervor. Die Stärken von Glowroot liegen im Überwachen gängiger Java-basierter Application-Server wie Tomcat, Wildfly, WebLogic und WebSphere. Glowroot stellt ein übersichtlich gestaltetes Web-Interface bereit, über das insbesondere die grafischen Auswertungen der Transaktionsperformance verfügbar sind.
Fehlermeldungen stellt die Software auf einer eigenen Registerkarte dar, ebenso die JVM-(Java Virtual Machine)-spezifischen Messergebnisse. Eine einfache Reportfunktion generiert visuelle Darstellungen verschiedener Fehlertypen. Glowroot ist primär für Entwickler interessant, die ihre Entwicklung auf Herz und Nieren überprüfen wollen, bevor sie in den Produktivitätseinsatz gehen. Für Administratoren ist die Monitoring-Umgebung weniger geeignet.
Pinpoint
Zu den Klassikern unter den Java-APM-Tools gehört zweifelsohne Pinpoint [7]. Dieses wurde von Google Dapper inspiriert, ein inzwischen eingestelltes Projekt für das Monitoring verteilter Umgebungen. Pinpoint erlaubt die Analyse der Gesamtstruktur des Systems, indem es Transaktionen über verteilte Anwendungen hinweg verfolgt. Das Programm bietet Funktionen wie:
- Visualisierung der Anwendungstopologie.
- Echtzeit-Monitoring der Applikationen.
- Transparenz auf Codeebene für jede Transaktion.
- APM-Agents, ohne dass Anpassungen der Umgebung notwendig sind.
Die Umgebung besteht aus drei Komponenten. Der Pinpoint-Kollektor empfängt per JDP (Java Discovery Protocol) und TCP die JVM-Informationen von den Agenten und speichert die Daten in einem Apache-HBase-Speicher. Das Web-Interface dient dem Lesen und der Analyse der JVM-Informationen aus dem HBase-Speicher.
Pinpoint generiert Ablaufverfolgungsrouten der Requests von einer Anwendung zu einer anderen und auch zur Datenbank. Die Zeitleiste im Tool listet die protokollierten Ereignisse auf. Die Monitoring-Umgebung liefert eine Visualisierung der Routen und präsentiert zu jedem Zeitpunkt relevante Speicher- und CPU-Auslastungsdaten. Grundsätzlich ist Pinpoint einfach zu bedienen und die Ausgabe leicht nachvollziehbar. Weiterhin kann das Tool sich in MySQL, Oracle-Datenbanken und PostgreSQL integrieren.
Bild 3: Vorbildlich gestaltetes Webinterface gepaart mit vielfältigen Monitoring-Funktionen: Pinpoint gilt zu Recht als eines der besten freien APM-Werkzeuge.
Scouter
Zu den weniger bekannten Java-APM-Spezialisten gehört Scouter [8]. Laut den Entwicklern kann sich Scouter mit kommerziellen Umgebungen wie New Relic und AppDynamics messen. Wie andere hier vorgestellte Werkzeuge setzt auch Scouter auf eine Agenten-Server-Architektur. Der zentrale Scouter-Server sammelt die Daten der Host- und Java-Agenten, konsolidiert und bereitet sie auf. Der Host-Agent liefert insbesondere Informationen zur CPU-, Speicher- und Festplattenperformance; der Java-Agent übermittelt Realtime-Daten zum Ausführen von Java-Applikationen auf Netzwerksystemen.
Über das visuelle Webinterface erhalten Anwender einen tiefgehenden Einblick in das Java-Monitoring. Aus der Visualisierung heraus können sie sich über die XLog-Liste zu den Prozess- beziehungsweise Servicedetails vorarbeiten. Eine der Stärken von Scouter ist die Verfolgung von verknüpften Prozessen. Dazu muss allerdings die entsprechende Tracing-Funktion in der Java-Client-Konfiguration aktiv sein. Das gxid-Modul erzeugt aus den gesammelten Daten ein Baumdiagramm der Services. Auch hier ist es möglich, die Abhängigkeiten und Verknüpfungen unterschiedlicher Dienste zu analysieren.
Eine weitere Besonderheit ist der SFA (Stack Frequency Analyzer), der Informationen über Thread-Stacks sammelt, diese Daten analysiert und anschließend in Statistiken kleidet. Diese Auswertungen lassen sich insbesondere zur Identifikation von ineffizienten Codes verwenden, die den Systemlauf verlangsamen. Scouter eignet sich auch zum Aufdecken von Schwachstellen in Datenbankverbindungen. Das Tool ist nicht auf das Monitoring von Java-Programmen beschränkt, sondern kann auch Nicht-Java-Servlet-Applikationen im Auge behalten.
Stagemonitor
Für die Entwicklung von Stagemonitor [9] zeichnet sich das Münchner Unternehmen iSYS Software verantwortlich. Die Software dient dem Performance-Monitoring von Java-Anwendungen in den Bereichen Entwicklung, Qualitätssicherung und Produktion. Stagemonitor kann sowohl historische als auch Live-Daten von Software-Clustern oder Entwicklerservern anzeigen.
Auch bei diesem Tool kommen Agenten zum Einsatz, die verschiedene Metriken und Request Traces an eine zentrale Datenbank senden. Ein Dashboard dient der Visualisierung und Analyse der Metriken und Requests. Mithilfe verschiedener Abfrage- und Filterfunktionen lässt sich die Visualisierung gezielt einschränken. Grundsätzlich spezialisiert sich Stagemonitor auf das Überwachen von Webanwendungen, unterstützt aber auch andere Applikationsarten.
Den Fokus legt das Programm auf das Monitoring von Cluster-Umgebungen. Dies bedeutet, dass es Anwendungen überwacht, die auf mehreren Servern verteilt ausgeführt werden. Das Tool lässt sich in Zeitreihendatenbanken integrieren und ist für die Verarbeitung von Zeitreihendaten in Verbindung mit Arrays von Zahlen optimiert, die nach Zeit indiziert sind. Stagemonitor unterstützt insbesondere Zeitreihendatenbanken wie Elasticsearch, Graphite und InfluxDB.
Aufseiten der Monitoringfunktionen stellt die Anwendung historische oder Live-Daten aus dem Cluster oder direkt vom Entwicklerserver zur Verfügung und kann benutzerdefinierte Warnungen erstellen sowie Schwellenwerte für jede Metrik definieren. Stagemonitor beinhaltet ein Kibana-Dashboard, das detaillierte Einblicke in die gesammelten Informationen und verarbeitete Anfragen gestattet. Dazu ist weder das Einlesen von Logdateien noch das Aufsetzen von Logstashs notwendig. Funktional bietet Stagemonitor alle wichtigen Funktionen für klassische APM-Aufgaben. Administratoren, die bereits mit dem ELK-Stack (Elasticsearch, Logstash, Kibana) vertraut sind, werden sich mit diesem Werkzeug schnell anfreunden.
Fazit
Die hier vorgestellten freien APM-Werkzeuge eignen sich vor allem, um performancerelevante Informationen zu Java-Applikationen zu erhalten. Sie helfen dabei, Flaschenhälsen auf die Spur zu kommen. Da die Ursachen in komplexen Strukturen äußerst vielfältig sein können, sollte aber nicht zu viel von den Tools erwartet werden.
Administratoren, die erste Erfahrungen mit dem Überwachen von unternehmenskritischen Java-Applikationen sammeln wollen, finden unter den hier vorgestellten Programmen Alternativen zu kommerziellen APM-Angeboten. Und verlockend ist der Griff zu kostenlosen Werkzeugen allemal. Insbesondere die Tools inspectIT, MoSKito, Pinpoint und Stagemonitor sind einen näheren Blick wert. Für das Testen von heterogenen Anwendungsumgebungen dienen die Programme nur bedingt.