AppDynamics does business transaction correlation out of the box for many types of interactions, but what if your particular communication protocol is not supported? Find out about the inner workings of AppDynamics transaction correlation and learn techniques to correlate unusual tier-to-tier communication.
3. APPDYNAMICS CONFIDENTIAL AND PROPRIETARY 3
Objectives
Course Labs
Understand AppDynamics
Transaction Correlation
Facilitate discovery of missing
components in flow maps
Determining Entry and Exit Points
Configuring AppDynamics
for custom correlation
Review Transactions and Flow Maps
Finding Entry Points
Research relationship between
Entry & Exit Points
Configure Custom Correlation
4. APPDYNAMICS CONFIDENTIAL AND PROPRIETARY 4
Topic 1 What Is AppDynamics Transaction Correlation?
A.Transaction Correlation Basics
B. Exit Point Issues
C.Entry Point Issues
Topic 2 What Is AppDynamics Custom Correlation?
A. Custom Correlation Basics
B. Exit Point Configuration
C.Entry Point Configuration
AppDynamics Custom Transaction Correlation
Agenda
5. APPDYNAMICS CONFIDENTIAL AND PROPRIETARY 5
• Detected transactions rely on AppServer
Agent decorating requests with GUID
• GUID = Global Unique Identifier
• Same GUID assigned by Agenton each
tier involved in the requestchain
• GUIDs posted to Controller,which
reconciles GUID-labelled events
• Controller derives Business Transaction
flow map from comparing individual
requestchains
Transaction Correlation Basics
• Correlation relies on ability ofAgents
to decorate and read GUIDs
• Automatic correlation breaks down ifGUID
cannotbe set, or cannotbe read
What works and doesn’t work
7. APPDYNAMICS CONFIDENTIAL AND PROPRIETARY 7
At the pointin code where call out to other componenthappens,
Appserver Agenttries to decorate the outbound requestwith the GUID.
This is during what’s called the Exit Point – adding the GUID relies
on Agent being aware ofthe code as an Exit Point.
On any monitored component,the ability to read the GUID embedded
in a requestrelies on Agentability to understand the technology.
Entry Point is AppDynamics term for a pointin the code which
processes an incoming requestthatthe Agentsuccessfully notices.
Setting & Reading The GUID
8. APPDYNAMICS CONFIDENTIAL AND PROPRIETARY 8
AppDynamics Custom Transaction Correlation
Topic 1 What Is AppDynamics Transaction Correlation?
A. Transaction Correlation Basics
B.Exit Point Issues
C.Entry Point Issues
Topic 2 What Is AppDynamics Custom Correlation?
A. Custom Correlation Basics
B. Exit Point Configuration
C.Entry Point Configuration
Agenda
9. APPDYNAMICS CONFIDENTIAL AND PROPRIETARY 9
Exit Point Issues
Tiers missing from Flow Maps
Inability to successfully detect
an Exit Point means GUID is not set.
From AppDynamics perspective,
the Business Transaction does not
continue any further!
Looking at the flow map, this may be
why Tiers appear to be missing!
10. APPDYNAMICS CONFIDENTIAL AND PROPRIETARY 10
AppDynamics Custom Transaction Correlation
Topic 1 What Is AppDynamics Transaction Correlation?
A. Transaction Correlation Basics
B. Exit Point Issues
C.Entry Point Issues
Topic 2 What Is AppDynamics Custom Correlation?
A. Custom Correlation Basics
B. Exit Point Configuration
C.Entry Point Configuration
Agenda
11. APPDYNAMICS CONFIDENTIAL AND PROPRIETARY 11
Entry Point Issues
Tier appears as Back End
Inability to successfully detect an
Entry Point will mean GUID is not read
The Business Transaction will notinclude
this Tier in its flow map (though may show
up in the flow map as a Back End)
12. APPDYNAMICS CONFIDENTIAL AND PROPRIETARY 12
Is Custom Correlation Necessary?
Various factors can also prevent correlation
The absence of the expected Tier on a Transaction Flow
Map could be due to an Agentissue
Rule outAgent as the cause of the issue by checking:
• Agent installed and configured correctly?
• Agent up and running?
• Does the Tier show up in the Flow Map
of other Transactions?
13. Lab 1
APPDYNAMICS CONFIDENTIAL AND PROPRIETARY 13
Review Movieztream & Login.htm Transaction
URL <<your IP address>>/controller
Username admin
Password admin
Scenario
While AppDynamics managed to detectthe
/movieztream_ui/login.htm transaction withoutany
difficulty, it appears not to be aware that when users
log in to Movieztream there is a call made to the
ProfileStore Tier, as this is not showing on the flow
map.
This exercise is designed to familiarize the student
with the application,flow maps and transactions.
14. APPDYNAMICS CONFIDENTIAL AND PROPRIETARY 14
How BTs Are Tracked
AppDynamics successfully automatically correlates transactions
where various technologies are employed
15. APPDYNAMICS CONFIDENTIAL AND PROPRIETARY 15
Correlation In HTTP
Adding Custom Headers to carry
transaction information is safe if
•You don’tuse any well-understood
header names like ‘Accept-Language’
•The content of the header value
is ‘HTTP-safe’
Method | URL | Version Request Line
Header Field-Name Header Value
Header Field-Name Header Value
Headers
•Extensible by definition
•Does not Contain
Application Data
Body Request Body
16. APPDYNAMICS CONFIDENTIAL AND PROPRIETARY 16
Correlation In HTTP
AppDynamics Byte Code Interceptor
on The HTTP transport layer – adds
a safe header which uniquely identifies
this transaction.The controller reconstructs
the flow.
AppDynamics Byte Code Interceptor
on the servlet– reads the header with
the information.
17. APPDYNAMICS CONFIDENTIAL AND PROPRIETARY 17
Correlation In JMS
Adding Custom Message
Properties to carry transaction
information is safe if
•You don’toverwrite any existing
property names and choose
a unique name
•The content of the property
value is valid content
JMSPriority…
Property Name Property Value
Property Name Property Value
Message Properties
•Extensible by definition
Body Message Body
JMSDestination
Headers
•Not Extensible
•Predefined
18. APPDYNAMICS CONFIDENTIAL AND PROPRIETARY 18
Correlation In JMS
AppDynamics Byte Code Interceptor on The JMS
Message sender – adds a safe header which uniquely
identifies this transaction.
AppDynamics Byte Code Interceptor on the Message
Receiver– reads the header with the information.
19. APPDYNAMICS CONFIDENTIAL AND PROPRIETARY 19
AppDynamics Custom Transaction Correlation
Topic 1 What Is AppDynamics Transaction Correlation?
A. Transaction Correlation Basics
B. Exit Point Issues
C.Entry Point Issues
Topic 2 What Is AppDynamics Custom Correlation?
A.Custom Correlation Basics
B. Exit Point Configuration
C.Entry Point Configuration
Agenda
20. Exploring Untracked Functionality
APPDYNAMICS CONFIDENTIAL AND PROPRIETARY 20
1
ConfiguringAppDynamics to reveal unmonitored running code
1. How do we ‘see’
what we can’t ‘see’?
2. Appdynamics Agents
can reveal method calls
being executed which
are outside of any tracked
Business Transactions
3. This provides us with
potential Entry Points
Activated by setting a
specific Agent’s find-
entry-points property
to true
2
3
21. Find Entry Points Output
APPDYNAMICS CONFIDENTIAL AND PROPRIETARY 21
Where to view unmonitored running code that AppDynamics has detected
Activity is recorded in
BusinessTransactions
log file
Retrieve either through
Controller or from logs
directory on server
As the property adds
a small overhead to Agent
performance, recommended
to disable once done with
investigations
[main] 07 Nov 2016 17:10:51,565 INFO - ############################################################
[main] 07 Nov 2016 17:10:51,565 INFO - Logging request stack for Thread main
>>com.ecetera.appdynamics.movieztream.service.util.ProfileServiceThread.<init>(ProfileReceiver.java
[main] 07 Nov 2016 17:10:51,565 INFO - 0. POJO com.ecetera.appdynamics.movieztream.service.util.Pro
com.ecetera.appdynamics.movieztream.service.util.ProfileServiceThread <init>
[main] 07 Nov 2016 17:10:51,565 INFO -END request stack for Thread main [main] 07 Nov 2016 17:10:51,
[main] 07 Nov 2016 17:10:53,837 INFO - ############################################################
>>com.ecetera.appdynamics.movieztream.service.util.ProfileServiceThread.<init>(ProfileReceiver.java
[main] 07 Nov 2016 17:10:53,837 INFO - 0. POJO com.ecetera.appdynamics.movieztream.service.util.Pro
[main] 07 Nov 2016 17:10:53,837 INFO - 1. POJO com.ecetera.appdynamics.movieztream.service.util.Pro
[main] 07 Nov 2016 17:10:53,837 INFO - ############################################################
#################################################################
[main] 07 Nov 2016 17:10:54,102 INFO - Logging request stack for Thread main
>>com.ecetera.appdynamics.movieztream.service.util.ProfileServiceThread.<init>(ProfileReceiver.java
ain] 07 Nov 2016 17:10:54,102 INFO - 0. POJO com.ecetera.appdynamics.movieztream.service.util.Profi
[main] 07 Nov 2016 17:10:54,103 INFO - 1. POJO com.ecetera.appdynamics.movieztream.service.util.Pro
main [main] 07 Nov 2016 17:10:54,103 INFO - ########################################################
#################################################################
[main] 07 Nov 2016 17:10:55,449 INFO - Logging request stack for Thread main
>>com.ecetera.appdynamics.movieztream.service.util.ProfileServiceThread.<init>(ProfileReceiver.java
[main] 07 Nov 2016 17:10:55,449 INFO - 0. POJO com.ecetera.appdynamics.movieztream.service.util.Pro
[main] 07 Nov 2016 17:10:55,449 INFO - 1. POJO com.ecetera.appdynamics.movieztream.service.util.Pro
22. Lab 2
APPDYNAMICS CONFIDENTIAL AND PROPRIETARY 22
Finding Entry Points
Scenario
While AppDynamics managed to detectthe
/movieztream_ui/login.htm transaction without
any difficulty, it appears notto be aware that when
users log in to Movieztream there is a call made
to the ProfileStore Tier, as this is not showing on
the flow map.
This exercise is designed to configure AppDynamics
to discover potential missing flow map components.
23. APPDYNAMICS CONFIDENTIAL AND PROPRIETARY 23
Custom Correlation
Custom Correlation is Agent
level configuration
Achieved by adding specific
definitions to the file custom-
activity-correlation.xml
under Agentconf directory
No source code changes,
totally non-invasive approach
Mistakes in the XML will result
in correlation failure or simply
unexpected results in transaction
Flow Map – check agentlog file
for details
<activities>
<producer>
<!-- This instrumentation element defines a custom exit point. -->
<instrumentation>
<class-name>com.ecetera.appdynamics.movieztream.ui.reporting.ProfileFinder</class-name>
<method-name>sendProfile</method-name>
<match-type>MATCHES_CLASS</match-type>
</instrumentation>
<!-- This identifier element specifies how to name the custom exit point. This is similar to how we name custom exit points from the UI -->
<identifiers>
<identifier name="ProfileFinder">
<data-gatherer-type>INVOKED</data-gatherer-type>
<getter-chain>this</getter-chain>
<user-defined-name>ProfileFinder</user-defined-name>
<transformer-type>USER_DEFINED_NAME</transformer-type>
</identifier>
</identifiers>
<!-- The following correlation element specifies where and how to add the correlation metadata -->
<correlation>
<!-- This instrumentation element specifies how to get hold of the outgoing payload -->
<instrumentation>
<class-name>com.ecetera.appdynamics.movieztream.ui.reporting.ProfileFinder</class-name>
<method-name>sendProfile</method-name>
<match-type>MATCHES_CLASS</match-type>
</instrumentation>
<!-- This payload-pointer specifies where to grab the payload at the instrumentation point defined above -->
<payload-pointer>
<data-gatherer-type>POSITION</data-gatherer-type>
<position>0</position>
<getter-chain>this</getter-chain>
<transformer-type>GETTER_METHODS</transformer-type>
</payload-pointer>
<!-- This payload-operation defines how to add the correlation metadata to the payload -->
<payload-operation>
<access-type>method</access-type>
<access-method>put</access-method>
<param-types>java.lang.Object, java.lang.Object</param-types>
</payload-operation>
</correlation>
</producer>
<consumer identify-transaction="true">
<!-- This is where the correlation metadata is read and continuing transaction is begun -->
<instrumentation>
<class-name>com.ecetera.appdynamics.movieztream.service.util.ProfileServiceThread</class-name>
<method-name>receiveProfile</method-name>
<match-type>MATCHES_CLASS</match-type>
</instrumentation>
<correlation>
<!-- This is how we get the payload bearing our correlation metadata -->
<payload-pointer>
<data-gatherer-type>POSITION</data-gatherer-type>
<position>0</position>
<getter-chain>this</getter-chain>
<transformer-type>GETTER_METHODS</transformer-type>
</payload-pointer>
<!-- This is how we extract correlation metadata from the payload -->
<payload-operation>
<access-type>method</access-type>
<access-method>put</access-method>
<param-types>java.lang.Object</param-types>
</payload-operation>
</correlation>
</consumer>
</activities>
24. Topology of the XML
Root elementis <activities>
multiple <producer>
and <consumer> elements
are allowed
<producer> is the Exit Point
<consumer> is the Entry Point
<correlation> defines
where to get the GUID and how
APPDYNAMICS CONFIDENTIAL AND PROPRIETARY 24
<activities>
<producer>
<correlation>
.......
</correlation>
</producer>
<consumer>
<correlation>
.......
</correlation>
</consumer>
</activities>
25. What Custom Correlation Requires
Exit Point detail
Classpath,method
Exit Point payload details
The code is sending request
to other component.Can we
append the GUID somehow?
Entry Point details
Classpath,method
Entry Point payload details
The code is accepting the
request. Can we extract
the GUID from it?
APPDYNAMICS CONFIDENTIAL AND PROPRIETARY 25
Investigating details for Exit and Entry Points
<activities>
<producer>
<!-- This instrumentation element defines a custom exit point. -->
<instrumentation>
<class-name>com.ecetera.appdynamics.movieztream.ui.reporting.ProfileFinder</class-name>
<method-name>sendProfile</method-name>
<match-type>MATCHES_CLASS</match-type>
</instrumentation>
<!-- This identifier element specifies how to name the custom exit point. This is similar to how we name custom exit points from the UI -->
<identifiers>
<identifier name="ProfileFinder">
<data-gatherer-type>INVOKED</data-gatherer-type>
<getter-chain>this</getter-chain>
<user-defined-name>ProfileFinder</user-defined-name>
<transformer-type>USER_DEFINED_NAME</transformer-type>
</identifier>
</identifiers>
<!-- The following correlation element specifies where and how to add the correlation metadata -->
<correlation>
<!-- This instrumentation element specifies how to get hold of the outgoing payload -->
<instrumentation>
<class-name>com.ecetera.appdynamics.movieztream.ui.reporting.ProfileFinder</class-name>
<method-name>sendProfile</method-name>
<match-type>MATCHES_CLASS</match-type>
</instrumentation>
<!-- This payload-pointer specifies where to grab the payload at the instrumentation point defined above -->
<payload-pointer>
<data-gatherer-type>POSITION</data-gatherer-type>
<position>0</position>
<getter-chain>this</getter-chain>
<transformer-type>GETTER_METHODS</transformer-type>
</payload-pointer>
<!-- This payload-operation defines how to add the correlation metadata to the payload -->
<payload-operation>
<access-type>method</access-type>
<access-method>put</access-method>
<param-types>java.lang.Object, java.lang.Object</param-types>
</payload-operation>
</correlation>
</producer>
<consumer identify-transaction="true">
<!-- This is where the correlation metadata is read and continuing transaction is begun -->
<instrumentation>
<class-name>com.ecetera.appdynamics.movieztream.service.util.ProfileServiceThread</class-name>
<method-name>receiveProfile</method-name>
<match-type>MATCHES_CLASS</match-type>
</instrumentation>
<correlation>
<!-- This is how we get the payload bearing our correlation metadata -->
<payload-pointer>
<data-gatherer-type>POSITION</data-gatherer-type>
<position>0</position>
<getter-chain>this</getter-chain>
<transformer-type>GETTER_METHODS</transformer-type>
</payload-pointer>
<!-- This is how we extract correlation metadata from the payload -->
<payload-operation>
<access-type>method</access-type>
<access-method>put</access-method>
<param-types>java.lang.Object</param-types>
</payload-operation>
</correlation>
</consumer>
</activities>
26. APPDYNAMICS CONFIDENTIAL AND PROPRIETARY 26
1
What Custom Correlation Requires
Assembling the Details
A. At this stage you should try to check the source code.
B. Although in many cases it will be possible to identify
Exit and Entry Points, the payload may not be
so easy, e.g.
C. Payload on Exit Point cannot be modified (technical
limitation)
D. Payload on Exit Point cannot be modified due
to security reasons
E. Payload on Entry Point cannot be read (not in scope)
F. Payload on Entry Point cannot be read
(technical limitation)
G. Without ability to set and get the payload,
Custom Correlation will not work!
A
B
C
D
27. Lab 3
APPDYNAMICS CONFIDENTIAL AND PROPRIETARY 27
Research Entry and Exit Point Details
Scenario
Reviewing source code is frequently the best option
if you want to understand whatthe functionality is
actually doing,in the event that transaction correlation
does not seem to be working automatically.
This exercise is designed to show how and where to
review code for configuring custom correlation entry
and exit points.
30. APPDYNAMICS CONFIDENTIAL AND PROPRIETARY 30
<activities>
<producer>
<consumer>
<identifiers>
<correlation>
<validator-config>
<naming-config>
<excludes>, <includes>
Defining Custom Correlation XML
Key XML Tags overview
31. APPDYNAMICS CONFIDENTIAL AND PROPRIETARY 31
Attributes available to support various
scenarios, e.g.
• Prioritization of multiple Producers
that potentially detect same Exit Point
• If resolution to a Tier is NOT desired
for the defined Exit Point
• Ability to instrument multiple payloads
based on there being
a split at the Exit Point
• Ability to instrument threaded activities
and asynchronous queues
Must define code we want to instrument
based on knowing at least one of the
following
• Class name, interface, superclass,
class annotation
Must define method name, and
parameters of method signature
if method is overloaded
Producer
Instrumentation
<activities>
<producer>
<!--This instrumentation element defines a custom exit point.-->
<instrumentation>
<class-name>
com.ecetera.appdynamics.movieztream.ui.reporting.ProfileFinder
</class-name>
<method-name>sendProfile</method-name>
<match-type>MATCHES_CLASS</match-type>
</instrumentation>
</producer>
</activities>
32. APPDYNAMICS CONFIDENTIAL AND PROPRIETARY 32
Specify identification and
registration of Custom Exit Point
Naming can be user-defined
literal,or derived based on
current object,method return
object, or method parameter
Producer
Identifiers
<activities>
<producer>
<!-- This identifier element specifies how to name the custom exit
point. This is similar to how we name custom exit points from the UI -->
<identifiers>
<identifier name="ProfileFinder">
<data-gatherer-type>INVOKED</data-gatherer-type>
<getter-chain>this</getter-chain>
<user-defined-name>ProfileFinder</user-defined-name>
<transformer-type>USER_DEFINED_NAME</transformer-type>
</identifier>
</identifiers>
</producer>
</activities>
33. APPDYNAMICS CONFIDENTIAL AND PROPRIETARY 33
May be necessary to add GUID
to single payload objector all
objects in a collection (in split
exit scenario)
Can have GUID applied at
a differentmethod from that
of the Exit Point
Specify <payload-pointer>
to indicate precise payload object
we wantto decorate with GUID
Specify <payload-operation>
to declare how to decorate the
payload objectwith GUID
Producer
Correlation
<activities>
<producer>
<!-- The following correlation element specifies where and how to add the correlation
metadata -->
<correlation>
<!-- This instrumentation element specifies how to get hold of the outgoing payload -->
<instrumentation>
<class-
name>com.ecetera.appdynamics.movieztream.ui.reporting.ProfileFinder</class-name>
<method-name>sendProfile</method-name>
<match-type>MATCHES_CLASS</match-type>
</instrumentation>
<!-- This payload-pointer specifies where to grab the payload at the
instrumentation point defined above -->
<payload-pointer>
<data-gatherer-type>POSITION</data-gatherer-type>
<position>0</position>
<getter-chain>this</getter-chain>
<transformer-type>GETTER_METHODS</transformer-type>
</payload-pointer>
<!-- This payload-operation defines how to add the correlation metadata to the payload -->
<payload-operation>
<access-type>method</access-type>
<access-method>put</access-method>
<param-types>java.lang.Object, java.lang.Object</param-types>
</payload-operation>
</correlation>
</producer>
</activities>
34. APPDYNAMICS CONFIDENTIAL AND PROPRIETARY 34
Consumer has attributes to control
scenarios as follows
• Transaction should be instrumentedon
basis of the first iteration of a loop in
the code, terminating whencode hits
next iteration
• Identifiers permit the specification of
more than 1 Custom Exit Point based
on a single particular method of a class
• Demarcation of activity to differentiate
between identification of Entry Point
and separate block of codelater on
where correlation occurs
Must define code we want to
instrument based on knowing
at least one of the following
• Class name, interface, superclass,
class annotation
Must define method name, and
parameters of method signature
if method is overloaded
Consumer
Instrumentation
<activities>
<consumer identify-transaction="true">
<!-- This is where the correlation metadata is read and
continuing transaction is begun -->
<instrumentation>
<class-name>
com.ecetera.appdynamics.movieztream.service.util.ProfileServiceThread</c
lass-name>
<method-name>receiveProfile</method-name>
<match-type>MATCHES_CLASS</match-type>
</instrumentation>
</consumer>
</activities>
35. APPDYNAMICS CONFIDENTIAL AND PROPRIETARY 35
Can read GUID from a
downstream method different
from what specified at Consumer
Instrumentation level
Specify <payload-pointer>
to indicate precise payload object
we wantto read GUID from
Specify <payload-operation>
to declare how to read the GUID
from the payload object
Consumer
Correlation
<activities>
<consumer identify-transaction="true">
<correlation>
<!-- This is how we get the payload bearing our correlation
metadata -->
<payload-pointer>
<data-gatherer-type>POSITION</data-gatherer-type>
<position>0</position>
<getter-chain>this</getter-chain>
<transformer-type>GETTER_METHODS</transformer-type>
</payload-pointer>
<!-- This is how we extract correlation metadata from the
payload -->
<payload-operation>
<access-type>method</access-type>
<access-method>put</access-method>
<param-types>java.lang.Object</param-types>
</payload-operation>
</correlation>
</consumer>
</activities>
36. APPDYNAMICS CONFIDENTIAL AND PROPRIETARY 36
The Naming Config
Applicable when correlating
asynchronous activities,e.g.
Thread/Callable/Runnable
or Queue-based
Provides a means to define
re-usable instrumentation
identification criteria
<activities>
<!-- naming rules config -->
<naming-config>
<naming-rule>
<data-gatherer-config>
<name>FQCN</name>
<data-gatherer-type>INVOKED</data-gatherer-type>
<getter-chain>getClass, getName</getter-chain>
<transformer-type>GETTER_METHODS</transformer-type>
</data-gatherer-config>
</naming-rule>
</naming-config>
</activities>
37. APPDYNAMICS CONFIDENTIAL AND PROPRIETARY 37
The Validator Config
Ability to filter correlation based
on checking for data values
Applicable on Producer
or Consumer
Allows you to perform
custom correlation ONLY
when specific value present,
e.g. Customer Type == GOLD
<activities>
<validator-config>
<validator match
type="STARTSWITH|ENDSWITH|CONTAINS|EQUALS|REGEX|INLIST|NOTEMPTY”
class-match
type="INHERITS_FROM_CLASS|IMPLEMENTS_INTERFACE|MATCHES_CLASS|HAS_CLASS_ANNOTATI
ON" match-pattern="">
<data-match-config>
<data-gatherer-type>
<!-- INVOKED|RETURN|POSITION -->
</data-gatherer-type>
<position>
<!--POSITION NUMBER. Only used in case POSITION data-gatherer-type is chosen-->
</position>
<getter-chain>
<!-- comma separated list of method names EX: getClass, getName -->
</getter-chain>
<transformer-type>
<!-- TO_STRING|SIMPLE_CLASS_NAME|FIELD_NAME|USER_DEFINED_NAME|GETTER_METHODS -
->
</transformer-type>
</data-match-config>
</validator>
</validator-config>
</activities>
38. APPDYNAMICS CONFIDENTIAL AND PROPRIETARY 38
When instrumentation
configuration setup to match
multiple possible classes (e.g.
interface/superclass/annotation
based matching),you can
specifically exclude groups
or individual classes from
being matched.
Include back in any sub-groups
or specific classes which
have been lost through
the exclude rules.
Defines naming rules for
Consumer instrumentation
points to aid in distinguishing
individual processes.
Excludes & Includes
<activities>
<!-- naming rules config -->
<naming-config>
<naming-rule>
<data-gatherer-config>
<name>FQCN</name>
<data-gatherer-type>INVOKED</data-gatherer-type>
<getter-chain>getClass, getName</getter-chain>
<transformer-type>GETTER_METHODS</transformer-type>
</data-gatherer-config>
</naming-rule>
</naming-config>
<excludes filter-type="STARTSWITH" filter
value="java/,javax/,com.sun/,sun/,org/"/>
<!-- exclude weblogic and websphere -->
<excludes filter-type="STARTSWITH" filter-
value="com.bea/,com.weblogic/,weblogic/,com.ibm/"/>
<!-- thread config -->
39. Lab 4
APPDYNAMICS CONFIDENTIAL AND PROPRIETARY 39
Configure Custom Correlation XML
Scenario
Having now researched suitable Exitand Entry Points,
and identified whatwe think can work as the payload
that can carry the GUID, it is now time to configure the
Custom Activity Correlation XML.
40. APPDYNAMICS CONFIDENTIAL AND PROPRIETARY 40
We have outlined the principles oftransaction
correlation and how AppDynamics mostly succeeds
in correlating automatically.
This course has explored why correlation does not
always work and how it may appear in the Flow Map.
You have explored how to research
and set up Custom Activity Correlation for yourself.
Summary
42. University
APPDYNAMICS CONFIDENTIAL AND PROPRIETARY 42
Multiple Track Courses and Certifications @ appdynamics.com/university
Sign Up for Multiple Tracks and Course Dates
for Live Training Sessions
Watch quick task-based tutorials
Take Self-Paced courses to learn at your own pace
Access subscriber only contents
43. Community
APPDYNAMICS CONFIDENTIAL AND PROPRIETARY 43
Connect With Other Users And Experts @ community.appdynamics.com
Exchange information with other
Power Users and AppDynamics experts
Get AppDynamics-supported
and author-supported extensions
44. Tech Webinars
APPDYNAMICS CONFIDENTIAL AND PROPRIETARY 44
Attend for free
Every other Wednesday at10:00am PT
45 Min presentation followed by a Q&A session
View the Tech Webinars Schedule to register for
upcoming webinars and watch pastpresentations.
45. Join The FanClub
APPDYNAMICS CONFIDENTIAL AND PROPRIETARY 45
We love our customers and partners. Let us thank you for your ongoing support.
See new features and roadmaps
Try new products and beta programs
Access custom extensions and training
MeetAppDynamics Executives
Get premium swag and invitations to events
Sign up and claim your benefits
by clicking here to submit the request!
46. Thank You
Please fill out the survey:
https://www.surveymonkey.com/r/AppDynamicsUniversity
Your feedback is very important to us. We use it to help us improve our content
and incorporate new features to keep our courses relevantfor our audience.
Fred Paine
fred.paine@appdynamics.com