Application Performance Monitoring with Kieker: Failure detection, capacity management, reverse engineering and more Wilhelm Hasselbring, Reiner Jung Software Engineering Group, Kiel University http://se.informatik.uni-kiel.de/ with contributions by Till Bielefeld (Voltremote), Nils Ehmke, Florian Fitkau, Sören Frey, André van Hoorn (Uni Stuttgart), Holger Knoche (b+m), Matthias Rohr (BTC), Jan Waller, Christian Wulf, and others SPP Design for Future, Aachen, March 1st, 2013 Agenda 1 Monitoring for Dynamic Analysis 2 Kieker Monitoring & Analysis Framework 3 Failure Detection 4 Reverse Engineering 5 Capacity Management 6 Kieker Hands On 7 Summary and Outlook Hasselbring, Jung (CAU) Application Performance Monitoring with Kieker SPP Design for Future 2 / 52 First: Static Analysis Monitoring for Dynamic Analysis Various approaches with varying objectives, some examples: Code Metrics JavaNCSS Coding rules Checkstyle Bug patterns FindBugs Clon detection Bauhaus Architecture analysis Sotograph Static analysis may be applied directly on the program code. Hasselbring, Jung (CAU) Application Performance Monitoring with Kieker SPP Design for Future 3 / 52 Dynamic Analysis of Runtime Behavior Monitoring for Dynamic Analysis • Static analysis may asses the structure of software systems, • but the actual runtime behavior may only be assessed via dynamic analysis. • Profiling (during development) allows for dynamic analysis, • but usually not under real workload conditions. • Monitoring (during operation) allows for continuous dynamic analysis • of the actual runtime behavior under real workload conditions. • Appreciating the requirements of operating software systems is required while constructing software systems • Continuous monitoring is such a requirement. Hasselbring, Jung (CAU) Application Performance Monitoring with Kieker SPP Design for Future 4 / 52 Monitoring on different system layers Monitoring for Dynamic Analysis Business/Service Monitoring Business Processes Application Monitoring Application Key performance indicators, e.g., process throughput time, ... Services Middleware SLO compliance, workload, ... Response times, operational profile, ... Connection pool size, ... Container System Monitoring Operating System Hardware Infrastructure Hasselbring, Jung (CAU) Application Performance Monitoring with Kieker Thread pool size, heap size, ... CPU/Memory utilization, ... Availability, reliability, ... SPP Design for Future 5 / 52 What is done with large-scale systems? Example: Facebook Monitoring for Dynamic Analysis Scaling Facebook to 500 Million Users and Beyond “Making lots of small changes and watching what happens only works if you’re actually able to watch what happens. At Facebook we collect an enormous amount of data - any particular server exports tens or hundreds of metrics that can be graphed. This isn’t just system level things like CPU and memory, it’s also application level statistics to understand why things are happening. It’s important that the statistics are from the real production machines that are having the problems, when they’re having the problems – the really interesting things only show up in production. The stats also have to come from all machines, because a lot of important effects are hidden by averages and only show up in distributions, in particular 95th or 99th percentile.” Robert Johnson, Facebook Engineering Director Hasselbring, Jung (CAU) Application Performance Monitoring with Kieker SPP Design for Future 6 / 52 Agenda Kieker Monitoring & Analysis Framework www.kieker-monitoring.net Continuous Application Performance Monitoring for Online and Offline Analysis Static analysis is not sufficient to study the internal behavior of software systems comprehensively Continuous monitoring allows to gather a system's actual runtime behavior resulting from production usage profiles The obtained monitoring data can, for instance, be used for Performance evaluation (e.g., bottleneck detection) (Self-)adaptation control (e.g., capacity management) Application-level failure detection and diagnosis Simulation (workload, measurement, logging, and analysis) Software maintenance, reverse engineering, modernization Service-level management Kieker.Monitoring M M M M M 0.50 messageTraces 0.0 <<Filter>> : Dependency graph visualization 543 0.0 <<deploymen 1635 t component>> @2:..CRM <<deploymen t component>> @1:..Catalog getOffers() Calendar time (hh:mm) 573 getBook(..) 1092 1062 <<execution container>> SRV1 <<deploymen t component>> @1:..Catalog getBook(..) A. van Hoorn, J. Waller, and W. Hasselbring. Kieker: A Framework for Application Performance Monitoring and Dynamic Software Analysis. Proc. 3rd ACM/SPEC Int. Conf. Perform. Eng. (ICPE '12), ACM, 2012 Database (SQL) Real-time replayer Named pipe <your monitoring reader> Dependency graphs Sequence diagrams Call graphs <your visualization> <your trace analysis> <your reconstruction plugin> <your analysis plugin/tool> Monitoring adapters for .NET, VB6, COBOL etc. Model-driven instrumentation & analysis Web-based graphical user interface Plugins for analysis of concurrent behavior Software Engineering Group Application Performance Monitoring with Kieker Kieker.Analysis Java Management Ext. (JMX) Current Activities/Coming Soon Invited Tool Demo @ ICPE 2012 se.informatik.uni-kiel.de Analysis / Analysis Analysis/ / Visualization Visualization Visualization Plugin Plugin Plugin Analysis/Visualization Plugins container>> SRV0 searchBook() Java Messaging Service (JMS) Architecture reconstr. <<execution t component>> @3:..Bookstore Resource utilization Current time File system Visualization systemModel messageTraces getBook(..) 0.25 <<deploymen 1635 Output stream Memory/swap usage <your monitoring record type> Analysis Controller getOffers() 0.5 $ executionTraces Anomaly score getBook(..) 1.0 CPU utilization Trace analysis <<Filter>> : Trace reconstruction filter 0.75 searchBook() 1.5 Deserialization Monitoring Monitoring Monitoring Reader Reader Reader SRV1:: @1:..Catalog SRV0:: @2:..CRM SRV0:: @1:..Catalog SRV0:: @3:..Bookstore 2.0 Java Management Ext. (JMX) Named pipe Control-flow events Pipe-and-filter framework <<Filter>> : Sequence diagram visualization 1000] Invocations/minute [x <<Filter>> : Anomaly graph plotter systemModel messageTraces Detection Monitoring Readers anomalyRatings anomalyRatings systemModel <<Repository>> : System model repository systemModel Java Messaging Servcice (JMS) Database (SQL) Database (SQL) <your monitoring writer> Monitoring Records <<Filter>> : Performance anomaly filter outputPort File system File system Syncr. Monitoring Writers operationExecutions traceEvents <your technology> System time Operation execution Monitoring Record Monitoring Log/Stream <<Reader>> : FS reader Sigar Serialization Pipe-and-Filter Configuration for Analysis/Visualization Workload Anomaly Servlet Logging Monitoring Writer Modular, flexible, and extensible architecture Extensible probes, readers, writers, records, and plugins Integrated monitoring record type model for monitoring and analysis Allows to log, reconstruct, analyze, and visualize distributed traces Designed for continuous operation in multi-user systems Evaluated in lab experiments and industrial case studies (since 2006) Kieker is open-source software (Apache License, V. 2.0) Spring CXF/SOAP CPU utilization Memory usage <your time source> Asynchr. writers Framework Characteristics AspectJ Servlet <your monitoring probe> Monitoring Controller Time Sources Browse Manual instrumentation <your interception technology> Resource monitoring Manage Purchase (b) macro-benchmark JMX Interface CreateVehicleWS Time Source (a) micro-benchmark CreateVehicleEJB Monitoring Monitoring Monitoring Probe Probe Probe Includes probes for collecting timing, control flow, and resource utilization Support for various Java instrumentation methods, e.g., AspectJ, middleware interception, Servlet filters Micro-benchmarks revealed low overhead Each activation adds constant overhead (linear scaling) Monitoring Probes/Samplers M M Writing (W) Control-flow tracing Instrumentation and Monitoring Overhead Logging Hasselbring, Jung (CAU) Kieker: A Framework for Application Performance Monitoring and Dynamic Software Analysis Periodic Sampling Monitoring for Dynamic Analysis Kieker Monitoring & Analysis Framework Introduction Architecture Program Instrumentation Analysis Visualization Overhead Evaluation 3 Failure Detection 4 Reverse Engineering Reverse Engineering of Java EE Reverse Engineering von C# Reverse Engineering of COBOL Reverse Engineering of VB 6 5 Capacity Management 6 Kieker Hands On 7 Summary and Outlook 1 2 Department of Computer Science University of Kiel, Germany Kieker is distributed as part of SPEC® RG's repository of peer-reviewed tools for quantitative system evaluation and analysis SPP Design for Future 7 / 52 Kieker Monitoring & Analysis Framework Essential features [Rohr et al. 2008, van Hoorn et al. 2009; 2012] Kieker Monitoring & Analysis Framework . Introduction AspectJ Spring Servlet CXF/SOAP <your interception technology> CPU utilization Sigar Servlet Resource monitoring Time Sources Memory usage <your technology> Serialization File system Java Messaging Service (JMS) Java Management Ext. (JMX) Database (SQL) File system Syncr. Evaluated in lab and industrial case studies Monitoring Writers Monitoring Writer System time <your time source> Asynchr. writers Low overhead (designed for continuous operation) Manual instrumentation <your monitoring probe> Monitoring Controller Logging Distributed tracing (Spring, SOAP, etc.) Time Source Pipes-and-filters framework for analysis configuration JMX Interface • • • • Logging (Probes, records, readers, writers, filters etc.) Periodic Sampling • Modular, flexible, and extensible architecture Monitoring Probes/Samplers Monitoring Monitoring Monitoring Probe Probe Probe Control-flow tracing Kieker.Monitoring Database (SQL) Named pipe Output stream <your monitoring writer> Operation execution Recommended Tool of the SPEC Research Group File system Monitoring Monitoring Monitoring Reader Reader Reader Real-time replayer Visualization Kieker.Analysis Java Management Ext. (JMX) Named pipe <your monitoring reader> Analysis Controller Analysis / Analysis Analysis/ / Visualization Visualization Visualization Plugin Plugin Plugin Java Messaging Service (JMS) Database (SQL) Trace analysis Application Performance Monitoring with Kieker Memory/swap usage Resource utilization <your monitoring record type> Deserialization Analysis/Visualization Plugins Hasselbring, Jung (CAU) CPU utilization Current time Architecture reconstr. http://research.spec.org/projects/tools.html Control-flow events Pipe-and-filter framework Kieker is distributed as part of SPEC RG’s repository of peer-reviewed tools for quantitative system evaluation and analysis, Monitoring Log/Stream Monitoring Readers http://kieker-monitoring.net Monitoring Records Kieker is Open-Source Software (Apache License, V. 2.0) Monitoring Record Dependency graphs Sequence diagrams Call graphs <your visualization> <your trace analysis> <your reconstruction plugin> <your analysis plugin/tool> SPP Design for Future 8 / 52 Kieker’s Evolution 2006–2012 Kieker Monitoring & Analysis Framework . Introduction 2006 2007 2008 2009 2010 2011 2012 Trustworthy Software Systems Privacy Security Safety Reliability Availability Performance Correctness Certification Quality of Service Component Technology DEPARTMENT FÜR INFORMATIK SOFTWARE ENGINEERING Diplomarbeit Performance Monitoring von Middleware-basierten Applikationen 31. März 2006 Diplomand Thilo Focke Am Schloßgarten 4 26122 Oldenburg [email protected] Erstprüfer Zweitprüfer Betreuer Prof. Dr. Wilhelm Hasselbring Prof. Dr. Ralf Reussner (Universität Karlsruhe) MIT Matthias Rohr Dipl.-Math. Johannes-Gerhard Schute 2007 2006 May Sept. Hasselbring, Jung (CAU) May 2009 2008 Sept. May Sept. May 2010 Sept. May 2012 2011 Sept. Application Performance Monitoring with Kieker May Sept. May Sept. SPP Design for Future 9 / 52 Kieker’s Evolution 2006–2012 Kieker Monitoring & Analysis Framework . Introduction 2006 2007 2008 2009 2010 2011 2012 Trustworthy Software Systems Privacy Security Safety Reliability Availability Performance Correctness Certification Quality of Service Component Technology DEPARTMENT FÜR INFORMATIK SOFTWARE ENGINEERING Diplomarbeit Performance Monitoring von Middleware-basierten Applikationen 31. März 2006 Diplomand Thilo Focke Am Schloßgarten 4 26122 Oldenburg [email protected] Erstprüfer Zweitprüfer Betreuer Prof. Dr. Wilhelm Hasselbring Prof. Dr. Ralf Reussner (Universität Karlsruhe) MIT Matthias Rohr Dipl.-Math. Johannes-Gerhard Schute 2007 2006 May Sept. Hasselbring, Jung (CAU) May 2009 2008 Sept. May Sept. May 2010 Sept. May 2012 2011 Sept. Application Performance Monitoring with Kieker May Sept. May Sept. SPP Design for Future 9 / 52 Kieker’s Evolution 2006–2012 Kieker Monitoring & Analysis Framework . Introduction 2006 2007 2008 2007 0.5 0.6 2008 2009 2010 2011 2012 Trustworthy Software Systems Privacy Security Safety Reliability Availability Performance Correctness Certification Quality of Service Component Technology DEPARTMENT FÜR INFORMATIK SOFTWARE ENGINEERING Diplomarbeit Performance Monitoring von Middleware-basierten Applikationen 31. März 2006 Diplomand Thilo Focke Am Schloßgarten 4 26122 Oldenburg [email protected] Erstprüfer Zweitprüfer Betreuer Prof. Dr. Wilhelm Hasselbring Prof. Dr. Ralf Reussner (Universität Karlsruhe) MIT Matthias Rohr Dipl.-Math. Johannes-Gerhard Schute 2006 May Sept. May Sept. May 2009 Sept. May 2010 Sept. May 2012 2011 Sept. May Sept. May Sept. versions 0.5/0.6 - 1st Sourceforge releases - Monitoring Component - Tpmon - DB and FS Writer (sync&async) - 12 Java classes - 2 AspectJ probes - (Analysis component - Tpan not part of the releases) Hasselbring, Jung (CAU) Application Performance Monitoring with Kieker SPP Design for Future 9 / 52 Kieker’s Evolution 2006–2012 Kieker Monitoring & Analysis Framework . Introduction 2006 2007 2008 2007 0.5 0.6 2008 2009 2010 2011 2012 Trustworthy Software Systems Privacy Security Safety Reliability Availability Performance Correctness Certification Quality of Service Component Technology DEPARTMENT FÜR INFORMATIK SOFTWARE ENGINEERING Diplomarbeit Performance Monitoring von Middleware-basierten Applikationen 31. März 2006 Diplomand Thilo Focke Am Schloßgarten 4 26122 Oldenburg [email protected] Erstprüfer Zweitprüfer Betreuer Prof. Dr. Wilhelm Hasselbring Prof. Dr. Ralf Reussner (Universität Karlsruhe) MIT Matthias Rohr Dipl.-Math. Johannes-Gerhard Schute 2006 May Sept. May Sept. May 0.91 0.95a 2009 Sept. May Sept. 1.0 2010 May 2012 2011 Sept. May Sept. May Sept. version 0.91 - Distributed monitoring - Servlet, CXF, and Spring probes - 36 Java classes Hasselbring, Jung (CAU) Application Performance Monitoring with Kieker SPP Design for Future 9 / 52 Kieker’s Evolution 2006–2012 Kieker Monitoring & Analysis Framework . Introduction 2006 2007 2008 2007 0.5 0.6 2008 2009 2010 2011 2012 Trustworthy Software Systems Privacy Security Safety Reliability Availability Performance Correctness Certification Quality of Service Component Technology DEPARTMENT FÜR INFORMATIK SOFTWARE ENGINEERING Diplomarbeit Performance Monitoring von Middleware-basierten Applikationen 31. März 2006 Diplomand Thilo Focke Am Schloßgarten 4 26122 Oldenburg [email protected] Erstprüfer Zweitprüfer Betreuer Prof. Dr. Wilhelm Hasselbring Prof. Dr. Ralf Reussner (Universität Karlsruhe) MIT Matthias Rohr Dipl.-Math. Johannes-Gerhard Schute 2006 May Sept. May Sept. May 0.91 0.95a 2009 Sept. May 1.0 Sept. 2010 May 2012 2011 Sept. May Sept. May Sept. versions 0.95a/1.0 - Major architectural changes (2009 TR) - Generalized/extensible monitoring record model - Generalized/extensible writer/reader model - First release containing parts of the analysis component - Micro-benchmark - Version 1.0: 81 Java class files + 28 Java test files Hasselbring, Jung (CAU) Application Performance Monitoring with Kieker SPP Design for Future 9 / 52 Kieker’s Evolution 2006–2012 Kieker Monitoring & Analysis Framework . Introduction 2006 2007 2008 2009 2010 2011 2012 Trustworthy Software Systems Privacy Security Safety Reliability Availability Performance Correctness Certification Quality of Service Component Technology DEPARTMENT FÜR INFORMATIK JUnit SOFTWARE ENGINEERING Diplomarbeit Performance Monitoring von Middleware-basierten Applikationen 31. März 2006 Diplomand Thilo Focke Am Schloßgarten 4 26122 Oldenburg [email protected] Erstprüfer Zweitprüfer Betreuer Prof. Dr. Wilhelm Hasselbring Prof. Dr. Ralf Reussner (Universität Karlsruhe) MIT Matthias Rohr Dipl.-Math. Johannes-Gerhard Schute May 0.5 0.6 2008 2007 2006 Sept. May Sept. May 0.91 0.95a 2009 Sept. May Sept. 1.0 1.2 1.1 2010 May 2012 2011 Sept. May May Sept. Sept. version 1.2 - User Guide version 1.1 - TraceAnalysis tool - System meta-model - On-the-fly trace reconstruction - 141 Java classes Hasselbring, Jung (CAU) Application Performance Monitoring with Kieker SPP Design for Future 9 / 52 Kieker’s Evolution 2006–2012 Kieker Monitoring & Analysis Framework . Introduction 2006 2007 2008 2009 2010 2011 2012 Trustworthy Software Systems Privacy Security Safety Reliability Availability Performance Correctness Certification Quality of Service Component Technology DEPARTMENT FÜR INFORMATIK JUnit SOFTWARE ENGINEERING Diplomarbeit Performance Monitoring von Middleware-basierten Applikationen FindBugs 31. März 2006 Diplomand Thilo Focke Am Schloßgarten 4 26122 Oldenburg [email protected] Erstprüfer Zweitprüfer Betreuer Prof. Dr. Wilhelm Hasselbring Prof. Dr. Ralf Reussner (Universität Karlsruhe) MIT Matthias Rohr Dipl.-Math. Johannes-Gerhard Schute 0.5 0.6 2008 2007 2006 May regular meetings Sept. May Sept. May 0.91 0.95a 2009 Sept. May Sept. 1.0 1.2 1.1 2010 May Sept. 1.3 2011 May 1.4 2012 May Sept. Sept. version 1.3 - Various new features - Improved configuration management - Initial version submitted to SPEC RG - 205 Java classes + 42 test classes Hasselbring, Jung (CAU) Application Performance Monitoring with Kieker SPP Design for Future 9 / 52 Kieker’s Evolution 2006–2012 Kieker Monitoring & Analysis Framework . Introduction 2006 2007 2008 2009 2010 2011 2012 Trustworthy Software Systems Privacy Security Safety Reliability Availability Performance Correctness Certification Quality of Service Component Technology DEPARTMENT FÜR INFORMATIK JUnit SOFTWARE ENGINEERING Diplomarbeit Performance Monitoring von Middleware-basierten Applikationen FindBugs 31. März 2006 Diplomand Thilo Focke Am Schloßgarten 4 26122 Oldenburg [email protected] Erstprüfer Zweitprüfer Betreuer Prof. Dr. Wilhelm Hasselbring Prof. Dr. Ralf Reussner (Universität Karlsruhe) MIT Matthias Rohr Dipl.-Math. Johannes-Gerhard Schute 0.5 0.6 2008 2007 2006 May regular meetings Sept. May Sept. May 0.91 0.95a 2009 Sept. May Sept. 1.0 1.2 1.1 2010 May Sept. 1.3 2011 May 1.4 2012 Sept. May Sept. version 1.4 - Major improvements to code quality - Revised version for SPEC RG Hasselbring, Jung (CAU) Application Performance Monitoring with Kieker SPP Design for Future 9 / 52 Kieker’s Evolution 2006–2012 Kieker Monitoring & Analysis Framework . Introduction 2006 2007 2008 2009 2010 2011 2012 Trustworthy Software Systems iObserve Privacy Security Safety Reliability Availability Performance Correctness Certification Quality of Service Component Technology ESN SL DEPARTMENT FÜR INFORMATIK JUnit SOFTWARE ENGINEERING Diplomarbeit Performance Monitoring von Middleware-basierten Applikationen FindBugs 31. März 2006 Diplomand Thilo Focke Am Schloßgarten 4 26122 Oldenburg [email protected] Erstprüfer Zweitprüfer Betreuer Prof. Dr. Wilhelm Hasselbring Prof. Dr. Ralf Reussner (Universität Karlsruhe) MIT Matthias Rohr Dipl.-Math. Johannes-Gerhard Schute 0.5 0.6 2008 2007 2006 May regular meetings Sept. May Sept. May 0.91 0.95a 2009 Sept. May Sept. 1.0 1.2 1.1 1.3 2011 2010 May Sept. May 1.4 1.5 1.6 2012 Sept. May Sept. version 1.5 - Completely reworked pipes-and-filters framework - Event-based tracing - 284 Java classes + 92 test classes Hasselbring, Jung (CAU) Application Performance Monitoring with Kieker SPP Design for Future 9 / 52 Kieker’s Evolution 2006–2012 Kieker Monitoring & Analysis Framework . Introduction 2006 2007 2008 2009 2010 2011 2012 Trustworthy Software Systems iObserve Privacy Security Safety Reliability Availability Performance Correctness Certification Quality of Service Component Technology ESN SL DEPARTMENT FÜR INFORMATIK JUnit SOFTWARE ENGINEERING Diplomarbeit Performance Monitoring von Middleware-basierten Applikationen FindBugs 31. März 2006 Diplomand Thilo Focke Am Schloßgarten 4 26122 Oldenburg [email protected] Erstprüfer Zweitprüfer Betreuer Prof. Dr. Wilhelm Hasselbring Prof. Dr. Ralf Reussner (Universität Karlsruhe) MIT Matthias Rohr Dipl.-Math. Johannes-Gerhard Schute 0.5 0.6 2008 2007 2006 May regular meetings Sept. May Sept. May 0.91 0.95a 2009 Sept. May Sept. 1.0 1.2 1.1 2010 May Sept. 1.3 2011 May 1.4 1.5 1.6 2012 May Sept. Sept. version 1.6 - Adaptive Monitoring - WebGUI (beta) - 375 Java classes + 147 test classes Hasselbring, Jung (CAU) Application Performance Monitoring with Kieker SPP Design for Future 9 / 52 Kieker’s Evolution 2006–2012 Kieker Monitoring & Analysis Framework . Introduction 2006 2007 2008 2009 2010 2011 2012 Trustworthy Software Systems iObserve Privacy Security Safety Reliability Availability Performance Correctness Certification Quality of Service Component Technology ESN SL DEPARTMENT FÜR INFORMATIK JUnit SOFTWARE ENGINEERING Diplomarbeit Performance Monitoring von Middleware-basierten Applikationen FindBugs 31. März 2006 Diplomand Thilo Focke Am Schloßgarten 4 26122 Oldenburg [email protected] Erstprüfer Zweitprüfer Betreuer Prof. Dr. Wilhelm Hasselbring Prof. Dr. Ralf Reussner (Universität Karlsruhe) MIT Matthias Rohr Dipl.-Math. Johannes-Gerhard Schute 0.5 0.6 2008 2007 2006 May regular meetings Sept. Hasselbring, Jung (CAU) May Sept. May 0.91 0.95a 2009 Sept. May Sept. 1.0 1.2 1.1 2010 May Sept. Application Performance Monitoring with Kieker 1.3 2011 May 1.4 1.5 1.6 2012 Sept. May Sept. SPP Design for Future 9 / 52 Kieker: Monitoring Workflow Kieker Monitoring & Analysis Framework . Architecture Analysis configuration (Web GUI) Analysis Plugins Workload Anomaly Detection SRV0:: @3:..Bookstore searchBook() 1.5 <<execution contain SRV0 $ 0.25 1635 <<deploymen t compon @3:..Booksto ent>> re searchB getOffers() 1.0 SRV1:: @1:..Catalog SRV0:: @2:..CRM SRV0:: @1:..Catalog 0.50 getBook(..) Anomaly score 1000] Invocations/minute [x 0.75 2.0 ook() getBook(..) er>> 543 1635 <<deploymen t compon ent>> @2:..CRM getOffe rs() <<deploymen t compon @1:..Catalog 573 1092 0.5 1062 0.0 0.0 ent>> getBook(..) <<execution contain er>> SRV1 <<deploymen t compon @1:..Catalog ent>> getBook(..) Calendar time (hh:mm) Visualizations Hasselbring, Jung (CAU) Application Performance Monitoring with Kieker SPP Design for Future 10 / 52 Core Kieker Framework Components Kieker Monitoring & Analysis Framework . Architecture Kieker.Monitoring Monitoring Probe Monitoring Record Java probes/samplers: Spring CXF/SOAP Operation execution Monitoring Records AspectJ Servlet + basic adapters for C#/.NET Visual Basic 6/COM COBOL <your interception technology> Sigar Servlet Resource monitoring Monitoring Probes/Samplers Control-flow tracing Manual instrumentation Control-flow events CPU utilization Memory/swap usage Resource utilization Current time <your monitoring record type> CPU utilization Memory usage <your technology> <your monitoring probe> Hasselbring, Jung (CAU) Application Performance Monitoring with Kieker SPP Design for Future 11 / 52 Core Kieker Framework Components Kieker Monitoring & Analysis Framework . Architecture Kieker.Monitoring Monitoring Log/Stream Time Source Monitoring Probe Logging Periodic Sampling Monitoring Controller Monitoring Writer JMX Interface Monitoring Readers/Writers Hasselbring, Jung (CAU) Monitoring Record File system Java Messaging Service (JMS) Java Management Ext. (JMX) Database (SQL) Named pipe <your monitoring reader/writer> Application Performance Monitoring with Kieker SPP Design for Future 11 / 52 Core Kieker Framework Components Kieker Monitoring & Analysis Framework . Architecture Kieker.Monitoring Monitoring Log/Stream Kieker.Analysis Time Source Monitoring Probe Logging Periodic Sampling Pipe & Filter Configuration Monitoring Controller Monitoring Writer Analysis Controller JMX Interface Visualization Architecture reconstr. Application Performance Monitoring with Kieker Trace analysis Analysis/Visualization Plugins Pipe-and-filter framework Hasselbring, Jung (CAU) Analysis / Visualization Plugin Monitoring Reader Monitoring Record Dependency graphs Sequence diagrams Call graphs <your visualization> <your trace analysis> <your reconstruction plugin> <your analysis plugin/tool> SPP Design for Future 11 / 52 Communication Among Kieker Components Kieker Monitoring & Analysis Framework . Architecture 1 : MonitoringController * 1 1 1..* : IMonitoringWriter * Hasselbring, Jung (CAU) : AnalysisController 1 1 * : IMonitoringReaderPlugin 1 1 * * 4.2: inputRecord(record) : IFilterPlugin 1..* * * * ... * : IMonitoringProbe : IMonitoringRecord Application Performance Monitoring with Kieker SPP Design for Future 12 / 52 Program Instrumentation (Here: Manual) Example: Monitoring Operation Executions Kieker Monitoring & Analysis Framework . Program Instrumentation Application code: Monitoring probe code (schematic): public void getOffers() { // EXECUTION to be monitored: catalog.getbook(false); } // BEFORE execution to be monitored if (!isMonitoringEnabled()) { collectDataBefore(); } // AFTER execution to be monitored if (!isMonitoringEnabled()) { collectDataAfter(); writeMonitoringData(); } Instrumentation — Getting the monitoring probe into the code 1 Manual instrumentation 2 Aspect-Oriented Programming (AOP), middleware interception, . . . Hasselbring, Jung (CAU) Application Performance Monitoring with Kieker SPP Design for Future 13 / 52 ration is woven (b). Aspect-Oriented Programming (AOP) Kieker Monitoring & Analysis Framework . Program Instrumentation aspect weaver basic functionality program aspect programming languages woven output code aspect description programs AOP —aspect Aspect-oriented programming (following et al. [1997]) e 2.18: An weaver weaves the aspects and theKiczales functional part of an app tion into a single binary (following (Kiczales et al., 1997)). Hasselbring, Jung (CAU) Application Performance Monitoring with Kieker SPP Design for Future 14 / 52 description of the respective aspect probeMethod, Tpmon saves the current time before and after b is executed. AOP-Based Instrumentation by Annotation Figure Framework 2.17: Sample.system instrumented with Tpmon (a) and how an annotated opeKieker Monitoring & Analysis Program Instrumentation ration is woven (b). aspect weaver basic functionality program aspect programming languages woven output code aspect description programs Figure 2.18: An aspect weaver weaves the aspects and the functional part of an application into a single binary (following (Kiczales et al., 1997)). 11 12 13 14 15 16 } @OperationExecutionMonitoringProbe public void getOffers() { catalog.getBook(false); 24 } Annotation-based (AOP) instrumentation for monitoring trace information Hasselbring, Jung (CAU) Application Performance Monitoring with Kieker SPP Design for Future 15 / 52 Visualization of Calling Networks Clustering the Monitoring Log [Zheng et al. 2011] Kieker Monitoring & Analysis Framework . Analysis Visualization Community structure Layered structure hierarchy Xi’an Jiaotong University, Shaanxi [Zheng et al. 2011] Hasselbring, Jung (CAU) Application Performance Monitoring with Kieker SPP Design for Future 16 / 52 makes it possible to access the facts using data visualisation and data analysis Visualization of Architecture Warehouses echniques, hence obtaining a higher level of understanding of those facts, that is Artifacts of the JUnit project [Dabrowski ˛ 2012] btaining knowdledge. In this section I deepen the definition by several examples. Kieker Monitoring & Analysis Framework . Analysis Visualization Fig. 2. Graph-based visualisation of artifacts in jUnit project Warsaw University [Dabrowski ˛ 2012] Hasselbring, Jung (CAU) Application Performance Monitoring with Kieker SPP Design for Future 17 / 52 3D Visualization [Döhring 2012], based on Wulf [2010] Kieker Monitoring & Analysis Framework . Analysis Visualization Hasselbring, Jung (CAU) Application Performance Monitoring with Kieker SPP Design for Future 18 / 52 Overhead Evaluation Linear Rise of Overhead [Waller and Hasselbring 2012] Kieker Monitoring & Analysis Framework . Overhead Evaluation Execution time (median in µs) 580 Writing (W) 7,2 Collecting (C) Slope ( ) Instrumentation (I) 560 0.1 Method Time (T) 0.9 540 59,8 5,7 520 500 4,1 2,7 1,0 0,1 12 4 3,2 15,0 7,6 0,7 1,5 8 30,0 0.1 3,3 16 32 Recursion depth (number of successive method calls) 6,8 64 Experiment similar to: A5 AsyncFS writer 16 cores whole system is available MSEPT 2012 ― Mul core Influence on Applica on‐Level Monitoring Overhead Jan Waller and Wilhelm Hasselbring ― 31.05.12 Hasselbring, Jung (CAU) Application Performance Monitoring with Kieker SPP Design for Future 14 19 / 52 Agenda Failure Detection Monitoring for Dynamic Analysis Kieker Monitoring & Analysis Framework 3 Failure Detection 4 Reverse Engineering 5 Capacity Management 6 Kieker Hands On 7 Summary and Outlook $ 1 2 40912 43498 1088 981 Virtual Machine ’tier’ Virtual Machine ’scooter’ Virtual Machine ’puck’ [ 41472/61098 | 0,03 | 25,90% ] [ 818/2176 | −0,07 | 23,43% ] [ 1447/2943 | −0,03 | 24,48% ] Deployment Context Level Component Level Virtual Machine ’klotz’ 40912 org.apache.struts.action.ActionServlet [ 41827/85960 | 0,190 | 7,81% ] 3917 2170 26837 1088 presentation.OrderBean presentation.CartBean presentation.CatalogBean presentation.AccountBean [ 1454/3917 | 0,094 | 7,18% ] [ 1107/2170 | −0,087 | 5,99% ] [ 18138/26837 | 0,048 | 6,88% ] [ 494/1088 | −0,062 | 6,16% ] 981 4224 47353 1088 1088 service.hessian.client.OrderService service.hessian.client.AccountService [ 484/981 | −0,057 | 6,19% ] [ 523/1088 | −0,033 | 6,35% ] 981 43498 1088 Component Level Operation Level service.hessian.client.CatalogService 9167 1088 11349 9167 11349 getProduct(String) getProductListByCategory(String) getItemListByProduct(String) getCategory(String) [ 3629/9167 | −0,046 | −0,281 | 2,27% ] [ 6365/12437 | −0,161 | −0,006 | 3,14% ] [ 9167/9167 | 0,995 | 0,406 | 4,43% ] [ 6309/11349 | 0,216 | −0,037 | 3,04% ] 9167 12437 9167 getProductListByCategory(String,int,int) getItemListByProduct(String,int,int) [ 6402/12437 | −0,161 | −0,106 | 2,82% ] [ 9167/9167 | 0,995 | 0,488 | 4,69% ] 11349 12437 Hasselbring, Jung (CAU) Application Performance Monitoring with Kieker SPP Design for Future 20 / 52 Pipe-and-Filter Configuration Failure Detection operationExecutions <<Filter>> : Performance anomaly filter systemModel <<Reader>> : FS reader anomalyRatings anomalyRatings <<Filter>> : Anomaly graph plotter outputPort <<Repository>> : System model repository Kieker.Analysis example pipes-and-filters configuration Performance anomaly detection and visualization Architecture and trace reconstruction/visualization Hasselbring, Jung (CAU) Application Performance Monitoring with Kieker SPP Design for Future 21 / 52 Performance Anomaly Detection A typical example for using a monitoring framework Failure Detection 4 3 2 1 Realized and deployed at Xing AG [Bielefeld 2012]. Hasselbring, Jung (CAU) Application Performance Monitoring with Kieker SPP Design for Future 22 / 52 Agenda Reverse Engineering Monitoring for Dynamic Analysis Kieker Monitoring & Analysis Framework Introduction Architecture Program Instrumentation Analysis Visualization Overhead Evaluation 3 Failure Detection 4 Reverse Engineering Reverse Engineering of Java EE Reverse Engineering von C# Reverse Engineering of COBOL Reverse Engineering of VB 6 5 Capacity Management 6 Kieker Hands On 7 Summary and Outlook 1 2 Hasselbring, Jung (CAU) Application Performance Monitoring with Kieker SPP Design for Future 23 / 52 Extending the Pipe-and-Filter Configuration Reverse Engineering <<Reader>> : FS reader getBook(..) <<Repository>> : System model repository systemModel messageTraces traceEvents SRV1:: @1:..Catalog SRV0:: @2:..CRM SRV0:: @1:..Catalog SRV0:: @3:..Bookstore searchBook() outputPort getOffers() getBook(..) <<Filter>> : Sequence diagram visualization systemModel <<Filter>> : Trace reconstruction filter systemModel messageTraces messageTraces executionTraces <<Filter>> : Dependency graph visualization <<executio n conta iner>> SRV0 $ 1635 <<deploym ent compo @3:..Booksto nent>> re searchBook( ) 543 1635 <<deploym ent compo @2:..CRM nent>> getOffers() <<deploym ent compo @1:..Catalog nent>> 573 getBook(..) 1092 1062 Kieker.Analysis example pipes-and-filters configuration Performance anomaly detection and visualization Architecture and trace reconstruction/visualization Hasselbring, Jung (CAU) Application Performance Monitoring with Kieker <<executio n conta iner>> SRV1 <<deploym ent compo @1:..Catalog nent>> getBook(..) SPP Design for Future 24 / 52 Generated Sequence Diagram Reverse Engineering Hasselbring, Jung (CAU) Application Performance Monitoring with Kieker SPP Design for Future 25 / 52 Web-based GUI for Configuring the Analysis Plugins Reverse Engineering Hasselbring, Jung (CAU) Application Performance Monitoring with Kieker SPP Design for Future 26 / 52 Reverse Engineering of Java EE Customer portal of EWE TEL GmbH Reverse Engineering . Reverse Engineering of Java EE Distributed Enterprise Java System instrumented subsystem <<device>> Front−End Server (on−site) <<device>> <<execution environment>> <<device>> 0..1 H/W LB 1 2 DB Cluster Web Server/ Java EE Container <<artifact>> PortalServiceB * 2 M Application Server * Client 1 <<device>> <<artifact>> PortalServiceA <<device>> 2 <<artifact>> <<device>> Back−End System <<execution environment>> 2 2 Java EE Container <<artifact>> PortalServiceC BusinessServices 2 2 N <<device>> 3rd Party System <<device>> 0..1 Front−End Server (off−site) K Servlet, Spring and CXF/SOAP probes Hasselbring, Jung (CAU) Application Performance Monitoring with Kieker SPP Design for Future 27 / 52 Software architecture level Component dependency graph Reverse Engineering . Reverse Engineering of Java EE 1972 157851 $ 155156 <<execution container>> css0 <<execution container>> css1 2001 Hasselbring, Jung (CAU) 77540 <<execution container>> pikdb0 77410 75894 75892 Application Performance Monitoring with Kieker <<execution container>> pikdb1 SPP Design for Future 28 / 52 System architecture level Component dependency graph Reverse Engineering . Reverse Engineering of Java EE <<execution container>> pikdb0 <<deployment component>> @9:..DnsService <<execution container>> pikdb0 isUpToDate(..) 70 getZone(..) 78 9 deleteResourceRecord(..) addResourceRecord(..) 5 modifyResourceRecord(..) 14 <<deployment component>> @7:..WebhostingService getWebUserIds(..) 510 511 getWebhostingCategories(..) updateFtpAccount(..) 1 updateMySql(..) 1 1 <<deployment component>> @9:..DnsService terminateFtpAccount(..) createFtpAccount(..) 2 22 changeDomainUsageCategory(..) createWebspace(..) 2 61 12 86 98 getWebspaceSubdirectories(..) getWebhostingCategory(..) getProwebDomainNames(..) getWebhostingDetails(..) getWebspaceQuota(..) 71 130 30 176 getEmailFromMasterAccount(..) createWebStatsSession(..) getAvailablePHPVersions(..) 39 hasProweb(..) 370 <<deployment component>> @8:..SupportService addSmsContact(..) 14 <<deployment component>> @8:..SupportService 20 83 sendSupportRequest(..) getSmsAuthorizations(..) 274 getFtpQuota(..) 22 getIncreaseBandwidthResult(..) 43 getOrderStaticIpResult(..) getMailQuota(..) 260 getSmsContacts(..) 681 163 sendSms(..) 514 getAntiVirLicenseList(..) getSmsNumbers(..) 1555 3772 removeSmsContact(..) 3 queueSms(..) 3 8 getVirtualServerEnvironment() setSmsAuthorizations(..) 2 1972 1947 getSmsAuthorization(..) <<deployment component>> @7:..WebhostingService 18 createWlanAccount(..) 10 addAntiVirLicense(..) 7 getMySQLVersion(..) 44 activateSmsNumber(..) 2 createSmsToken(..) 2 <<deployment component>> @3:..KiekerTpmonResponseOutProbe handleMessage(..) scheduleAntiVirLicenseActivation(..) 19 25 getMySQLQuota(..) 52 121 <<deployment component>> @6:..DomainService isDomainFree(..) 824 456 1 getDomains(..) getTopLevelDomains(..) 8 getDomains(..) 1 9 reassignDomain(..) 26 <<deployment component>> @3:..KiekerTpmonResponseOutProbe 1556 createSubdomain(..) <<deployment component>> @6:..DomainService 44 4 10 restartDomainTransfer(..) getFederalStateForZipCode(..) 26 getDomainInfo(..) 2692 486 2138 getDomainCategory(..) performDomainOrder(..) 1 isValidContact(..) 5 121 <<deployment component>> @4:..EmailService 7 updateVacationInfo(..) 1972 47408 181 getMailAccounts(..) 36 30 updateEmailForward(..) 511 getVacationInfo(..) 66 deleteEmailVirusScan(..) 86 addEmailVirusScan(..) 23651 16634 102035 <<execution container>> css1 6386 75894 <<deployment component>> @5:..AccountService updateSpamFilterConfiguration(..) 3 removeListEntryFromSpamFilter(..) 4 73 createEmailAccount(..) 7 addEmailAlias(..) 3 deleteEmailAlias(..) 82 getSpamFilterConfiguration(..) 88 addListEntryToSpamFilter(..) 94 deleteEmailAccount(..) 158 <<deployment component>> @5:..AccountService getCustomerAccount(..) checkLogin(..) 165 acknowledgeDnsTermsOfUse(..) 102035 75894 <<execution container>> css1 <<deployment component>> @1:..KiekerRequestRegistrationAndLoggingFilter 49751 <<deployment component>> @2:..KiekerTpmonResponseInProbe 53121 getMyAdminLoginLink(..) <<deployment component>> @2:..KiekerTpmonResponseInProbe 49751 doFilter(..) <<deployment component>> @1:..KiekerRequestRegistrationAndLoggingFilter hasAcknowledgedDnsTermsOfUse(..) handleMessage(..) getAccountNumberForDbUser(..) 75892 <<deployment component>> @4:..EmailService 53100 111 <<execution container>> css0 53121 $ <<deployment component>> @1:..KiekerRequestRegistrationAndLoggingFilter doFilter(..) passwordRequestByMailAllowed(..) 77540 <<deployment component>> @2:..KiekerTpmonResponseInProbe 50199 handleMessage(..) updateAccountPassw ord(..) 77410 deleteToken(..) 104751 updateCssPassword(..) createToken(..) checkToken(..) 71 getEndDateFromMainContract(..) 6264 getPackageConfiguration(..) 75892 getAccountInfos(..) <<execution container>> pikdb1 <<deployment component>> @9:..DnsService 17 74 $ <<execution container>> css0 53100 6 <<execution container>> pikdb1 77540 4 104751 9 <<deployment component>> @9:..DnsService 77410 createWebStatsSession(..) getWebspaceQuota(..) getWebhostingDetails(..) getWebUserIds(..) getWebhostingCategories(..) 399 hasProweb(..) 1 createMySql(..) 1 updateWebspace(..) 1 1 4 6 65 setPHPVersion(..) createFtpAccount(..) createWebspaceSubdirectory(..) updateFtpAccount(..) getProwebDomainNames(..) changeDomainUsageCategory(..) 23 <<deployment component>> @8:..SupportService 17 <<deployment component>> @6:..DomainService scheduleAntiVirLicenseActivation(..) sendSupportRequest(..) 8 addAntiVirLicense(..) 26 getIncreaseBandwidthResult(..) 51 getOrderStaticIpResult(..) 2 257 72 525 246 21 2001 createWebspace(..) getWebhostingCategory(..) getAvailablePHPVersions(..) 496 24 <<deployment component>> @3:..KiekerTpmonResponseOutProbe getWebspaceSubdirectories(..) getEmailFromMasterAccount(..) 499 2001 167 1522 isUpToDate(..) getZone(..) 4 42 69 <<deployment component>> @2:..KiekerTpmonResponseInProbe addResourceRecord(..) <<deployment component>> @7:..WebhostingService 60 28 50199 deleteResourceRecord(..) 66 143 118 <<deployment component>> @1:..KiekerRequestRegistrationAndLoggingFilter modifyResourceRecord(..) 159 queueSms(..) getMailQuota(..) getSmsAuthorizations(..) getAntiVirLicenseList(..) getFtpQuota(..) getSmsAuthorization(..) sendSms(..) getSmsNumbers(..) 1519 1969 6530 getSmsContacts(..) 686 activateSmsNumber(..) 1 createSmsToken(..) 2 <<deployment component>> @7:..WebhostingService getVirtualServerEnvironment() 5 createWlanAccount(..) 4 orderStaticIp(..) <<deployment component>> @3:..KiekerTpmonResponseOutProbe handleMessage(..) 2 2 setSmsAuthorizations(..) 45 3 13 28 getMySQLQuota(..) removeSmsContact(..) addSmsContact(..) 447 getMySQLVersion(..) 832 2 <<deployment component>> @6:..DomainService 2 getDomains(..) 4 getTopLevelDomains(..) 4 createSubdomain(..) 1 38 31 reassignDomain(..) performDomainOrder(..) 6 isValidContact(..) 3718 <<deployment component>> @4:..EmailService 59 96 2194 deleteSubdomain(..) isDomainFree(..) 2734 19 1 6 getDomainInfo(..) getFederalStateForZipCode(..) getDomainCategory(..) 7 5 33 85 getDomains(..) <<deployment component>> @4:..EmailService getVacationInfo(..) 57 getMailAccounts(..) 124 164 573 updateVacationInfo(..) reactivateEmailVirusScan(..) 499 47406 29 143 110 <<deployment component>> @8:..SupportService deleteEmailVirusScan(..) addEmailVirusScan(..) removeListEntryFromSpamFilter(..) 78 23606 6332 16586 addEmailAlias(..) deleteEmailAccount(..) addListEntryToSpamFilter(..) 1 3 updateSpamFilterConfiguration(..) 1 createEmailAccount(..) 81 getSpamFilterConfiguration(..) 6 updateEmailForward(..) deleteEmailAlias(..) 3 <<deployment component>> @5:..AccountService createToken(..) getEndDateFromMainContract(..) 84 getPackageConfiguration(..) getCustomerAccount(..) getAccountInfos(..) <<deployment component>> @5:..AccountService checkLogin(..) 93 getWebStatisticLink(..) getAccountNumberForDbUser(..) acknowledgeDnsTermsOfUse(..) hasAcknowledgedDnsTermsOfUse(..) getMyAdminLoginLink(..) printContractConfirmation(..) updateCssPassword(..) 164 updateAccountPassw ord(..) 115 checkToken(..) deleteToken(..) Hasselbring, Jung (CAU) Application Performance Monitoring with Kieker SPP Design for Future 29 / 52 Reverse Engineering of C# Complete Test Suite for Nordic Analytics [Magedanz 2011] Reverse Engineering . Reverse Engineering von C# Case study at HSH Nordbank AG. Hasselbring, Jung (CAU) Application Performance Monitoring with Kieker SPP Design for Future 30 / 52 After selecting one use case Reverse Engineering of C# Reverse Engineering . Reverse Engineering von C# 2 1 1 <<assembly component>> @23:..cSecurityFactory <<assembly component>> @15:..cScriptParameters 7 1 1 $ 73 1 1 7 7 1 <<assembly component>> @26:..cModelDescription 1 <<assembly component>> @2:..cObjectPool 23 <<assembly component>> @29:..cJob <<assembly component>> @34:..cPricing 52 1 2 <<assembly component>> @53:..cValuationControl <<assembly component>> @31:..cJobObject 402 <<assembly component>> @16:..cScriptCashFlowHandler <<assembly component>> @30:..cTypeFilter <<assembly component>> @28:..cEvaluationObjects <<assembly component>> @7:..cLegDescriptor 38 1 4 3 1 <<assembly component>> @14:..cScriptTables 243 34 <<assembly component>> @32:..cSecurityDependency <<assembly component>> @21:..cScript 3 2 <<assembly component>> @33:..cValuationDateFinder <<assembly component>> @44:..cDefaultFunctions 213 6 <<assembly component>> @52:..cSecurityDetailsCFP 6 2 <<assembly component>> @51:..cLegDetailsCFP 2 <<assembly component>> @10:..cLeg 34 2 1 34 19 19 1 112 <<assembly component>> @48:..cConvexityAdjustmentModel 19 38 <<assembly component>> @37:..cScriptIndexDescriptorFunction <<assembly component>> @8:..cPayoffDescriptor 34 38 <<assembly component>> @9:..cCreditDescriptor 34 <<assembly component>> @5:..cCreditBaskets 34 34 34 <<assembly component>> @19:..cScriptOptions <<assembly component>> @18:..cStandardFormulaBuilder 34 95 34 <<assembly component>> @17:..cFormulaBuilder 34 68 36 <<assembly component>> @13:..cCashFlow <<assembly component>> @41:..cPricingParamsCFP 828 56 38 34 <<assembly component>> @42:..cTermTreeFunctionIndex 38 38 2 19 19 38 <<assembly component>> @38:..cCollector 38 228 <<assembly component>> @49:..cLinearRateModelBlack 9 19 19 <<assembly component>> @11:..cCashFlowBuilder 37 76 <<assembly component>> @39:..cPricingParams 68 208 <<assembly component>> @40:..cPricingParamsCreditLinked 36 2 76 <<assembly component>> @43:..cSetIndex <<assembly component>> @20:..cReplaceIndexNameByFunction 34 107 <<assembly component>> @35:..cCashFlowPricingModel 57 243 136 <<assembly component>> @22:..cCashFlowScriptGenerator 19 <<assembly component>> @27:..cJobDescriptor 228 4 68 121 7 <<assembly component>> @36:..cIndexFixingDescriptionCollector 34 19 398 1 1 <<assembly component>> @1:..cAnalytics 4 12 1 3 1 2 4 <<assembly component>> @4:..cSecurity 1 <<assembly component>> @54:..cImplicitCalibration 4 <<assembly component>> @6:..cSwap <<assembly component>> @45:..cMarketAnalyticModel 38 19 <<assembly component>> @50:..cAccruedInterestCalculator 2 <<assembly component>> @12:..cAccrualConvention 38 2 5 2 <<assembly component>> @24:..cModelType <<assembly component>> @25:..cModelParameters <<assembly component>> @47:..cCashRateVolatilityFinder 57 68 <<assembly component>> @46:..cVolatilityFinder 38 34 <<assembly component>> @3:..cVaRMethodFactory 1 Hasselbring, Jung (CAU) Application Performance Monitoring with Kieker SPP Design for Future 31 / 52 Zoom to the operation level Reverse Engineering of C# Reverse Engineering . Reverse Engineering von C# <<assembly component>> @7:NordicAnalyticsProject.Engine.Securities.cSwaption GetEndDate() GetSwapTenor() 4 2 2 GetUnderlyingCashRateIndex() ReadDescriptionTableProperties(..) 2 2 2 <<assembly component>> @6:NordicAnalyticsProject.Engine.Securities.cSingleOptionSecurity 5 ReadDescriptionTableProperties(..) <<assembly component>> @21:NordicAnalyticsProject.Engine.Securities.cPlainSwapDateGrid BuildDateGrids(..) <<assembly component>> @3:NordicAnalyticsProject.Engine.Securities.cAccrualConvention 50 GetSwapTenorTime() GetAdditionalDays(..) 2 GetCreditNames() <<assembly component>> @20:NordicAnalyticsProject.Engine.Evaluation.PricingModels.Swaption.cSwaptionPricingAnalytic GetSwaptionValueEvaluationType(..) 2 PriceSwaption(..) 2 PriceSwaption(..) 2 GetSpecificMarketData(..) 2 2 <<assembly component>> @23:NordicAnalyticsProject.Engine.OptionValuation.cBlackScholes GetBlackScholesOptionType(..) 2 2 GetVolatility(..) StoreAdditionalPricingResults(..) Vega(..) 2 2 OptionValue(..) 2 GetPricingResult(..) IsShortRateMC(..) AddIPricingResults(..) PriceSwaption(..) 22 SetResultProperties(..) CreateSwaptionPricing(..) 2 AddResultProperty(..) FairRate(..) 2 2 Price(..) 2 2 2 <<assembly component>> @9:NordicAnalyticsProject.Engine.Evaluation.ValuationControl.cModelType InitializeLMMPricing(..) 2 InitializeMethodAssetClassSpecification() InitializeCommodityMCPricing(..) 2 InitializeIndexMCPricing(..) 2 IsHistoricalSecurity(..) 2 2 2 PriceFloatCF(..) 2 2 Evaluate(..) PriceFixCF(..) 20 PriceFloatLeg(..) 2686 4 Price(..) <<assembly component>> @26:NordicAnalyticsProject.Engine.Evaluation.ValuationControl.cValuationControl 20 PriceFixLeg(..) 2 AddResultProperty(..) Price(..) 2 2 2 <<assembly component>> @22:NordicAnalyticsProject.Engine.Evaluation.Pricing.cPlainSwapPricing 2 2 2 2 2 <<assembly component>> @24:NordicAnalyticsProject.Engine.Evaluation.PricingModels.Swaption.cSwaptionPricingResult <<assembly component>> @25:NordicAnalyticsProject.Engine.Evaluation.PricingModels.Swaption.cSwaptionPricingModel <<assembly component>> @19:NordicAnalyticsProject.Engine.Evaluation.Pricing.cPricing 2 ReadMethodAssetClassSpecification(..) GetDefaultIRSubModelType(..) 2 <<assembly component>> @5:NordicAnalyticsProject.Engine.Securities.cSecurity ReadAnalyticMethodsTable(..) 2 <<assembly component>> @8:NordicAnalyticsProject.Engine.Securities.cSecurityFactory GetHashCode() 2 CreateInstance(..) ReadCurrencyProperty(..) 2 <<assembly component>> @2:NordicAnalyticsProject.Engine.Evaluation.Risk.cVaRMethodFactory GetDependencyHandle() Create(..) 4 <<assembly component>> @12:NordicAnalyticsProject.Engine.Job.cJobDescriptor ReadObjectsTable(..) 2 4 2 ReadObjectsTable(..) CheckNumberOfObjects(..) ProveOfUniqueObjects(..) 2 ReadObjects(..) 2 <<assembly component>> @1:NordicAnalyticsProject.Engine.Analytics.cAnalytics SetContactMessage() CreateObject(..) 12 1 ReadObjectsFromFile(..) 12 CreateObject(..) 12 CreateObject(..) 12 CreateObjectPreProcessing(..) 12 2 2 WriteObjectsToFile(..) 2 GetOutConverter(..) 2 2 $ 2 2 ClearPools() 2 1 EvaluateJob(..) WriteLogInfo(..) 2 CreateObjectPostProcessing(..) WriteLogInfo(..) 1 GetVersionNumber() 2 30 GetCompilationDate() 2 2 6 12 <<assembly component>> @11:NordicAnalyticsProject.Engine.Evaluation.ValuationControl.cModelDescription 2 2 ReadScenarioTable(..) 2 2 2 6 InitMembersWithCorrespondingNullValues() 2 2 2 <<assembly component>> @10:NordicAnalyticsProject.Engine.Evaluation.ValuationControl.cModelParameters 2 Initialize(..) 4 <<assembly component>> @4:NordicAnalyticsProject.Engine.ObjectFactory.cObjectPool 2 2 Insert(..) 2 14 OnInsertObject(..) 2 OnClearPool() <<assembly component>> @18:NordicAnalyticsProject.Engine.Job.cValuationDateFinder <<assembly component>> @17:NordicAnalyticsProject.Engine.Securities.cSecurityDependency GetValuationDate() 2 ReplaceDependence() 2 2 <<assembly component>> @14:NordicAnalyticsProject.Engine.Job.cJob GetObject(..) 18 InitializeTemplateObjects() 2 SetObjectAndCheckImpliedCalibration(..) GetDependencies() SetStoreLossDistributions() InitializeUsageTracking() GetObject(..) 2 4 2 6 2 <<assembly component>> @13:NordicAnalyticsProject.Engine.Job.cEvaluationObjects InitializeObjects() 18 6 InitializePartialJobs(..) InitializeObjectTracking(..) 2 2 2 2 InitializeMarketDataUsageTracking() SetCollectionObjects(..) BuildNotBuiltDefaultCurves() ClearIntermediateObjects() GetObjectSignatures(..) 2 18 CheckObjectsAreUnique(..) 18 2 SetJobPart(..) ToString() 2 20 GetObjects(..) <<assembly component>> @27:NordicAnalyticsProject.Engine.Job.cImplicitCalibration 18 2 GetObjects() FindCollections(..) 42 MarketDataUsageCheck() 2 Evaluate() 8 CopyOrId(..) GetObject(..) GetUseUsageTracking(..) ReplaceDependenceByObjectSignature() IsCalibrated(..) 6 Objects(..) 2 58 ReplaceDependence(..) <<assembly component>> @15:NordicAnalyticsProject.Engine.Job.cJobObject 2 <<assembly component>> @16:NordicAnalyticsProject.Engine.Job.cTypeFilter GetObjects(..) 2 4 2 Objects(..) 20 70 JobPartObjects(..) 2 Accept(..) ReplaceDependence(..) Hasselbring, Jung (CAU) Application Performance Monitoring with Kieker SPP Design for Future 32 / 52 Zoom to the operation level Reverse Engineering of C# Reverse Engineering . Reverse Engineering von C# <<assembly component>> @7:NordicAnalyticsProject.Engine.Securities.cS GetEndDate() GetSwapTenor() 4 2 ReadDescriptionTableProperties(..) 2 2 @6:NordicAnaly 5 <<assembly component>> @21:NordicAnalyticsProject.Engine.Securities.cPlainSwapDateGrid BuildDateGrids(..) <<assembly component>> @3:NordicAnalyticsProject.Engine.Securities.cAccrualConvention 50 GetAdditionalDays(..) 2 <<assembly component>> Evaluation.PricingModels.Swaption.cSwaptionPricingAnalytic GetSwaptionValueEvaluationType(..) 2 ceSwaption(..) 2 2 <<assembly component>> @23:NordicAnalyticsProject.Engine.OptionValuation.cBlackScholes GetBlackScholesOptionType(..) 2 etVolatility(..) StoreAdditionalPricingResults(..) OptionValue(..) 2 <<assembly component>> @22:NordicAnalyticsProject.Engine.Evaluation.Pricing.cPlainSwapPricing waptionPricingResult 2 esultProperty(..) FairRate(..) Vega(..) 2 2 2 PriceFixLeg(..) 20 PriceFixCF(..) 2 esultProperty(..) PriceFloatLeg(..) 20 PriceFloatCF(..) 2686 4 2 <<assembly component>> @9:NordicAnalyticsProject.Engine.Evaluation.ValuationControl.cModelType 2 InitializeMethodAssetClassSpecification() 2 ReadMethodAssetClassSpecification(..) 2 GetDefaultIRSubModelType(..) 2 2 ReadAnalyticMethodsTable(..) @5:Nordic 2 <<assembly component>> @8:NordicAnalyticsProject.Engine.Securities.cSecurityFactory CreateInstance(..) 2 2 Hasselbring, Jung (CAU) <<assembly component>> @2:NordicAnalyticsProject.Engine.Evaluation.Risk.cVaRMethodFactory Application Performance Monitoring with Kieker SPP Design for Future 32 / 52 Reverse Engineering of COBOL With consideration of non-instrumented modules [Knoche et al. 2012] Reverse Engineering . Reverse Engineering of COBOL IDENTIFICATION DIVISION. PROGRAM-ID. MODULE-X. Literal block Before-Call Injection Point Called Module: "MODULE-Y" PROCEDURE DIVISION. CALL "MODULE-Y". GOBACK. Literal block AOP-based COBOL instrumentation MODULE-B $ MODULE-A MODULE-C MODULE-D MODULE-E Module-level call dependency graph with assumed dependencies Case study of b+m Informatik AG (Kieker extensions by Holger Knoche): 1 Industrial context with more than 1.000 COBOL modules. 2 140.351 probes with 14 probe types. Hasselbring, Jung (CAU) Application Performance Monitoring with Kieker SPP Design for Future 33 / 52 Analysis of a PC COBOL System [Richter 2012] Reverse Engineering . Reverse Engineering of COBOL 1 119 1 1 <<assembly component>> @11:PSGLOEDI <<assembly component>> @10:PSGLOSAV 1 2 1 <<assembly component>> @3:REALIA_GET_MACHINE_NAME <<assembly component>> @9:JOBIDSAV <<assembly component>> @6:SHIFTFUN 1 2 <<assembly component>> @1:PSGLOINI 7 <<assembly component>> @2:S_GetEnvironmentVariableA 3 7 <<assembly component>> @5:PSGLOFUN 1 1 1 1 4 <<assembly component>> @4:PATHMAKE 4 <<assembly component>> @34:SGBINITA 1 2 25 <<assembly component>> @13:BUCHWAND 1 <<assembly component>> @44:REALIA_CREATE_UNIQUE_FILE 5 <<assembly component>> @7:REALIA_FINDFIRST 25 1 <<assembly component>> @8:REALIA_FINDCLOSE 6 <<assembly component>> @35:USRIDENT 7 <<assembly component>> @18:MSGERZEU 1 <<assembly component>> @37:WKSIDENT 1 $ 1 <<assembly component>> @12:SGBSTART Hasselbring, Jung (CAU) 1 1 1 1 <<assembly component>> @19:MSGLAUFZ 3 1 1 3 <<assembly component>> @20:MSGMELDE 1 1 <<assembly component>> @17:PATHFIND 13 87 <<assembly component>> @16:PARMFILE 345 <<assembly component>> @21:ZREPLACE <<assembly component>> @14:PASSWORT 1 3 12 1 1 3 <<assembly component>> @27:DATABTBA <<assembly component>> @42:SACHG-INIMO <<assembly component>> @41:DRUCKREO 1 1 <<assembly component>> @15:DATUMFUN 7 <<assembly component>> @43:D9991FUN 4 1 13 <<assembly component>> @26:DATABASE 13 <<assembly component>> @23:DATABLOK 13 <<assembly component>> @25:DATABTRV 25 9 <<assembly component>> @24:BTRV 6 6.4 Ergebnisse der Evaluation Abbildung 6.5: Komponentenabhängigkeits-Modell der Menü-Navigation; Extrahiert aus den Monitoringdaten 1 1 <<assembly component>> @36:DATABSBS <<assembly component>> @22:DATABSPT 4 1 <<assembly component>> @38:PSKVSINI 2 1 1 <<assembly component>> @31:SUCHEFUN 1 <<assembly component>> @32:ZUGRIFUN 1 <<assembly component>> @48:SACHG-SAVMO 1 <<assembly component>> @39:PSKVSSAV 1 113 <<assembly component>> @40:PSKVSEDI <<assembly component>> @30:STRINFUN 4 1 <<assembly component>> @29:SCRHANDL 2 110 <<assembly component>> @28:SCRINOUT 373 <<assembly component>> @33:SP2 25 101 1 <<assembly component>> @47:PSGLO-MENNA 1 <<assembly component>> @45:SGBMENWA 1 <<assembly component>> @46:SGBMENUE 1 135 Application Performance Monitoring with Kieker SPP Design for Future 34 / 52 Reverse Engineering of Visual Basic 6 Analysis of specific traces Reverse Engineering . Reverse Engineering of VB 6 frmLogin.cmdOK_Click() 1 1 frmLogin.Anwendung() frmMain.MDIForm_Load() 1 Module1.Main() 1 1 1 frmLogin.Form_Load() frmAKTE.tool_menu_begin() 1 frmLogin.txtPassword_gotfocus() 1 frmAKTE.ob_frei() 1 $ 1 1 frmMain.mnuDatafrmAKTE_Click() frmAKTE.Form_Resize() 1 1 frmAKTE.felder_sperren() clsKlasse.pruef_user() 1 1 1 frmAKTE.Option1_Click(Integer) frmAKTE.ob_sperren() clsKlasse.Class_Initialize() 1 1 frmAKTE.felder_frei() 1 1 BENUTZER.select() 1 frmAKTE.Form_Load() 1 clsKlasse.pruef_abt() clsKlasse.pruef_rechte() 1 1 ABTEILUNG.select() BENABT.select() 1 AKTE.select() 1 1 1 frmAKTE.SetButtons(Boolean) 1 1 clsKlasse.adoPrimaryRS_MoveComplete(ADODB.EventReasonEnum, ADODB.Error, ADODB.EventStatusEnum, ADODB.Recordset) 1 frmAKTE.Suchen() 1 18 clsKlasse.Class_GetDataMember(String, Object) frmAKTE.felder_sichern() 1 frmAKTE.cmdEdit_Click() 1 frmAKTE.IndexPosLesen() 1 IPOS.select() 1 1 frmAKTE.pruefung_ob() 1 frmAKTE.fuehrende_nullen(Long) 1 frmAKTE.txtFields_Change(Integer) 6 frmAKTE.daten_binden() 1 1 1 1 frmAKTE.tool_menu_edit() frmAKTE.Abteilung() frmAKTE.RtxtBoxtitel_Change() frmAKTE.RtxtBoxenthaelt_Change() Case study at Dataport (Kieker extensions by Holger Knoche). Hasselbring, Jung (CAU) Application Performance Monitoring with Kieker SPP Design for Future 35 / 52 cmdLast_Click Detection of unused code cmdUpdate_Click 85 mnuFileClose_Click Reverse Engineering of Visual Basic 6 Form_KeyDown cmdFirst_Click Abt_Akte_del mnuEditUndo_Click Reverse Engineering . Reverse Engineering of VB 6 cmdClose_Click SetButtons cmdNext_Click Ben_BenAb frmSTAT ipos_loesch 2.847 ms Statistik 2280.695 ms 6.117 ms Abt_Zus_del cmd_start_Click Ausgabe 276 abt_suchen 15 1 4.981 ms 3.596 ms Form_Load EditingRecord txt_abt_GotFocus MouseWheel 1 mnuFileStart_Click Zeile mnuHelpAbout_Click 2 MSHFlexGrid1_RowColChange mnuHelpSearchForHelpOn_Click 38.524 ms 3.219 ms Form_KeyDown cmdClose_Click 1 1 mnuHelpContents_Click mnuFileExit_Click Itext_neu Add IndexNeu Zus_Akte_del Ben_neu Abt_n 83 AkteLoeschen cmd_druck_Click Zus_Itext_del Hasselbring, Jung (CAU) Application Performance Monitoring with Kieker SPP Design for Future 36 / 52 Agenda Capacity Management Monitoring for Dynamic Analysis Kieker Monitoring & Analysis Framework 3 Failure Detection 4 Reverse Engineering 5 Capacity Management 6 Kieker Hands On 7 Summary and Outlook 1 2 Hasselbring, Jung (CAU) Application Performance Monitoring with Kieker SPP Design for Future 37 / 52 Online Capacity Management SLAstic Framework (Ph.D. thesis of André van Hoorn) Capacity Management instrumented, runtime reconfigurable s/w system ... raw monitoring records SLAstic. RECONFIGURATION reconfiguration plans monitoring events SLAstic model architecture SLAstic. MONITORING reconfiguration actions technology instrumentation SLAstic.CONTROL initialization extraction SLAstic model Analysis online adaptation engine Hasselbring, Jung (CAU) Application Performance Monitoring with Kieker SPP Design for Future 38 / 52 In SPP 1593: iObserve http://www.dfg-spp1593.de/index.php?id=44 Capacity Management Observe Page 10 Integrated Observation Modeling Techniques to Support Adaptation created to prescribe properties ofand a planned system. Descriptive models describe systems as and they have been realized. In approach,Systems observation data is fed into descriptive models@runtime. Evolution ofour Software <<references>> ���������������� ������������ <<references>> �������������������� ����������� ����������� ����������� ����������� ������ ������ ����������� ���������������� ����������� ��������� ��������� ����������������� ����������� ������ ������ Figure 3: Descriptive Models and their relation to the software system Models@Runtime for Managed Software Evolution. The scenario described in Figure 3, resembles a software system running on an infrastructure service (IaaS 1) utilizing software services (Service 2). The boxes on the left represent the four models we derive from previous work in the context of our integrated observation and anomaly detection project. The Software Metrics Meta Model (SMM) [77] is one of the meta model specifications developed by Hasselbring, Jung (CAU) Application Performance Monitoringawith Kieker SPPObject Design for Future 39 / 52 the Architecture-Driven Modernization (ADM) Task Force, sub-committee of the Management Agenda Kieker Hands On Monitoring for Dynamic Analysis Kieker Monitoring & Analysis Framework 3 Failure Detection 4 Reverse Engineering 5 Capacity Management 6 Kieker Hands On 7 Summary and Outlook 1 2 Hasselbring, Jung (CAU) Application Performance Monitoring with Kieker SPP Design for Future 40 / 52 The Bookstore Kieker Hands On <<SystemAssembly>> BookstoreSystem <<Component>> Bookstore <<Component>> Catalog <<Component>> CRM Hasselbring, Jung (CAU) Application Performance Monitoring with Kieker SPP Design for Future 41 / 52 Instrumentation by Hand Example: Monitoring of Operation Executions Kieker Hands On public class CRM { private final Catalog catalog; public CRM(final Catalog catalog) { this.catalog = catalog; } } public void getOffers() { this.catalog.getBook(false); } Hasselbring, Jung (CAU) Application Performance Monitoring with Kieker SPP Design for Future 42 / 52 Example: Component CRM Add Operation Execution Probe Kieker Hands On private static final IMonitoringController MONITORING_CONTROLLER = MonitoringController.getInstance(); public void getOffers() { final long tin = MONITORING_CONTROLLER.getTimeSource().getTime(); catalog.getBook(false); // <-- the monitored execution final long tout = MONITORING_CONTROLLER.getTimeSource().getTime(); } final OperationExecutionRecord e = new OperationExecutionRecord( "public void Catalog.getBook(boolean)", NO_SESSION_ID, NO_TRACEID, tin, tout, "myHost", NO_EOI_ESS, NO_EOI_ESS); MONITORING_CONTROLLER.newMonitoringRecord(e); Hasselbring, Jung (CAU) Application Performance Monitoring with Kieker SPP Design for Future 43 / 52 Full Instrumentation with Kieker Kieker Hands On AOP Konfiguration META-INF/aop.xml <!DOCTYPE aspectj PUBLIC "-//AspectJ//DTD//EN" "http://www.aspectj.org/ dtd/aspectj_1_5_0.dtd"> <aspectj> <weaver options=""> <include within="*"/> </weaver> <aspects> <aspect name="kieker.monitoring.probe.aspectj.operationExecution. OperationExecutionAspectFull"/> </aspects> </aspectj> AspectJ $ java -javaagent:lib/kieker-1.6_aspectj.jar -jar BookstoreApplication.jar 50 Hasselbring, Jung (CAU) Application Performance Monitoring with Kieker SPP Design for Future 44 / 52 Monitoring JPetStore Kieker Hands On • 3-Layer Architecture • Presentation layer: Struts • Service layer: POJOs • Persistence layer: iBatis Client HTTP HTTP iBatis JPetStore struts.ActionServlet Apache Struts Presentation Layer Service Layer Persistence Layer iBatis DAO Framework SQL SQL DBMS iBatis JPetStore 5.0 (http://ibatis.apache.org/) Hasselbring, Jung (CAU) • Deployment • Application Server (here: Jetty 7.6.7) • SQL DBMS Server (here: HSQL) Application Performance Monitoring with Kieker SPP Design for Future 45 / 52 JPetStore – AOP Konfiguration Kieker Hands On Datei webapps/jpetstore/WEB-INF/classes/META-INF/aop.xml <!DOCTYPE aspectj PUBLIC "-//AspectJ//DTD//EN" "http://www.aspectj.org/ dtd/aspectj_1_5_0.dtd"> <aspectj> <weaver options=""> <include within="org.mybatis.jpetstore..*"/> <include within="net.sourceforge.stripes.controller. DispatcherServlet"/> </weaver> <aspects> <aspect name="kieker.monitoring.probe.aspectj.operationExecution. OperationExecutionAspectFull"/> </aspects> </aspectj> Hasselbring, Jung (CAU) Application Performance Monitoring with Kieker SPP Design for Future 46 / 52 JPetStore – Application Context Kieker Hands On Datei webapps/jpetstore/WEB-INF/applicationContext.xml <beans xmlns="http://www.springframework.org/schema/beans" [...]> [...] <!-- Kieker's instrumentation probes based on the Spring AOP interception framework --> <bean id="opEMII" class="kieker.monitoring.probe.spring.executions. OperationExecutionMethodInvocationInterceptor" /> <aop:config> <aop:advisor advice-ref="opEMII" pointcut="execution(public * org.mybatis.jpetstore ..*.*(..))"/> </aop:config> [...] </beans> Hasselbring, Jung (CAU) Application Performance Monitoring with Kieker SPP Design for Future 47 / 52 Online Analysis Kieker Hands On Hasselbring, Jung (CAU) Application Performance Monitoring with Kieker SPP Design for Future 48 / 52 Online Analysis Kieker Hands On Hasselbring, Jung (CAU) Application Performance Monitoring with Kieker SPP Design for Future 48 / 52 Summary Summary and Outlook Kieker is . . . • a framework for application monitoring and analysis, • employed in various industry use cases, • flexible and extensible. Kieker supports . . . • Java, J2EE (in production) • .NET, VB6, Cobol (industry case studies) • C, Perl (currently developed) http://kieker-monitoring.net/ Hasselbring, Jung (CAU) Application Performance Monitoring with Kieker SPP Design for Future 49 / 52 Outlook Summary and Outlook Current work addresses: • Extensions for workflow monitoring [Brauer and Hasselbring 2012] • Extensions for profiling embedded systems • Model-driven instrumentation & analysis • Dynamic and static software measuring & analysis [Frey et al. 2012] • Extendable Kieker Data Bridge Hasselbring, Jung (CAU) Application Performance Monitoring with Kieker SPP Design for Future 50 / 52 References References T. C. Bielefeld. Online performance anomaly detection for large-scale software systems. Diploma thesis, University of Kiel, Germany, Mar. 2012. P. C. Brauer and W. Hasselbring. Capturing provenance information with a workflow monitoring extension for the kieker framework. In Proceedings of the 3rd International Workshop on Semantic Web in Provenance Management, volume 856 of CEUR Workshop Proceedings. CEUR-WS, May 2012. URL http://eprints.uni-kiel.de/19636/. R. Dabrowski. ˛ On architecture warehouses and software intelligence. In T.-h. Kim, Y.-h. Lee, and W.-c. Fang, editors, Proceedings of the 4th International Mega-Conference on Future Generation Information Technology (FGIT 2012), volume 7709 of Lecture Notes in Computer Science, pages 251–262. Springer, 2012. ISBN 978-3-642-35584-4. doi: 10.1007/978- 3- 642- 35585- 1_35. P. Döhring. Visualisierung von Synchronisationspunkten in Kombination mit der Statik und Dynamik eines Softwaresystems. Master’s thesis, Kiel University, Oktober 2012. URL http://eprints.uni-kiel.de/15433/. T. Focke. Performance Monitoring von Middleware-basierten Applikationen. Diplomarbeit, University Oldenburg, 2006. S. Frey, A. van Hoorn, R. Jung, B. Kiel, and W. Hasselbring. Mamba: Model-based software analysis utilizing omg’s smm. In Proceedings of the 14. Workshop Software-Reengineering (WSR ’12), pages 37–38, May 2012. URL http://eprints.uni-kiel.de/15393/. Also appeared in Softwaretechnik-Trends 32(2) (May 2012) 49-50. G. Kiczales, J. Lamping, A. Menhdhekar, C. Maeda, C. Lopes, J.-M. Loingtier, and J. Irwin. Aspect-oriented programming. In Proceedings of the European Conference on Object-Oriented Programming (ECOOP ’97), volume 1241 of LNCS, pages 220–242. Springer, 1997. Kieker Project. Kieker 1.6 User Guide. Software Engineering Group, University of Kiel, Germany, 2012a. URL http://kieker-monitoring.net/documentation/. Kieker Project. Kieker web site, 2012b. URL http://kieker-monitoring.net/. H. Knoche, A. van Hoorn, W. Goerigk, and W. Hasselbring. Automated source-level instrumentation for dynamic dependency analysis of COBOL systems. In Proceedings of the 14. Workshop Software-Reengineering (WSR ’12), pages 33–34, May 2012. F. Magedanz. Dynamic analysis of .NET applications for architecture-based model extraction and test generation, Oct. 2011. Diploma Thesis, University of Kiel. B. Richter. Dynamische Analyse von COBOL-Systemarchitekturen zum modellbasierten Testen. Diploma thesis, University of Kiel, Germany, Aug. 2012. M. Rohr, A. van Hoorn, J. Matevska, N. Sommer, L. Stoever, S. Giesecke, and W. Hasselbring. Kieker: Continuous monitoring and on demand visualization of Java software behavior. In C. Pahl, editor, Proceedings of the IASTED International Conference on Software Engineering 2008 (SE’08), pages 80–85, Feb. 2008. ISBN 978-0-88986-715-4. A. van Hoorn, M. Rohr, W. Hasselbring, J. Waller, J. Ehlers, S. Frey, and D. Kieselhorst. Continuous monitoring of software services: Design and application of the Kieker framework. Technical Report TR-0921, Department of Computer Science, University of Kiel, Germany, Nov. 2009. URL http://www.informatik.uni-kiel.de/uploads/tx_publication/vanhoorn_tr0921.pdf. Hasselbring, Jung (CAU) Application Performance Monitoring with Kieker SPP Design for Future 51 / 52 References (cont’d) References A. van Hoorn, J. Waller, and W. Hasselbring. Kieker: A framework for application performance monitoring and dynamic software analysis. In Proceedings of the 3rd ACM/SPEC International Conference on Performance Engineering (ICPE 2012), pages 247–248. ACM, Apr. 2012. J. Waller and W. Hasselbring. A comparison of the influence of different multi-core processors on the runtime overhead for application-level monitoring. In V. Pankratius and M. Philippsen, editors, Proceedings of the International Conference on Multicore Software Engineering, Performance, and Tools (MSEPT 2012), volume 7303 of Lecture Notes in Computer Science, pages 42–53. Springer Berlin / Heidelberg, June 2012. ISBN 978-3-642-31201-4. doi: 10.1007/978- 3- 642- 31202- 1_5. C. Wulf. Runtime visualization of static and dynamic architectural views of a software system to identify performance problems. B.Sc. Thesis, University of Kiel, Germany, 2010. Q. Zheng, Z. Ou, L. Liu, and T. Liu. A novel method on software structure evaluation. In Proceedings of the 2nd IEEE International Conference on Software Engineering and Service (IEEE ICSESS 2011), pages 251–254. IEEE, July 2011. doi: 10.1109/ICSESS.2011.5982301. Hasselbring, Jung (CAU) Application Performance Monitoring with Kieker SPP Design for Future 52 / 52