Not a customer? Click the 'Start a free trial' link to begin a 30-day SaaS trial of our product and to join our community.
Existing Cisco AppDynamics customers should click the 'Sign In' button to authenticate to access the community
on 03-05-2015 09:47 AM - edited on 11-19-2018 11:53 AM by Nina.Wolinsky
Understanding the AppDynamics error detection life cycle can help you to troubleshoot missing errors and related error metrics. Use agent log files to search for evidence of each phase of error detection and reporting.
Errors and exceptions are counted as Application Diagnostic Data metrics (ADDs) internally and they count towards the limits that are in place for ADDs.
The phases in the error detection process are depicted in the following image:
Each step must complete successfully before the next step begins. When you are troubleshooting, verify that each step happened successfully.
Generate and retrieve the agent logs using Debug level. You may need both the agent logs and the REST logs. Be sure to request the logs with logger level=debug.
When you search, it is good to search all files at the same time for the best results. Registration of the higher-level objects such as BTs, backends, and errors will appear in the agent.log files. Metric registration and metric uploads will appear in the REST log.
AppDynamics reports errors that occur during the execution of business transactions and error messages outside the context of a business transaction that are logged by the application server (called application server exceptions)
Typical examples of errors are:
See the Supported Environments and Versions for your app agent to determine if the loggers you use are recognized by default by AppDynamics.
When an error is detected, the agent sends a registration request to the controller and the controller assigns an ID to the error. The ID is used for communication between the agent and controller to identify exactly which objects are being reported and stored in the controller database.
To confirm error registration, get the agent log files and look for the registration request and response entries and find the ID assigned to the error.
Search the log files using the search string Sending ADDs to register. You should see entries similar to this one for the initial error registration request:
[AD Thread Pool-Global0] 07 Aug 2014 16:44:07,255 INFO ErrorProcessor - Sending ADDs to register [ApplicationDiagnosticData{key='org.apache.tomcat.dbcp.dbcp.SQLNestedException:java.sql.SQLException:',
name=SQLNestedException : SQLException,
diagnosticType=ERROR,
configEntities=null, summary='org.apache.tomcat.dbcp.dbcp.SQLNestedException caused by java.sql.SQLException'}]
The string between the brackets [] identifies the type of object (Application Diagnostic Data or ADD), and contains values for key, name, diagnosticType, and summary.
In this case, the diagnosticType=ERROR, and the key=org.apache.tomcat.dbcp.dbcp.SQLNestedException:java.sql.SQLException.
Using that specific error key as a search string, you can find the log entry that contains the ID assigned to this error. In this case the ID is 53 as shown in this log example.
[AD Thread Pool-Global0] 07 Aug 2014 16:44:07,340 INFO ErrorProcessor - Error Objects registered with controller :{org.apache.tomcat.dbcp.dbcp.SQLNestedException:java.sql.SQLException:=53}
Alternately, you can use the more general search string "Error Objects registered with controller" to find all the error objects that were registered during the duration of your logging session. The search results below show multiple errors and their IDs highlighted with a red outline.
If you do not see successful registration request and response, look in the Controller Logs for exceptions related to error registration.
After successful error registration, the agent keeps an error map in memory with the ID, type, and name for each error. The next time the error is detected, the agent is ready to report metrics. A similar process of request and response between the agent and controller enables the controller to assign each metric an ID.
The errors per minute metrics are reported at the following levels of aggregation:
Application level - Total counts for the error across the entire application. The log looks similar to:
BTM|Application Diagnostic Data|Error:61|Errors per Minute
Tier level - Total counts for the error across the tier. The log looks similar to:
BTM|Application Summary|Component:1|Errors per Minute BTM|Application Summary|Component:2|Exit Call:HTTP|To:3|Errors per Minute
Business transaction level - Totals by BT and exit calls:
BTM|BTs|BT:101|Component:1|Errors per Minute
BTM|BTs|BT:102|Component:1|Exit Call:JDBC|To:{[UNRESOLVED][4]}|Errors per Minute
Note: In the logs, Component=tier.
Using this search string should give search results similar to the following:
Line 1366: <metric time-rollup-type="AVERAGE" name="BTM|Application Diagnostic Data|Error:61|Errors per Minute" hole-fill-type="RATE_COUNTER" cluster-rollup-type="COLLECTIVE"/>
Line 1392: <metric time-rollup-type="AVERAGE" name="BTM|Application Diagnostic Data|Error:71|Errors per Minute" hole-fill-type="RATE_COUNTER" cluster-rollup-type="COLLECTIVE"/>
Line 1402: <metric time-rollup-type="AVERAGE" name="BTM|Application Diagnostic Data|Error:53|Errors per Minute" hole-fill-type="RATE_COUNTER" cluster-rollup-type="COLLECTIVE"/>
Line 1403: <metric time-rollup-type="AVERAGE" name="BTM|Application Diagnostic Data|Error:70|Errors per Minute" hole-fill-type="RATE_COUNTER" cluster-rollup-type="COLLECTIVE"/>
...
Line 1561: <metric id="2450" name="BTM|Application Diagnostic Data|Error:61|Errors per Minute"/>
Line 1575: <metric id="2539" name="BTM|Application Diagnostic Data|Error:71|Errors per Minute"/>
Line 1515: <metric id="2463" name="BTM|Application Diagnostic Data|Error:53|Errors per Minute"/>
Line 1568: <metric id="2546" name="BTM|Application Diagnostic Data|Error:70|Errors per Minute"/>
Results similar to the following will show metrics for the varying levels of rollup indicated in BOLD:
Line 1394: <metric time-rollup-type="AVERAGE" name="BTM|BTs|BT:131|Component:7|Errors per Minute" hole-fill-type="RATE_COUNTER" cluster-rollup-type="COLLECTIVE"/>
Line 1395: <metric time-rollup-type="AVERAGE" name="BTM|Application Summary|Component:7|Errors per Minute" hole-fill-type="RATE_COUNTER" cluster-rollup-type="COLLECTIVE"/>
Line 1402: <metric time-rollup-type="AVERAGE" name="BTM|Application Diagnostic Data|Error:53|Errors per Minute" hole-fill-type="RATE_COUNTER" cluster-rollup-type="COLLECTIVE"/>
Line 1403: <metric time-rollup-type="AVERAGE" name="BTM|Application Diagnostic Data|Error:70|Errors per Minute" hole-fill-type="RATE_COUNTER" cluster-rollup-type="COLLECTIVE"/>
Line 1442: <metric time-rollup-type="AVERAGE" name="BTM|Application Diagnostic Data|Error:69|Errors per Minute" hole-fill-type="RATE_COUNTER" cluster-rollup-type="COLLECTIVE"/>
Line 1445: <metric time-rollup-type="AVERAGE" name="BTM|Backends|Component:{[UNRESOLVED][13]}|Errors per Minute" hole-fill-type="RATE_COUNTER" cluster-rollup-type="COLLECTIVE"/>
Line 1460: <metric time-rollup-type="AVERAGE" name="BTM|Application Diagnostic Data|Error:76|Errors per Minute" hole-fill-type="RATE_COUNTER" cluster-rollup-type="COLLECTIVE"/>
...
Line 1536: <metric id="2475" name="BTM|Backends|Component:{[UNRESOLVED][13]}|Errors per Minute"/>
Line 1546: <metric id="2342" name="BTM|BTs|BT:131|Component:7|Errors per Minute"/>
Line 1491: <metric id="2512" name="BTM|Application Summary|Component:7|Errors per Minute"/>
Line 1515: <metric id="2463" name="BTM|Application Diagnostic Data|Error:53|Errors per Minute"/>
Line 1531: <metric id="2456" name="BTM|Application Diagnostic Data|Error:69|Errors per Minute"/>
Line 1496: <metric id="2521" name="BTM|Application Diagnostic Data|Error:76|Errors per Minute"/>
Line 1568: <metric id="2546" name="BTM|Application Diagnostic Data|Error:70|Errors per Minute"/>
In the above search results, you can see both the metric registration request and the response containing the metric ID for several errors at the application level.
The entries beginning with "<metric id=" show the ID assigned to each separate error's metrics.
You can see the metric ID assigned at line 1515 to Error:53 is 2463.
If you do not see successful request and response for the metric, look in the Controller Logs for exceptions related to error metric registration.
After successful metric registration, metrics are reported to the controller every minute. Using the metric ID, you can search the REST log for the metric upload.
Use the metric ID that you found when you verified metric registration.
Look for log entries showing error metric reporting uploads. This example shows search results from using the metric ID value of "2463" to search the REST logs:
Line 1515: <metric id="2463" name="BTM|Application Diagnostic Data|Error:53|Errors per Minute"/>
Line 1686: <metric id='2463', value[sum=1, count=1, min=1, max=1, current=1]>
Line 2511: <metric id='2463', value[sum=0, count=1, min=0, max=0, current=0]>
Line 3207: <metric id='2463', value[sum=0, count=1, min=0, max=0, current=0]>
Line 3919: <metric id='2463', value[sum=0, count=1, min=0, max=0, current=0]>
Line 4578: <metric id='2463', value[sum=0, count=1, min=0, max=0, current=0]>
If you do not see successful error metric data uploads, look in the Controller Logs for exceptions related to metric data upload.
Application Diagnostic Data metrics include errors, exceptions, and async threads (and a few other things, such as snapshots).
Error/Thread ADD registration limits counts behave as follows:
Thank you! Your submission has been received!
Thank you! Your submission has been received!
Oops! Something went wrong while submitting the form