Using Appdynamics With Loadrunner: Exec Summary
Using Appdynamics With Loadrunner: Exec Summary
–– Gaining deep application-level visibility to answer the ‘Why?’ vs. simply determining ‘What?’
–– Improving performance by measuring the end-to-end performance from the end-user perspective
–– Increasing scalability of the application by optimizing software and avoiding unnecessary hardware investments
While some of this discussion centers on LoadRunner specifically, it is important to note that these use-cases may be applied
using any load testing solution and methodology, not just LoadRunner.
–– Application container-level data such as Heap size and usage along with standard and custom JMX metrics
–– Deep database visibility, in the context of the transaction, including details SQL breakdowns
–– Extended visibility into application infrastructure (CPU, Disk, Network, and Memory).
AppDynamics provides these benefits automatically without the need to configure multiple HP tools, such as HP SiteScope, and
then configuring LoadRunner to pull these metrics from HP SiteScope.
1. A minor modification to your VUGen scripts to set the header, using the web_add_header() function.
2. A minor configuration tweak in AppDynamics to detect this new header and name transactions accordingly.
In addition, the AppDynamics integrations team is working on a utility that will help make these changes in the VUGen script
automatically (as of October 2015).
appdynamics.com
LoadRunner script changes
Here is a sample edit to a VUGen script. The highlighted lines are what would be added to an existing script allowing for
AppDynamics to detect the request as a LoadRunner Transaction and name it accordingly. This process inserts a new header into
the requests from LoadRunner and includes the specific LoadRrunner transaction name. We then configure AppDynamics to
detect this special header and use it to automatically name the transactions discovered, avoiding manual configuration:
web_add_header(“AppD_Header”, “TxnA”);
lr_Start_transaction(“TxnA”);
web_submit_req(“”);
lr-end-transaction(“TxnA”, LR_AUTO);
web_add_header(“AppD_Header”, “TxnB”);
lr-Start-transaction(“TxnB”);
Web_URL(“”);
lr-end-transaction(“TxnB”, LR_AUTO);
…….
web_add_header(“AppD_Header”, “TxnZ”);
lr-Start-transaction(“TxnZ”);
Web_custom_request(“”);
lr-end-transaction(“TxnZ”, LR_AUTO);
appdynamics.com 2
AppDynamics configuration for detecting LoadRunner transactions
Here is a sample configuration necessary on the AppDynamics side to allow for the automatic transaction naming:
Select your appropriate application and/or tier from the menu on the left, then add a new
custom match rule.
appdynamics.com 3
Give the rule a name like “LoadRunner”.
On the Transaction Match Criteria tab, we
are going to check for the existence of the
“AppD_Header”, and that it has a value.
Also configure a sanity-check in the rule
that the URI is not empty.
appdynamics.com 4
This rule would only need to be created once per application in the Controller, regardless of how many LoadRunner transactions
or scripts are executed. It applies only to LoadRunner traffic, hence traffic created by actual users or applications would be
unaffected. This traffic would be normally detected and classified by AppDynamics. To summarize, after making the changes,
AppDynamics only looks for the special header named “AppD_Header”. If this header exists, AppDynamics names the
transaction based on the value the header, which is the LoadRunner transaction name. The end-result in AppDynamics will look
similar to the below:
LR.TxnA
LR.TxnB
LR.TxnZ
Once again, this configuration applies specifically to LoadRunner generated transactions and not to other traffic (such as activity
generated by QA Users) that is occurring in the system. The net results are easily-sorted and -filterable views that are specific to
the load test.
appdynamics.com 5
Selecting the Manage Custom Time Ranges
option allows for management and
definition of custom time ranges.
appdynamics.com 6
Compare releases
The Compare Releases functionality allows for comparing performance of the application, inclusive of various KPIs, and trending
metrics between any two timeframes. This comparison can be made at the application-level or specific to individual elements.
Use cases include focusing on a single server or individual transaction to allow for performance analysis and tuning. For
performance engineers, being able to quickly compare results between two load tests, and identify deltas leads to rapid root-
cause analysis, saving time and effort in every load testing cycle.
appdynamics.com 7
The All Business Transactions View provides
a data grid with a detailed status of each
individual transaction in the load test.
appdynamics.com 8
Transaction snapshot comparisons allow for
direct comparison of transaction snapshots
related to specific transaction between both
load tests. For reference, a snapshot is a
deep-level capture of a single occurrence of
a transaction that allows one to see code-
level details of that transaction’s execution.
By comparing snapshots, users can identify
differences in code execution paths and
identify slowness down to the individually-
executed methods.
appdynamics.com 9
Database visibility
AppDynamics further extends application visibility from the code-level into the database, providing deep-level visibility in the
SQL execution and detailed database performance metrics. This functionality aids performance engineers by providing a
contexualized-drilldown from the application into the database, acting as a bridge between the application team and the DBAs.
It provides a common viewpoint while showing data in context that is relevant for both parties, and allows users to further
breakdown a SQL request into where the time is being spent from a database perspective.
appdynamics.com 10
Detailed DB performance view, including
wait states.
appdynamics.com 11
Database Time Range Comparison enables
comparison of the performance of the
database across two different time frames
or the performance of two difference
databases, such as Perf and Prod, for a
similar timeframe. This provides a similar
functionality for databases as Compare
Releases does for deep application visibility.
appdynamics.com 12
Scalability and correlation analysis
The Scalability and Correlation Analysis functions enables users to performance X-Y graphing comparisons and stacked graph
comparisons of key information. This is useful when analyzing during a live load test or after a load test has completed to
identify related behavioral patterns, such as inverse or direct relationships, across one or more different measurements, such as
CPU vs Load or Response Time.
appdynamics.com 13
Correlation Analysis functions are similar
to Scalability analysis above, however,
one can select any two measurements for
comparison. All measurements collected
by AppDynamics are available within this
view. Both stacked charts and X-Y graphs
are available. In this example the Errors per
Min vs Volume are plotted, showing a direct
correlation between the increase in Volume
and Error Rate.
appdynamics.com 14
Defining Health Rules (or modifying existing
rules) is a simple, wizard-driven process,
allowing users to create new rules based on
categories of data classification. A single
rule can be created which may be applied
to all transactions in the application, for
example.
appdynamics.com 15
User-configurable baselines
Auto-baselining is a standard core platform feature within AppDynamics. It allows AppDynamics to dynamically learn what’s
‘normal’ for an application over time. Baselines are not just calculated for the overall application, but for each and every metric
collected. This means each transaction, each CPU measurement, along with every single metric collected via the core platform or
extensions are baselined. This frees up time among Operations users, but is less applicable to performance engineering needs.
To facilitate other use-cases, users may configure baseline behaviors to meet the needs of performance engineering use cases
as well. Configuring baselines specific to load tests enables performance engineers to maximize the usefulness of a baseline by
eliminating ‘white space’ from the timeline, e.g. gaps in traffic in the performance environment between load tests. The result is
a baseline calculation that focuses only on data collected during an active load test. As a result, specific load tests may be used
as a standard against which other load tests are compared.
appdynamics.com 16
Custom dashboards
AppDynamics provides powerful, flexible dashboarding which can be used to visualize any data collected by AppDynamics. These
dashboards display data in real time, but can also display historical data along with producing PDF reports. In addition, these
dashboards are exportable, reusable, and leverage custom baselines, health rules, and time ranges. Performance Engineers use
dashboarding for these typical scenarios:
–– Before running a performance test, dashboards for a given application environment provide an at-a-glance view to determine if
the environment is running, healthy, and ready for testing.
–– Dashboards provide detailed visibility and insight into the application during load test.
–– Component-level dashboards may be built and re-used for any number of technologies, for example Apache, WebLogic,
WebSphere, IIS, Databases, and more.
appdynamics.com 17
Detailed infrastructure metrics
AppDynamics automatically collects a large amount of application and infrastructure data including Operating System metrics,
JVM metrics, .NET metrics, PHP metrics, Apache metrics, Node.js metrics, Python metrics, and JMX metrics, simply by enabling
agents. This data is then immediately usable within dashboards, health rules which in turn can be used for alerting or custom
actions, comparisons and other analytics without need for additional configuration. This eliminates the extra configuration steps
in HP LoadRunner, HP Performance Center and/or HP SiteScope which are necessary when trying to collect additional metrics.
appdynamics.com 18
The metric browser enables users to access
metric data collected and quickly/chart
graph the data for ad-hoc analysis.
–– AppDynamics can easily be configured to show LoadRunner transactions in the way that LoadRunner users see them today.
–– Flexible dashboards are not only reusable but enable historical and real-time analysis. This benefits users with a high degree of
visibility while reducing configuration effort, saving time and manpower.
–– Automatic baselining allows rapid comparative-analysis against a specific ‘master’ performance profile. This results in
more realistic loadtesting analysis and higher-quality results by measuring against actuals vs. ‘guesstimates’ for expected
performance.
–– Built-in comparison functionality between two different load tests facilitates rapid analysis and reduced effort to answer
questions including ‘what changed?’ or ‘did performance improve between releases?’
–– Deep Code-level visibility provides performance engineers the ability to quick triage bottlenecks in the application, minimizing
the need for developers during the analysis phase. This keeps developers focused on building new functionality while reducing
the time that performance engineers spend pinpointing problems.
–– Deep Database visibility offers contextualized database performance breakdowns to further reduce root-cause analysis times
and provide details in the same ‘language’ that DBA’s use.
–– Real-time alerting during load tests enables notification of breached SLAs or deviations from expected results. This saves
performance engineers time and allows for more rapid analysis of issues by surfacing errors more quickly.
–– Automatically-configured, out-of-the-box metrics reduce configuration time and deployment effort, as well as ongoing
maintenance.
appdynamics.com Copyright © 2016 AppDynamics, Inc. All rights reserved. The term APPDYNAMICS and any 19
logos of AppDynamics are trademarked or registered trademarks of AppDynamics, Inc.