You can correlate page and Ajax requests with business transactions. In actuality, the correlation is made between browser snapshots (instances of page and Ajax requests) and transaction snapshots (instances of business transactions).

The correlation enables you to map end-user requests with an underlying backend application. Business-transaction correlation is disabled by default.

Benefits of Correlating Business Transactions

By correlating business transactions with browser snapshots, you can identify potential issues with the backend application that are causing bad user experiences. For example, you might find that server errors or a database query is causing a slow user experience.


To correlate business transactions, the following requirements must be met:

App Server Agents Supporting Business Transaction Correlation

To correlate business transactions, your business application must have one of the following app server agents installed:

Avoid Tagging Cookies with the HttpOnly Flag

HttpOnly is a flag that servers can set to prevent Javascript access to cookies. This is often set for session cookies to hide the session identifier as a security measure. The JavaScript Agent, however, needs to be able to read special cookies set by the AppDynamics server-side agent (all prefixed with ADRUM) to collect correlation information. If HttpOnly is set on these cookies, no server-side correlation information can be transmitted. Thus, do not set the HttpOnly flag on any cookies prefixed with ADRUM.

If you want to securely transmit cookies, use HTTPS. The app agent sets the secure flag if the originating base page is loaded over HTTPS. 

Disabling the HttpOnly and HTTPS flags would also disable business-transaction correlation from working for base pages, unless you change the page source code to do footer injection. See Get Complete Timing Data for Correlated Business Transactions.

How It Works

When an end user requests a page from your browser application:

  1. The app agent sends HTTP headers identifying the business transaction and the HTML with the injected JavaScript Agent to the end user's browser.
  2. The app agent aggregates backend metrics and sends the metrics and business transaction identifiers to the Controller. This serves as the content for the transaction snapshot.
  3. The JavaScript Agent sends the browser metrics and business transaction identifiers (from the HTTP header) to the EUM Server. This serves as the content for the browser snapshot.
  4. The Controller fetches the metrics and business transaction identifiers from the EUM server and then uses the business transaction identifiers to correlate the browser snapshot with the transaction snapshots.

Enable Business-Transaction Correlation

You need to configure the Controller to correlate business transactions. The Controller will map the business transactions with the browser snapshots based on the process described above in How It Works.

To enable business transaction correlation:

  1. From the Application Dashboard, click Configuration User Experience App Integration.
  2. In the Business Transaction Correlation tab, toggle Enable

Specify Business Transactions to Include Correlation Headers

You can also specify which business transactions will include or exclude correlation headers. If you do not add request match rules or request exclude rules, correlation headers will be added to all requests.

To add a request rule:

  1. Click + to open the Create HTTP Request Match Rule dialog.
  2. From the Create HTTP Request Match Rule dialog:
    1. Check the Method checkbox and select an HTTP method that you want to match. If you do not select an HTTP method, the rule will be applied to all HTTP requests.
    2. Check the URI checkbox and enter your criteria.
    3. Click Save to save the match rule.
  3. From the Business Transaction Correlation tab, click Save.

View Business Transaction Correlation

The steps below provide one way to navigate from a browser snapshot to a correlated business transaction.

  1. From the Browser App Dashboard, click Browser Snapshots.
  2. Click Filters.
  3. In the Server Side filters, check Server Snapshot Exists. You should now only see browser snapshots that have transaction snapshots as seen below:
  4. Double-click one of the browser snapshots to open the Browser Snapshot Details dialog containing a transaction snapshot.
  5. Click the transaction snapshot or links in the transaction snapshot to view corresponding pages in APM.

Get Complete Timing Data for Correlated Business Transactions

To get the full, real execution time for correlated business transactions, your injection method may need to write the JS_FOOTER variable to your page. Manual injection gives the server-side agent the ability to write data only to the header of the page as it is being constructed by your web application. It is possible that complete business-transaction timing information is not available at the moment that the header data is written. Using the footer allows the server-side agent to write timing data at the footer of the page, by which time a fuller picture of business transaction timing may be available.

You can write the JS_FOOTER data variable into the footer of a web page using the following techniques:

  • If you use automatic injection for the injecting into the head section, you automatically get an injection into the footer as well.
  • If you use manual injection for the head section, for applications built on Java platforms you can use assisted injection to inject into the footer. Or for applications built on Java servlet or ASP.NET platforms, you can use assisted injection using attribute injection.

If you cannot add the JS_FOOTER variable to your page, the timing shown for correlated business transactions may be the average response time for that transaction rather than the real execution time for that specific page.

Business Transaction Correlation HTTP Headers

The JavaScript Agent and business application exchange HTTP headers to correlate business transactions with page and Ajax requests. To ensure the business transactions are correlated, be sure that the HTTP headers are not blocked.

JavaScript HTTP Headers

The JavaScript Agent sends the following HTTP header to the business applications. The HTTP header can be lowercase or uppercase.

HTTP HeaderSupported ValuesDescription
ADRUMisAjax:true, isAjax:falseIndicates whether the request was made with Ajax.

Business Application HTTP Headers

The business application responds with HTTP headers with the following syntax: ADRUM_<number>. For example: ADRUM_0ADRUM_1ADRUM_2. The values assigned to the HTTP headers are string identifiers used for correlation purposes.

The following is an example set of HTTP headers sent by the business application to the JavaScript Agent.

ADRUM_0: g:325e6a4b-72e1-4a57-8da8-3c0ffccsdd
ADRUM_1: n:customer1_3fdf4d56-f805-4a85-bf1a-ass
ADRUM_2: i:2224122
ADRUM_3: e:449
ADRUM_4: d:198

Troubleshoot Business Transaction Correlation

If the Controller is not successfully reporting business transaction correlations, it may be due to a cross domain issue with ADRUM_BT cookies. If you are using the JavaScript Agent hosted from the AppDynamics CDN, and the business transaction correlation cookies are written from your domain, the JavaScript Agent is unable to read the ADRUM_BT cookies. The solution is to add the following CORS control header to your response header: