Document

Werbung
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
Herunterladen