Instrumentierung zum Monitoring mittels Aspekt-orientierter Programmierung – Erfahrungsbericht – Thilo Focke2 , Wilhelm Hasselbring3 , Matthias Rohr3 und Johannes-Gerhard Schute2 2 3 EWE TEL GmbH, Cloppenburger Str. 310, 26133 Oldenburg Graduiertenkolleg TrustSoft, Abteilung Software Engineering, Universität Oldenburg http://se.informatik.uni-oldenburg.de, http://www.trustsoft.org 29. März 2007, Hamburg W. Hasselbring (SE Universität Oldenburg) Instrumentierung zum Monitoring mittels AOP 29. März 2007, Hamburg 1 / 27 Motivation Typische Herausforderungen beim Monitoring in Unternehmen wie der EWE TEL: Große Anzahl der zu überwachenden Systeme (mehrere Hundert) Ausfälle/Störungen der Applikationen sind geschäftskritisch Zusammenhang zwischen Verfügbarkeit und Performanz Aktivierte Defekte äußern sich oft durch Performanz-Anomalien „Hardcodiertes“ Monitoring ist schwer wartbar: Vermischung von Kernfunktionalität und Monitoring-Mechanismen W. Hasselbring (SE Universität Oldenburg) Instrumentierung zum Monitoring mittels AOP 29. März 2007, Hamburg 2 / 27 Gliederung 1 Monitoring von Laufzeitverhalten 2 Aspekt-orientierte Programmierung 3 Anwendungsszenario 4 Laufzeit- und Kompilierzeit-Weben 5 Zusammenfassung und Ausblick W. Hasselbring (SE Universität Oldenburg) Instrumentierung zum Monitoring mittels AOP 29. März 2007, Hamburg 3 / 27 Monitoring von Laufzeitverhalten Monitoring von Laufzeitverhalten Monitoring [IEEE Standards Board 2002] Erfassen und Aufzeichnen (teilweise auch Analysieren und Überwachen) des Laufzeitverhaltens von Komponenten, wie beispielsweise Softwarekomponenten, Diensten oder Betriebssystemprozessen. W. Hasselbring (SE Universität Oldenburg) Instrumentierung zum Monitoring mittels AOP 29. März 2007, Hamburg 4 / 27 Monitoring von Laufzeitverhalten Monitoring von Laufzeitverhalten Monitoring [IEEE Standards Board 2002] Erfassen und Aufzeichnen (teilweise auch Analysieren und Überwachen) des Laufzeitverhaltens von Komponenten, wie beispielsweise Softwarekomponenten, Diensten oder Betriebssystemprozessen. Monitoring auf verschiedenen Systemebenen Applikation J2EE/Middleware Monitoring Java Virtual Machine Betriebssystem Hardware W. Hasselbring (SE Universität Oldenburg) Durchsatz, Antwortzeit,... Sessions, Threads, Pools,... Heap Verbrauch,... Verfügbarkeit,... CPU Auslastung,... Instrumentierung zum Monitoring mittels AOP 29. März 2007, Hamburg 4 / 27 Monitoring von Laufzeitverhalten Monitoring von Laufzeitverhalten – Herausforderungen Identifizieren von relevanten Positionen für Messpunkte Wo soll was gemessen werden? Ein Vorgehensmodell für das Performance-Monitoring von Informationssystemlandschaften ist erforderlich [Focke u. a. 2007] Instrumentierung der Anwendungen Manuelle Code Instrumentierung Erweiterung von Applikationscode Middleware Interception Nutzen von proprietären Schnittstellen Aspekt-orientierte Programmierung Kapselung von Querschnittsbelangen W. Hasselbring (SE Universität Oldenburg) Instrumentierung zum Monitoring mittels AOP 29. März 2007, Hamburg 5 / 27 Monitoring von Laufzeitverhalten Monitoring als Querschnittsbelang XML Parsing in Tomcat W. Hasselbring (SE Universität Oldenburg) Instrumentierung zum Monitoring mittels AOP 29. März 2007, Hamburg 6 / 27 Monitoring von Laufzeitverhalten Monitoring als Querschnittsbelang XML Parsing in Tomcat Logging in Tomcat W. Hasselbring (SE Universität Oldenburg) Instrumentierung zum Monitoring mittels AOP 29. März 2007, Hamburg 6 / 27 Aspekt-orientierte Programmierung Aspekt-orientierte Programmierung Aspect-Orientierte Programmierung (AOP) [Kiczales u. a. 1997]: Trennt Querschnittsbelange von den Kernfunktionen. Querschnittsbelange werden „Aspekte” genannt und separat von anderen Teilen des Systems entwickelt. Ein verbreitetes Werkzeug für AOP in Java stellt AspectJ dar. AspectJ ist eine Erweiterung zu Java: Java + Aspekte. AspectJ-Unterstützung existiert für viele IDEs, wie z.B. Eclipse, JBuilder, Forté (http://www.eclipse.org/aspectj/). Seit Java Version 5 können Annotationen genutzt werden. AOP wird auch in Enterprise Frameworks wie Spring und Enterprise Java Beans (Version 3) unterstützt. W. Hasselbring (SE Universität Oldenburg) Instrumentierung zum Monitoring mittels AOP 29. März 2007, Hamburg 7 / 27 Anwendungsszenario Outline 1 Monitoring von Laufzeitverhalten 2 Aspekt-orientierte Programmierung 3 Anwendungsszenario 4 Laufzeit- und Kompilierzeit-Weben 5 Zusammenfassung und Ausblick W. Hasselbring (SE Universität Oldenburg) Instrumentierung zum Monitoring mittels AOP 29. März 2007, Hamburg 8 / 27 Anwendungsszenario Anwendungsszenario und Anforderungen Anwendungsszenario Enterprise Java-basiertes Kundenportal des im norddeutschen Raum tätigen Telekommunikationsunternehmens EWE TEL Sprach-, Internet- und Datendiensten werden über dieses Portal durch die Kunden selbst angepasst Anforderungen an die Performance-Messung Der Performance Monitor soll auf verschiedenen Middleware-Systemen einsetzbar sein (Tomcat, WebLogic, Sun AS, Geronimo) Die jeweilige Middleware soll im Zuge des Performance Monitoring nicht modifiziert werden Die zu überwachenden Applikationen sollen ausschließlich zum Setzen der Messpunkte modifiziert werden Der durch die Performance-Messungen entstehende Overhead soll möglichst gering gehalten werden W. Hasselbring (SE Universität Oldenburg) Instrumentierung zum Monitoring mittels AOP 29. März 2007, Hamburg 9 / 27 Anwendungsszenario Einsatzziele und Architektur Einsatzziele Messung der Auslastungsdaten zur langfristigen Ressourcenplanung Verbesserung der Systemüberwachung (Fehlerdiagnose etc.) Einfaches Einbringen oder Anpassen von Messpunkten Ein einheitliches und effizientes Monitoring auf ganzer Systemlandschaft W. Hasselbring (SE Universität Oldenburg) Instrumentierung zum Monitoring mittels AOP 29. März 2007, Hamburg 10 / 27 Anwendungsszenario Einsatzziele und Architektur Einsatzziele Messung der Auslastungsdaten zur langfristigen Ressourcenplanung Verbesserung der Systemüberwachung (Fehlerdiagnose etc.) Einfaches Einbringen oder Anpassen von Messpunkten Ein einheitliches und effizientes Monitoring auf ganzer Systemlandschaft Architektur Die Monitoring-Infrastruktur besteht im Wesentlichen aus einem Performance-Monitor und einem Monitoring-Manager Der Performance-Monitor soll an definierten Messpunkten von Applikationen Performance-Daten sammeln Der Monitoring-Manager soll die Performance-Daten mehrerer Performance-Monitore abrufen, persistent speichern und Drittanwendungen plattformunabhängig bereitstellen W. Hasselbring (SE Universität Oldenburg) Instrumentierung zum Monitoring mittels AOP 29. März 2007, Hamburg 10 / 27 Anwendungsszenario Architektur des Performance-Monitors Applikationsserver Messung der Antwortzeiten von Operationen Applikation A Applikation B Klasse G Klasse A Klasse B Klasse D Klasse F Klasse C Klasse H Klasse E Klasse A Klasse F Klasse B Klasse E Klasse C Klasse D Klasse G Klasse H Speicherung in MBeans Performance Monitor MBean Server HTTP Adapter RMI Adapter SNMP Adapter JMX MC4J W. Hasselbring (SE Universität Oldenburg) Instrumentierung zum Monitoring mittels AOP JConsole MyApplication 29. März 2007, Hamburg 11 / 27 Anwendungsszenario Sammlung der Monitoring-Daten Applikationsserver A Applikation A Applikationsserver B Applikation C Applikation B Klasse G Klasse A Klasse B Klasse D Klasse F Applikation D Klasse G Klasse C Klasse H Klasse E Klasse A Klasse F Klasse B Klasse E Klasse C Klasse D Klasse A Klasse G Klasse B Klasse C Klasse F Klasse D Klasse H Klasse F Klasse E Klasse H Klasse A Performance Monitor Performance Monitor MBean Server MBean Server HTTP Adapter RMI Adapter MC4J JConsole W. Hasselbring (SE Universität Oldenburg) SNMP Adapter HTTP Adapter Monitoring Manager Instrumentierung zum Monitoring mittels AOP Klasse G Klasse H Klasse C Klasse D Klasse E Klasse B RMI Adapter SNMP Adapter JConsole MC4J 29. März 2007, Hamburg 12 / 27 Anwendungsszenario Java 5 Annotationen zur Markierungen von Messpunkten pointcut probeMethod(): execution(@MonitoringProbe * *.*(..)) :Aufrufende Klasse :Annotierte Klasse Jointpoint Match 1: doSomething(): void @MonitoringProbe(context=“MyApp“) public void doSomething() { … } around() : probeMethod() { // Zeitmessung starten proceed(); // Eigentliche Methode ausführen // Zeitmessung stoppen // Performance-Daten berechnen // MBean registrieren/aktualisieren Einweben 2: return // Mit Programmablauf fortfahren } W. Hasselbring (SE Universität Oldenburg) Instrumentierung zum Monitoring mittels AOP 29. März 2007, Hamburg 13 / 27 Anwendungsszenario Einweben der Aspekte W. Hasselbring (SE Universität Oldenburg) Instrumentierung zum Monitoring mittels AOP 29. März 2007, Hamburg 14 / 27 Laufzeit- und Kompilierzeit-Weben Web-Verfahren Kompilierzeitweben (Compile-time weaving, CTW) W. Hasselbring (SE Universität Oldenburg) Instrumentierung zum Monitoring mittels AOP 29. März 2007, Hamburg 15 / 27 Laufzeit- und Kompilierzeit-Weben Web-Verfahren Kompilierzeitweben (Compile-time weaving, CTW) Laufzeitweben (Load-time weaving, LTW) (vor erster Benutzung in JVM) W. Hasselbring (SE Universität Oldenburg) Instrumentierung zum Monitoring mittels AOP 29. März 2007, Hamburg 15 / 27 Laufzeit- und Kompilierzeit-Weben Speicherüberlauf bei LTW (1/2) W. Hasselbring (SE Universität Oldenburg) Instrumentierung zum Monitoring mittels AOP 29. März 2007, Hamburg 16 / 27 Laufzeit- und Kompilierzeit-Weben Speicherüberlauf bei LTW (2/2) Ursache des LTW-Speicherüberlaufes: Java Virtual Machine registriert für jeden RMI-Aufruf einen Classloader. Dieser muss Klassen nachladen, die für den verteilten Aufruf auf der Client- und Server-Seite nötig sind. Normalerweise ist das ein leichtgewichtiger Prozess, der die Java Virtual Machine nicht weiter belastet. Im Anwendungskontext wurde bei jedem RMI-Aufruf ein neuer Load-time weaving-Vorgang durch AspectJ gestartet. W. Hasselbring (SE Universität Oldenburg) Instrumentierung zum Monitoring mittels AOP 29. März 2007, Hamburg 17 / 27 Laufzeit- und Kompilierzeit-Weben Speicherüberlauf bei LTW (2/2) Ursache des LTW-Speicherüberlaufes: Java Virtual Machine registriert für jeden RMI-Aufruf einen Classloader. Dieser muss Klassen nachladen, die für den verteilten Aufruf auf der Client- und Server-Seite nötig sind. Normalerweise ist das ein leichtgewichtiger Prozess, der die Java Virtual Machine nicht weiter belastet. Im Anwendungskontext wurde bei jedem RMI-Aufruf ein neuer Load-time weaving-Vorgang durch AspectJ gestartet. Dies Problem konnte zusammen mit Mitgliedern des AspectJ-Entwicklerteams in Verbindung mit RMI-Kommunikation und LTW in AspektJ 1.5.0 identifiziert werden. Das Verhalten war den AspectJ-Entwicklern bekannt, allerdings war das Ausmaß der Konsequenzen bisher nicht bewusst. W. Hasselbring (SE Universität Oldenburg) Instrumentierung zum Monitoring mittels AOP 29. März 2007, Hamburg 17 / 27 Laufzeit- und Kompilierzeit-Weben Speicherverlauf bei CTW W. Hasselbring (SE Universität Oldenburg) Instrumentierung zum Monitoring mittels AOP 29. März 2007, Hamburg 18 / 27 Laufzeit- und Kompilierzeit-Weben Compile-Time Weaving Vorbereitungsaufwand: Erweiterung der Applikationsbuild-Skripte aller zu überwachenden Teil-Applikationen um Aufruf des AspectJ Compilers Dadurch gewisse AspectJ-Kenntnisse von den Anwendungsentwicklern benötigt Rekompilierung und ein Redeployment aller Applikationen bei Änderungen der Aspekte erforderlich W. Hasselbring (SE Universität Oldenburg) Instrumentierung zum Monitoring mittels AOP 29. März 2007, Hamburg 19 / 27 Laufzeit- und Kompilierzeit-Weben Rollen im Entwicklungsprozess Rollen Monitoring-Ingenieur Anwendungsentwickler Entwickler-Feedback (Von den Anwendungsentwicklern) Integrieren von den Messpunkten über (Java 5) Annotationen gestaltete sich als sehr einfach Softwareentwickler können ohne vorherigen Lernaufwand Messpunkte einsetzen und entfernen, da keine Kenntnisse in Aspekt-orientierter Programmierung erforderlich sind Positives Akzeptanzkriterium W. Hasselbring (SE Universität Oldenburg) Instrumentierung zum Monitoring mittels AOP 29. März 2007, Hamburg 20 / 27 Zusammenfassung und Ausblick Zusammenfassung AOP und die verwendete Technologie konnten sich im Praxiseinsatz für die Instrumentierung mit Performance-Monitoring grundsätzlich bewähren. Wartbarkeit: Markierung durch Java-Annotationen von beteiligten Entwicklern als sehr einfach empfunden Keine Kenntnisse über Aspekt-orientierte Programmierung hierfür benötigt Entwicklungsaufgaben für AOP: LTW: Anpassung der Middleware (Einbinden des AspectJ Classloaders) CTW: Einbinden des AspectJ-Compilers in die Applikations-Build-Skripte Leider war das Load-time weaving in der vorliegenden Version von AspectJ noch nicht technisch ausgereift und es musste auf Compile-time weaving ausgewichen werden. Diese Lösung wird seit Mai 2006 im operativen Betrieb der EWE TEL eingesetzt. W. Hasselbring (SE Universität Oldenburg) Instrumentierung zum Monitoring mittels AOP 29. März 2007, Hamburg 21 / 27 Zusammenfassung und Ausblick Ausblick: Software-Betriebs-Leitstand [Giesecke u. a. 2006] W. Hasselbring (SE Universität Oldenburg) Instrumentierung zum Monitoring mittels AOP 29. März 2007, Hamburg 22 / 27 Zusammenfassung und Ausblick Ausblick: Software Leitstand mit Verknüpfung von Architektur und Performance-Daten Visualization of CPU/Memory usage M M :A :B :D :C :A :B :D :C M M M M M M M <<Component>> :A Software with Monitoring <<Component>> <<Component>> :A :B <<Component>> <<Component>> :D :C M <<Component>> :B Views M ... M <<Component>> :D M <<Component>> :C Combined Model: Architecture + Monitoring Data Visualization for fault localization Architectural Model Insbesondere auch zur Erkennung von Performance-Anomalien [Rohr u. a. 2007]. W. Hasselbring (SE Universität Oldenburg) Instrumentierung zum Monitoring mittels AOP 29. März 2007, Hamburg 23 / 27 Zusammenfassung und Ausblick Ausblick: AOP für weitere Aspekte ? W. Hasselbring (SE Universität Oldenburg) Instrumentierung zum Monitoring mittels AOP 29. März 2007, Hamburg 24 / 27 Zusammenfassung und Ausblick Literatur [Focke u. a. 2007] F OCKE, Thilo ; H ASSELBRING, Wilhelm ; R OHR, Matthias ; S CHUTE, Johannes-Gerhard: Ein Vorgehensmodell für Performance-Monitoring von Informationssystemlandschaften. In: EMISA Forum 27 (2007), Januar, Nr. 1 [Giesecke u. a. 2006] G IESECKE, Simon ; R OHR, Matthias ; H ASSELBRING, Wilhelm: Software-Betriebs-Leitstände für Unternehmensanwendungslandschaften. In: Tagungsband Informatik 2006 Bd. P-94, Gesellschaft für Informatik, Oktober 2006, S. 110–117 [IEEE Standards Board 2002] IEEE S TANDARDS B OARD. IEEE Standard Glossary of Software Engineering Terminology—IEEE Std 610.12-1990. 2002 [Kiczales u. a. 1997] K ICZALES, Gregor ; L AMPING, John ; M ENHDHEKAR, Anurag ; M AEDA, Chris ; L OPES, Cristina ; L OINGTIER, Jean-Marc ; I RWIN, John: Aspect-Oriented Programming. In: Tagungsband ECOOP’97. Springer-Verlag, 1997, S. 220–242 [Rohr u. a. 2007] R OHR, Matthias ; G IESECKE, Simon ; H ASSELBRING, Wilhelm: Timing Behavior Anomaly Detection in Enterprise Information Systems. In: C ARDOSO, Jorge (Hrsg.) ; C ORDEIRO, José (Hrsg.) ; F ILIPE, Joaquim (Hrsg.): Proceedings of Ninth International Conference on Enterprise Information Systems (ICEIS’07), INSTICC Press, Juni 2007 W. Hasselbring (SE Universität Oldenburg) Instrumentierung zum Monitoring mittels AOP 29. März 2007, Hamburg 25 / 27 Zusammenfassung und Ausblick Vorgehensmodell für das Performance Monitoring [Focke u. a. 2007] W. Hasselbring (SE Universität Oldenburg) Instrumentierung zum Monitoring mittels AOP 29. März 2007, Hamburg 26 / 27 Zusammenfassung und Ausblick Anstieg des Verbrauchs von Startup-Resourcen (bei LTW) Startup-Zeiten sowohl des Apache Tomcat 5.5 und Bea Weblogic 9.1 um etwa 30-40 % länger Speicherverbrauch während des Startup-Prozesses stieg ebenfalls um 30-40 % Startup-Zeiten WebLogic 9.1 25 12 22,5 11 Startup-Zeit in Sekunden Startup-Zeit in Sekunden Startup-Zeiten Tomcat 5.5 13 10 9 8 7 6 5 4 3 2 20 17,5 15 12,5 10 7,5 5 2,5 1 0 0 Ohne LTW W. Hasselbring (SE Universität Oldenburg) Mit LTW Ohne LTW Instrumentierung zum Monitoring mittels AOP Mit LTW 29. März 2007, Hamburg 27 / 27