This topic describes how transaction correlation works in the Java environment. In principle, it works largely the same for .NET and the other language agents.
Transaction correlation enables AppD...
See more...
This topic describes how transaction correlation works in the Java environment. In principle, it works largely the same for .NET and the other language agents.
Transaction correlation enables AppDynamics to do distributed transaction tracing in modern web applications. Transaction correlation provides the ability to draw the application flow map and depict the flow of business transactions across multiple tiers and to external services.
Transaction correlation maintains the business transaction context across all tiers and threads as the requests are processed. Whatever the transaction does across all these tiers is counted as an activity for that business transaction.
Table of Contents
Transaction Correlation terminology
AppD Maintains the Transaction Context
Typical Cross-JVM calls and Correlation Medium
Correlation for HTTP
Correlation for JMS
Correlation Header
Custom Correlation
Cross Application and Federated Cross-Application Flow
Transaction Correlation terminology
Business Transaction (BT) is fundamentally distributed
Originating tier/segment
Tier 1 in the diagram is where the first significant entry point is discovered, named, and instrumented. This is called the originating tier.
Continuing tier/segment (or downstream tier)
Every other thread spawned either in the same JVM or externally is considered a continuing segment or continuing tier.
In the diagram, tiers 2, 3, and 4, and the JMS /Messaging Bus are continuing/downstream segments. Metrics are reported to the Controller for each segment.
AppD Maintains the Transaction Context
For Remote Calls
(JVM->JVM and CLR->CLR)
AppDynamics agents decorate the protocol headers to add transaction contextual information.
For Async threads
(intra-JVM and intra-CLR)
AppDynamics agents save transaction context against thread hand-offs to be picked up when the async segment starts.
When done the right way, this does not change application behavior. AppDynamics agents only add where there is extensibility, such as found in HTTP headers and JMS properties. Every "transaction segment" reports its own metrics.
Typical Cross-JVM Calls and Correlation Medium
This diagram shows how the context is maintained across tiers for various mediums.
Typical cross-JVM calls
Correlation for HTTP
We add a header for HTTP calls because, by definition, the headers are extensible. The name of AppDynamics' header for propagating correlation information is " singularityheader ".
Adding custom headers to carry transaction information is safe when:
you don't use any well-understood header names like "Accept-Language"
the contents of the header value is "HTTP-safe"
This diagram illustrates the generic structure of an HTTP request. When a client tier makes an HTTP call, the AppDynamics byte code interceptor adds a safe header that uniquely identifies this transaction. The AppDynamics byte code interceptor on the receiving Servlet (for example), reads the header and carries forward the transaction context. The Controller reconstructs the flow based on the information received from each node in the flow.
HTTP Request
Correlation for JMS
We add a message property for JMS calls because by definition, the message properties are extensible. Adding custom message properties to carry transaction information is safe when:
you don't overwrite any existing properties
you choose a unique property name
the value of the property is valid content
This diagram illustrates the generic structure of a JMS call.
JMS call
Correlation Header
The following diagram shows the contents of the AppDynamics correlation header.
Correlation header contents
appId=5*ctrlguid=1520068834*acctguid=1f125f4c-d69d-4bbb-a66b-
bb896f3515d0*nodeid=849*ts=1524772123010*btid=2218*snapenable=true*guid=6ba9c1f8-ab55-4c00-9193-
95fbcd1b6ddd*exitguid=9|1*unresolvedexitid=144*tcop=1:611*cidfrom=57*etypeorder=HTTP*esubtype=HTTP*cidto=66
Custom Correlation
If the underlying framework/API is not supported by out-of-the-box correlation by AppDynamics, then there is a provision to come up with the custom configurations by analyzing the flow of the transaction.
For more details, refer to:
Custom Correlation for Java Applications
Custom Correlation for .NET Applications
Cross Application and Federated Cross Application Flow
Cross application flows show the performance impact between business applications within a Controller account. For environments that require a larger picture of business performance, federated cross application flows allow AppDynamics to correlate business transactions across business applications in different accounts that may be on different Controllers. For details, refer to:
Cross Application Flow
Federated Cross Application Flow
Published on <u+200e>05-06-2015.
Content revised 7/30/18