Conference PaperPDF Available

Kieker: A framework for application performance monitoring and dynamic software analysis

Authors:

Abstract and Figures

Kieker is an extensible framework for monitoring and analyzing the runtime behavior of concurrent or distributed software systems. It provides measurement probes for application performance monitoring and control-flow tracing. Analysis plugins extract and visualize architectural models, augmented by quantitative observations. Configurable readers and writers allow Kieker to be used for online and offline analysis. This paper reviews the Kieker framework focusing on its features, its provided extension points for custom components, as well the imposed monitoring overhead.
Content may be subject to copyright.
Kieker: A Framework for Application Performance
Monitoring and Dynamic Software Analysis
Invited Demo Paper
André van Hoorn, Jan Waller, and Wilhelm Hasselbring
Software Engineering Group, Christian-Albrechts-University Kiel, 24098 Kiel, Germany
{avh,jwa,wha}@informatik.uni-kiel.de
ABSTRACT
Kieker is an extensible framework for monitoring and an-
alyzing the runtime behavior of concurrent or distributed
software systems. It provides measurement probes for ap-
plication performance monitoring and control-flow tracing.
Analysis plugins extract and visualize architectural models,
augmented by quantitative observations. Configurable read-
ers and writers allow Kieker to be used for online and offline
analysis. This paper reviews the Kieker framework focus-
ing on its features, its provided extension points for custom
components, as well the imposed monitoring overhead.
Categories and Subject Descriptors
D.2.5 [Software Engineering]: Testing and Debugging—
Monitors, Tracing; D.2.8 [Software Engineering]: Met-
rics—Performance measures
1. INTRODUCTION
Application-level monitoring and dynamic analysis of soft-
ware systems are a basis for various quality-of-service eval-
uation and reverse-engineering tasks. Example use cases in-
clude the diagnosis of SLO violations, online capacity man-
agement, as well as performance model extraction and cali-
bration. The Kieker framework provides monitoring, analy-
sis, and visualization support for these purposes.
Kieker development started in 2006 as a small tool for
monitoring response times of Java software operations. Since
then, Kieker has evolved into a powerful and extensible dy-
namic analysis framework for Java-based systems, including,
e.g., model extraction and visualization support for depen-
dency graphs, sequence diagrams etc. [1]. Kieker has been
been used for dynamic analysis of production systems in in-
dustry [1, 2]. Recently, monitoring adapters for additional
platforms, such as .NET and COM, have been added. In
2011, Kieker was reviewed, accepted, and published as a rec-
ommended tool by the SPEC Research Group. Since then,
the tool is also distributed as part of SPEC RG’s tool reposi-
tory at http://research.spec.org/projects/tools.html.
Permission to make digital or hard copies of all or part of this work for
personal or classroom use is granted without fee provided that copies are
not made or distributed for profit or commercial advantage and that copies
bear this notice and the full citation on the first page. To copy otherwise, to
republish, to post on servers or to redistribute to lists, requires prior specific
permission and/or a fee.
ICPE’12, April 22–25, 2012, Boston, Massachusetts, USA
Copyright 2012 ACM 978-1-4503-1202-8/12/04 ...$10.00.
2. FRAMEWORK AND CORE FEATURES
The Kieker framework is structured into a monitoring and an
analysis part [1]. On the monitoring side, monitoring probes
collect measurements represented as monitoring records,
which a monitoring writer passes to a configured monitor-
ing log or stream. On the analysis side, monitoring readers
import monitoring records of interest from the monitoring
log/stream and pass them to a configurable pipe-and-filter
architecture of analysis plugins. For the mentioned com-
ponents, Kieker already includes a number of implementa-
tions, summarized below. Given the framework’s extensibil-
ity, custom components can be developed easily, if required.
Focusing on application-level monitoring, Kieker includes
monitoring probes for collecting timing and trace informa-
tion from distributed executions of software operations.
Additionally, probes for sampling system-level measures,
e.g., CPU utilization and memory usage, are included.
Kieker supports monitoring logs and streams utilizing file
systems, databases, as well as JMS and JMX queues. A
number of plugins for reconstructing, analyzing, and visual-
izing software architectural models such as calling-dependen-
cy graphs, call trees, and sequence diagrams are included.
3. DYNAMIC ANALYSIS WORKFLOW
Running a dynamic analysis with Kieker requires the in-
strumentation of the software system, as well as the speci-
fication of the monitoring and analysis configuration. Fig. 1
illustrates a typical dynamic analysis workflow with Kieker.
Components of the software system need to be instru-
mented with monitoring probes. Usually, existing monitor-
ing probes and record types are sufficient, but depending on
the required measurement data and involved technologies,
custom monitoring probes and monitoring record types may
be implemented.
In most cases, it is not necessary to implement custom
monitoring writers and readers. File system (with comma-
separated files) or database writers enable direct access to
the monitoring log/stream and collected monitoring records
can be analyzed using standard spread-sheet or statistics
tools. Additionally, collected or queued records can be trans-
ferred to an analysis configuration.
On the analysis side, a configuration of monitoring readers
and analysis plugins needs to be defined, using the included
pipe-and-filter framework. Once defined, these configura-
tions can be executed with Kieker to analyze previously col-
lected (offline) or incoming (online) monitoring records and
to produce textual output or graphical visualizations.
van Hoorn, A., Waller, J. and Hasselbring, W. (2012) Kieker: A Framework for Application Performance Monitoring and Dynamic Software
Analysis [Paper] In: 3rd joint ACM/SPEC International Conference on Performance Engineering (ICPE'12), April 22-25, 2012, Boston,
Massachusetts, USA.
Figure 1: Illustration of a typical dynamic analysis workflow utilizing Kieker
4. MONITORING OVERHEAD
Monitoring of software systems imposes a performance over-
head. We performed extensive micro- and macro-bench-
marks to quantify this impact on Java applications. In
Fig. 2, we present the results of such a micro-benchmark to
determine the three portions of the monitoring overhead [1]
and of such a macro-benchmark to quantify the overhead of
monitoring a typical enterprise system, represented by the
SPECjEnterprise 2010 industry benchmark.
1
On a typical enterprise server machine, our micro-bench-
marks for a single method call reveal a median overhead
of 0.1 µs for instrumentation, 1.0 µs to collect performance
data, and 2.7 µs to write the collected data to a file sys-
tem (Fig. 2 (a)). These results scale linearly with additional
monitored method calls. The macro-benchmark simulates
a typical Java EE application with 40 instrumented classes
and 138 instrumented methods, accessed by approximately
260 concurrent threads. A comparison of the average re-
sponse times without and with active Kieker monitoring re-
veals the average overhead at below 10% (Fig. 2 (b)).
Writing (W)
(a) micro-benchmark
CreateVehicleEJB CreateVehicleWS P
urchase
Manage
Browse
(b) macro-benchmark
Figure 2: Summary of monitoring overhead results
5. CONCLUSION & FUTURE WORK
Kieker is developed and employed for various purposes in
research, teaching, and practice. Application areas include:
performance evaluation, self-adaptation control (e.g., online
capacity management), problem localization, simulation (re-
playing workload traces for driving simulations; measure-
ment and logging of simulation data; analysis of simulation
results), and software reverse engineering (e.g., extraction
of architectural and usage models). In these contexts, our
future work includes the development of additional analy-
sis plugins, e.g., improved support for analyzing concurrent
behavior. In addition to Java, .NET, and COM, we are
working on monitoring support for other platforms, such as
COBOL. Currently, we are developing a Web-based user in-
terface for configuring and running dynamic analyses with
Kieker. A road map is provided on the Kieker home page [3]:
http://www.kieker-monitoring.net
References
[1] A. van Hoorn, M. Rohr, W. Hasselbring, J. Waller, J. Ehlers,
S. Frey, and D. Kieselhorst. Continuous monitoring of soft-
ware services: Design and application of the Kieker frame-
work. TR-0921, Dept. of Computer Science, Univ. of Kiel,
Germany, 2009.
[2] M. Rohr, A. van Hoorn, W. Hasselbring, M. L
¨
ubcke,
and S. Alekseev. Workload-intensity-sensitive timing be-
havior analysis for distributed multi-user software systems.
In Proc. Joint WOSP/SIPEW Int. Conf. on Perf. Eng.
(WOSP/SIPEW ’10), pages 87–92. ACM, 2010.
[3] Kieker home page. http://www.kieker-monitoring.net.
This work is partly funded by the German Federal Ministry of Edu-
cation and Research (BMBF) under grant number 01IS10051.
1
SPECjEnterprise is a trademark of the Standard Performance Eval-
uation Corp. (SPEC). The SPECjEnterprise2010 results or findings in
this publication have not been reviewed or accepted by SPEC, there-
fore no comparison nor performance inference can be made against
any published SPEC result. The official web site for SPECjEnter-
prise2010 is located at http://www.spec.org/jEnterprise2010/.
... The data is then exported via gRPC to an OpenTelemetry Collector which exports it to the backend of ExplorViz via Apache Kafka. 2 The retrieved tracing data is processed in the analysis stage, where traces and structural data of the software system is reconstructed from the retrieved OpenTelemetry spans. At last, both the processed dynamic and static data is requested and visualized by the frontend. ...
... Kieker [2,3] is a tool that provides dynamic analysis of software systems. Just as inspectIT Ocelot, it provides data about the function calls that occur both inside and between applications. ...
Preprint
Full-text available
As software systems grow in complexity, data and tools that provide valuable insights for easier program comprehension become increasingly important. OpenTelemetry has become a standard for the collection of monitoring data. In this work we present our experiences with different ways how OpenTelemetry can be leveraged to automatically instrument software systems for the purpose of software visualization. Particularly, we explore automatic instrumentation with the OpenTelemetry SDKs, and both application and unit test instrumentation with the Java agent inspectIT Ocelot. The collected data is exported to our live trace visualization tool ExplorViz.
... Kieker is included in the SPEC Research Group's repository of peer-reviewed tools for quantitative system evaluation and analysis. 1 The review process and the final acceptance of Kieker for this tool repository triggered manifold activities in the Kieker project and helped to further improve Kieker's product quality (both code and documentation); Kieker's visibility increased considerably, with 480 citations to the ICPE 2012 Kieker tool demo paper [38], so far. 2 ...
Preprint
Full-text available
Observability of a software system aims at allowing its engineers and operators to keep the system robust and highly available. With this paper, we present the Kieker Observability Framework Version 2, the successor of the Kieker Monitoring Framework. In this tool artifact paper, we do not just present the Kieker framework, but also a demonstration of its application to the TeaStore benchmark, integrated with the visual analytics tool ExplorViz. This demo is provided both as an online service and as an artifact to deploy it yourself.
... We utilize the logs generated by the load generator to collect the response time of each request and leverage podman stats to gather the resource (CPU) usage statistics for each of the containers. Furthermore, we have instrumented the subject systems with Kieker [58] to collect the execution time of each function and their interactions. Kieker offers comprehensive dynamic analysis capabilities at runtime with low overhead and does not require modifying the source code. ...
Preprint
Full-text available
During software development, developers often make numerous modifications to the software to address existing issues or implement new features. However, certain changes may inadvertently have a detrimental impact on the overall system performance. To ensure that the performance of new software releases does not degrade, existing practices rely on system-level performance testing, such as load testing, or component-level performance testing to detect performance regressions. However, performance testing for the entire system is often expensive and time-consuming, posing challenges to adapting to the rapid release cycles common in modern DevOps practices. System-level performance testing cannot be conducted until the system is fully built and deployed. On the other hand, component-level testing focuses on isolated components, neglecting overall system performance and the impact of system workloads. In this paper, we propose a novel approach to early detection of performance regressions by bridging the local performance data generated by component-level testing and the system-level architectural models. Our approach uses local performance data to identify deviations at the component level, and then propagate these deviations to the architectural model. We then use the architectural model to predict regressions in the performance of the overall system. We evaluate our approach on two open-source benchmark systems and show that it can effectively detect end-to-end system performance regressions from local performance deviations with different intensities and under various system workloads. More importantly, our approach can detect regressions as early as in the development phase, in contrast to existing approaches that require the system to be fully built and deployed. Our approach is lightweight and can complement traditional system performance testing when testing resources are scarce.
Preprint
Application users react negatively to performance regressions or availability issues across software releases. To address this, modern cloud-based applications with their multiple daily releases rely on live testing techniques such as A/B testing or canary releases. In edge-to-cloud applications, however, which have similar problems, developers currently still have to hard-code custom live testing tooling as there is no general framework for edge-to-cloud live testing. With Umbilical Choir, we partially close this gap for serverless edge-to-cloud applications. Umbilical Choir is compatible with all Function-as-a-Service platforms and (extensively) supports various live testing techniques, including canary releases with various geo-aware strategies, A/B testing, and gradual roll-outs. We evaluate Umbilical Choir through a complex release scenario showcasing various live testing techniques in a mixed edge-cloud deployments and discuss different geo-aware strategies.
Technical Report
Full-text available
In addition to studying the construction and evolution of software services, the software engineering discipline needs to address the operation of continuously running software services. A requirement for its robust operation are means for effective monitoring of software runtime behavior. In contrast to profiling for construction activities, monitoring of operational services should only impose a small performance overhead. Furthermore, instrumentation should be non-intrusive to the business logic, as far as possible. We present the Kieker framework for monitoring software runtime behavior, e.g., internal performance or (distributed) trace data. The flexible architecture allows to replace or add framework components, including monitoring probes, analysis components, and monitoring record types shared by logging and analysis. As a non-intrusive instrumentation technique, Kieker currently employs, but is not restricted to, aspect-oriented programming. An extensive lab study evaluates and quantifies the low overhead caused by the framework components. Qualitative evaluations provided by industrial case studies demonstrate the practicality of the approach with a telecommunication customer self service and a digital photo submission service. Kieker is available as open-source software, where both the academic and industrial partners contribute to the code. Our experiment data is publicly available, allowing interested researchers to repeat and extend our lab experiments.
Conference Paper
Full-text available
In many multi-user software systems, such as online shopping systems, varying workload intensity causes high statistical variance in timing behavior distributions. However, this major impact on timing behavior is often ignored. This paper introduces our approach WITiBA (Workload-Intensity-Sensitive Timing Behavior Analysis) to consider inter-dependencies between concurrent executions of software operations within a distributed system to reduce the standard deviation for succeeding analysis steps. This can be beneficial for analysis methods or simulation methods in terms of tighter confidence intervals, or shorter simulations.
http://www.kieker-monitoring.net. This work is partly funded by the German Federal Ministry of Edu-cation and Research (BMBF) under grant number
  • Kieker
  • Page
Kieker home page. http://www.kieker-monitoring.net. This work is partly funded by the German Federal Ministry of Edu-cation and Research (BMBF) under grant number 01IS10051.
This work is partly funded by the German Federal Ministry of Education and Research (BMBF) under grant number 01IS10051
  • Page Kieker Home
Kieker home page. http://www.kieker-monitoring.net. This work is partly funded by the German Federal Ministry of Education and Research (BMBF) under grant number 01IS10051.