AppDynamics Data EXTraction and Enhanced Reporting Extension (DEXTER)

1        Introduction

1.1       Challenges and Purpose

AppDynamics DEXTER (which stands for “Data EXTraction and Enhanced Reporting”) is tool that extracts configuration, metadata and performance data from multiple AppDynamics Controllers and Application sources, indexes the data in novel ways, and provides enhanced reporting for the scenarios that are either difficult or impossible to accomplish using current regular AppDynamics interface.

Here are some challenges that the drove the creation of the tool:

·        Investigation of what is operating and what is detected across multiple Controllers and multiple Applications simultaneously

·        Evaluating what components (Tiers, Nodes, Backends) are reporting and what load they have

·        Inventory of configuration in multiple environments, including BT and Health rules, and agent properties

·        Health Checks for On-Premises Controller – grabbing of data from for later investigation, when Controller is no longer accessible

·        Extraction and preservation of fine-grained Metric, Flow map, Event andSnapshot data for interesting time ranges (load test, outage, regular snapshot) with goal of investigation in the future when Controller has already destroyed that data

·        Discovery and timeline reporting of Snapshots by the types and contents of the Exits (HTTP call and SQL query parameters), Data Collectors as well as entities involved (Tier, Backend, Error, Service Endpoint and Applications)

·        Visualization and correlation of Events, Health Rules Snapshots in the Timeline view

By extracting the data from AppDynamics and storing it locally, the data can be very rapidly interrogated and preserved with full fidelity indefinitely.

1.2       Example Reports

This is just a short description. For full description of reports, see detailed documentation AppDynamics DEXTER Documentation.docx in the download binary archive.

1.2.1       Entity Details Report and Entity Timeline View

“Entity Timeline View” is part of “Entity Details” report that is generated for Application and all of its Tiers, Nodes, Business Transactions, Backends, Service Endpoints and Errors

“Entity Timeline View” provides a single-pane view into many things, including:

·        1-minute granularity Metrics in the 1 hour time frame for each hour in the exported range

·        Filterable list of Events and Health Rule Violations, arranged in the timeline of that hour, with details of the Event

·        Filterable list of Snapshots, broken by Business Transaction and User Experience, arranged in the timeline of that hour, and hotlinked to the specific Snapshot

Here is an example of “Entity Timeline View” for a fairly busy Application through which flow many Business Transactions:

Figure 1 “Entity Timeline View” report for a single Tier

And here is an hourly report of the Backend (Oracle database), filtered to only Slow and Very Slow transactions. Note the higher than usual ART from minutes 00 to 19, corresponding to the higher incidence of Slow, Very Slow and Error “Checkout” and “Checkout – Mobile“ transactions, with some Snapshots happening more than once per minute:

Figure 2 “Entity Timeline View” report for a single Backend, showing only non-Normal events

Here is another example showing slow call to HTTP backend, clearly the one to fault for slow snapshots:

Figure 3 “Entity Timeline View” report for a single Backend, showing

This is only a small part of Entity report. Additional data includes Grid view of Flow Map data, Calls/Response/Errors summaries, list of Events, list of Snapshots, list of Errors and Backends, and Business Data (data collectors) applicable to this entity.

1.2.2       Detected Entities Report and Agent Version Breakdown

If you ever were presented with a large Controller (or several) full of unknown number of Applications, Tiers and Nodes, you will like the detail provided by “Detected Entities” report.

Here is an example report from 2 Controllers containing ~300 applications, showing the types of agents reporting:

Figure 4 “AppAgent Nodes by Type” report for multiple SaaS Controllers

Here is the same report, filtered to JAVA APM nodes only and expanded to show agent versions. This customer has 3.x agents!

Figure 5 “AppAgent Nodes by Type” report for multiple SaaS Controllers, detailed breakdown of Agent Versions

Drilling deeper, we see which nodes need attention:

Figure 6 “AppAgent Nodes by Type” report for multiple SaaS Controllers, detailed breakdown of Agent Versions, filtered to just 3.x agents and expanded to show Application/Tier/Node detail

1.2.3       Shapshots Report and Snapshot Discovery

Have you ever wanted to find a snapshot that calls a specific Tier, Backend or Application?

How about the one that uses specific SQL query?

And how about the one that has a real Call Graph?

Or maybe also a special Data Collectors?

Or how about finding out how many times that special Query was slow in a given time range?

Or discover which classes and methods are called in which Snapshots?

How about all of the above, combined?

If you’ve tried to do any of the above tasks, you know AppDynamics does not have those data discovery features. But AppDynamics DEXTER Snapshots report does!

Here is the summary report on all of the snapshots from multiple Applications in an hour that had a CallGraph, broken out by user Experience.

Figure 7 “Snapshots By Type” report for all Snapshots in multiple Applications

It appears that Checkout transaction has quite a few of Very Slow transactions. A summary report on Segments of Snapshots confirms findings:

Figure 8 “Segments By Type” report for all Segments in multiple Applications, filtered to specific Business Transaction

And here we drill down into JDBC exits and find the culprit causing the slowdowns in 199 Snapshots, with ~8000 ms per query.

Figure 9 “Exits By Type” report for all Exits in multiple Applications, filtered by type and specific Business Transactions

1.2.4       Entity Metrics Report and What Has Been Active

AppDynamics DEXTER can extract metrics for each and every Entity in Applications you point it to, and tell you what kinds of CPM/ART/ERT was there for each.

This makes it similar to the tabular view of Applications, except available for also Tiers, Nodes, Business Transactions, Backends, Service Endpoints, and Errors. The Errors are particularly hard, as the Controller screens are difficult to navigate to get summary information.

This makes it very valuable in times when you want to rapidly assess hundreds of Applications, Tiers and Business Transactions and see which ones need your attention.

Here is one example, showing list of Applications without any activity in the time region that was queried:

Figure 10 “Entity Metrics” report for all Applications without any activity

You can easily get some summary metrics:

Figure 11 “Entity Metrics” report, counting all Applications without any activity

How about finding Tiers without any activity in a busy application? Filter the Tiers list on HasActivity

Figure 12 “Entity Metrics” report for all Tiers without Any Activity

And if you want to know who is really busy, filter on Calls or CPM, and HasActivity=true

Figure 13 “Entity Metrics” report for all Applications with > 100K Calls

This is essentially a copy of this screen in Controller, except you can filter on considerably more columns:

 

Now, if you want this screen without digging through Controller:…

Figure 14 “Backends” view for specific Application, filtered

… this is provided for offline storage in Event Metrics report, and the metrics preserved in 1 minute resolution:

Figure 15 “Entity Metrics” report, “Backends” view for specific Application

1.2.5       Entity Metric Graphs Report and 1-minute Granularity Graphs

Entity Graphs Report provides additional level of minute-level metric detail in graphs for all Entities:

Figure 16 “Entity Metric Graphs” report, “Business Transactions” view for specific Application

1.3       How it Works

As part of the data extraction and reporting job that AppDynamics DEXTER can deal you specify a job file containing:

·        Source(s) of data

·        Desired types of data

·        The time range to process

For source of data, you point at a single Application in single Controller, multiple Applications in single Controller, or multiple Applications in multiple Controllers.

For kinds of data, you specify whether to get minute-level Metrics, Snapshots, Application configuration, Events (Health Rule, Application Crash, and so on), and Flow maps.

For the time range, you specify the area of interest. AppDynamics DEXTER rounds it out to the exact hour boundary.

AppDynamics DEXTER connects to the target Controller(s) and Application(s), extracts the specified data using mixture of REST and RESTUI APIs, stores it locally, and then processes it into intermediate CSV files that can be used as inputs into other systems (Tableau, PowerBI, etc.), as well as and various Excel XLSX report files.

2        How to Install and Run

2.1       System Requirements

AppDynamics DEXTER is a console application written in .NET utilizing Full or Core framework. It runs on Windows, Mac and Linux.

You will need:

·        Windows, Mac or Linux workstation

·        .NET Framework 4.7.1 or .NET Core 2.0

·        Fast local SSD drive

·        Access to the target Controllers

·        Controller(s) must be running 4.2, 4.3 or 4.4

If you run this tool in a VM, give it more than one CPU because it benefits from parallelization of its activities.

2.2       Where to Get the Binaries

Download the binaries from this page.

OR

Releases are also available in the public GitHub repository https://github.com/Appdynamics/AppDynamics.DEXTER

Extract the archive to the local folder. For example, C:\AppDynamics\DEXTER.

2.3       Specifying What to Do in Job File

AppDynamics DEXTER job input file is a JSON in following format:

{

   "Input":

    {

       "TimeRange":

        {

           "From":"2017-10-01T18:00:00",

           "To":"2017-10-02T19:00:00"

        },

       "Flowmaps":false,

       "Metrics":false,

       "Snapshots":false,

       "Events":false,

       "Configuration":false

    },

   "Output":

    {

       "DetectedEntities":true,

       "EntityMetrics":false,

       "EntityDetails":false,

       "Snapshots":false,

       "Events":false,

       "Configuration":false

    },

   "Target": [

        {

           "Controller":"https://your.controller.here",

           "UserName":"username@customer1",

           "UserPassword":"yourpassword or leave blank to be prompted",

           "Application":"YourApplication",

           "NameRegex":false

        },

        {

           "Controller":"https://your.other.controller.here",

           "UserName":"username@customer2",

           "UserPassword":"yourpassword or leave blank to be prompted. Or remove this element if you just want to query one controller",

           "Application":".*",

           "NameRegex":true

        }

    ]

}

Copy DefaultJob.json or create the file brand new, edit it in text editor and save it somewhere.

Parameter explanations:

Parameter

Datatype

Purpose

Example Value

Input

Object

Contains what to get

 

  TimeRange

Object

Contains the time range

 

    From

DateTime

Specifies beginning of the time range to retrieve data from.

 

The number is rounded down to the beginning of the hour. For example, if you specify 9:25, it will become 9:00.

 

The value must conform to any standard .NET DateTime string

https://docs.microsoft.com/en-us/dotnet/standard/base-types/standard-date-and-time-format-strings

 

Both local or GMT times are supported

2017-09-19T07:00:00 == September 19, 7:00 AM local time

2017-09-19T14:00:00Z == == September 19, 14:00 PM GMT (same as 7am Pacific)

    To

DateTime

Specifies end of the time range to retrieve data from.

 

Must be greater than From

 

The number is rounded up to the beginning of the next hour. For example, if you specify 9:25, it will become 10:00.

2017-09-19T09:00:00 == September 19, 9:00 AM local time

 

2017-09-19T08:35:00 == September 19, 8:35 AM local time => will be converted to 2017-09-19T09:00:00 local/ 2017-09-19T14:00:00Z GMT

  Flowmaps

Boolean

Specifies whether to retrieve flow maps for Entities (Application, Tier, Node, Business Transaction and Backend)

 

If set to “true”:

·        Extraction time is higher, but not substantially

true

  Metrics

Boolean

Specified whether to retrieve hour summary and hour detail metrics for all Entities, which are used to render

 

If set to “true”:

·        Extraction time is higher, potentially substantial depending on number of entities involved

·        “Entity Metrics” report is generated for all Entities

false

  Snapshots

Boolean

Specifies whether to retrieve snapshots from all Business Transactions

 

If set to “true”:

·        Extraction time is higher, depending on the number of snapshots is large

·        Snapshot extraction can tax the Controller

·        Substantial space will be required on the local disk to store snapshot data

true

  Events

Boolean

Specifies whether to retrieve Events and Health Rule Violations

 

If set to “true”:

·        Extraction time is just a bit higher

true

  Configuration

 

Specifies whether to extract configuration (BT rules, Backend rules, Data Collectors) for each Application.

 

If set to “true”:

·        Extraction time is higher, especially for apps with many configuration entities

true

 

 

 

 

Output

Object

Contains what reports to render

 

  DetectedEntities

Boolean

Specifies whether to render Detected Entities report

true

  EntityMetrics

Boolean

Specifies whether to render Entity Metrics report

true

  EntityDetails

Boolean

Specifies whether to render Entity Details report for Entities that have some metric activity

 

If set to “true”:

·        Report rendering time can be considerably higher

·        “Entity Detail” report is created for each Entity, including:

o  Activity Flow data from Flowmap

o  Metric data in Timeline

o  Snapshot detail and data in Timeline

o  Events detail and data in Timeline

true

  Snapshots

Boolean

Specifies whether to render Snapshots report

 

If set to “true”:

·        Report rendering time can be significant if number of snapshots is large

true

  Events

Boolean

Specifies whether to render Events report

true

  Configuration

Boolean

Specifies whether to render Configuration report

true

 

 

 

 

Target

List of Objects

Contains list of destinations to query

 

  Object

Object

Contains the destination to query

    "Target": [

        {

            "Controller": "http://demo1.appdynamics.com/",

            "UserName": "demouser@customer1",

            "UserPassword": "",

            "Application": "ECommerce",

            "NameRegex": false

        },

        {

            "Controller": "http://demo2.appdynamics.com/",

            "UserName": "demouser@customer1",

            "UserPassword": "",

            "Application": "ECommerce",

            "NameRegex": false

        }

 

Can be repeated multiple times

    Controller

String

URL of the controller

 

    UserName

String

Username of the user to use to connect to Controller in <username>@<tenant> format

 

 

appdexter@customer1 for user named appdexter and for single-tenant on-premises Controller

 

appddexter@saastenant for user named appdexter in SaaS Controller

    UserPassword

String

Password of the user to connect to Controller

 

Leave blank to be prompted for password when extraction begins

 

    Application

String

Application or Applications to query in the Controller

 

If NameRegex is “true”, interpreted as Regular Expression.

If NameRegex is “false”, interpreted as text.

 

The more Applications you specify, the longer it takes to extract data.

MyAwesomeProduction == Matches just that Application

 

ECommerce|Movie.* == Matches ECommerce, ECommerce-Fulfillment and Movie Tickets Online Applications

 

CRMLIVE-NAM-S(G|B)69*|CRMLIVE-NAM-SW == Matches CRMLIVE-NAM-SW, CRMLIVE-NAM-SB690 and CRMLIVE-NAM-SG690 Applications

 

.* == Matches all applications in Controller

    NameRegex

Boolean

Specifies whether Application is interpreted as Regular Expression or not.

True

Figure 17 Job File format

2.4       Time Range Expansion

AppDynamics DEXTER rounds the From time to the beginning of the hour, and End time to the end of the hour.

If you specify start time to be 09:10 and end time to be 10:30, the actual start time will be 09:00 and end time will be 11:00.

Therefore, the minimum time range is always 1 hour.

All operations to the Controller Entity Metric, Entity Flow map, Snapshot list, Events and Health Rule Violation operate on the 1 hour ranges.

Following example above, if the start time will be 09:00 and end time will be 11:00, there will be two time ranges – 09:00-10:00 and 10:00-11:00.

2.5       Running Application

2.5.1       Framework Choice

When running on Windows, you can choose to run version built using .NET Framework 4.7.1 or .NET Core Framework 2.0.x.

When running on Mac or Linux, you need to use .NET Core Framework 2.0.x version.

For .NET Framework 4.7.1, use the contents of the net471 folder and run AppDynamics.Dexter.exe:

PS C:\appdynamics\AppDynamics.DEXTER\Release\1.0.0.11\net471> dir

 

    Directory: C:\appdynamics\AppDynamics.DEXTER\Release\1.0.0.11\net471

 

Mode                LastWriteTime         Length Name

----                -------------         ------ ----

-a----        12/4/2017   6:37 PM         825344 AppDynamics.Dexter.exe

-a----        12/4/2017   6:37 PM         237644 AppDynamics.Dexter.pdb

-a----        2/27/2013   9:06 AM          58368 CommandLine.dll

-a----        11/8/2017   1:52 PM         141312 CsvHelper.dll

-a----        11/6/2017   4:16 PM           1175 DefaultJob.json

-a----       11/29/2017   3:48 PM        1419776 EPPlus.dll

-a----        6/18/2017   1:57 PM         653824 Newtonsoft.Json.dll

-a----       11/10/2017   2:39 PM           2779 NLog.config

-a----       10/15/2017   2:58 PM         652800 NLog.dll

-a----        11/5/2016   4:56 AM          22184 System.IO.dll

-a----         9/5/2017   2:54 PM         197984 System.Net.Http.dll

-a----        11/5/2016   4:57 AM          29880 System.Runtime.dll

-a----        9/26/2017   9:12 AM          39872 System.Security.Cryptography.Algorithms.dll

-a----        9/26/2017   9:12 AM          23480 System.Security.Cryptography.Encoding.dll

-a----        9/26/2017   9:12 AM          22816 System.Security.Cryptography.Primitives.dll

-a----        9/26/2017   9:12 AM          38872 System.Security.Cryptography.X509Certificates.dll

 

For .NET Core Framework 2.0, use the contents of the netcoreapp2.0 folder and run “dotnet exec AppDynamics.Dexter.dll” command:

PS C:\appdynamics\AppDynamics.DEXTER\Release\1.0.0.11\netcoreapp2.0> dir

 

 

    Directory: C:\appdynamics\AppDynamics.DEXTER\Release\1.0.0.11\netcoreapp2.0

 

 

Mode                LastWriteTime         Length Name

----                -------------         ------ ----

d-----        12/4/2017   6:38 PM                runtimes

-a----        12/4/2017   6:37 PM          69740 AppDynamics.Dexter.deps.json

-a----        12/4/2017   6:37 PM         825856 AppDynamics.Dexter.dll

-a----        12/4/2017   6:37 PM         237644 AppDynamics.Dexter.pdb

-a----        12/4/2017   6:37 PM            154 AppDynamics.Dexter.runtimeconfig.json

-a----        2/27/2013   9:06 AM          58368 CommandLine.dll

-a----        11/8/2017   1:52 PM         140800 CsvHelper.dll

-a----        11/6/2017   4:16 PM           1175 DefaultJob.json

-a----       11/29/2017   3:48 PM        1418752 EPPlus.dll

-a----        9/26/2017   9:12 AM          19976 Microsoft.Extensions.Configuration.Abstractions.dll

-a----        9/26/2017   9:12 AM          24584 Microsoft.Extensions.Configuration.dll

-a----        9/26/2017   9:12 AM          22024 Microsoft.Extensions.Configuration.FileExtensions.dll

-a----        9/26/2017   9:12 AM          23560 Microsoft.Extensions.Configuration.Json.dll

-a----        9/26/2017   9:12 AM          17416 Microsoft.Extensions.FileProviders.Abstractions.dll

-a----        9/26/2017   9:12 AM          31240 Microsoft.Extensions.FileProviders.Physical.dll

-a----        9/26/2017   9:12 AM          39432 Microsoft.Extensions.FileSystemGlobbing.dll

-a----        9/26/2017   9:12 AM          33288 Microsoft.Extensions.Primitives.dll

-a----        6/18/2017   1:57 PM         639488 Newtonsoft.Json.dll

-a----       11/10/2017   2:39 PM           2779 NLog.config

-a----       10/15/2017   2:58 PM         607744 NLog.dll

-a----       11/14/2017   3:14 PM         145752 System.Drawing.Common.dll

-a----        7/19/2017  10:01 AM          32504 System.Net.Http.WinHttpHandler.dll

-a----        9/26/2017   9:12 AM          21944 System.Runtime.CompilerServices.Unsafe.dll

-a----        7/19/2017  10:01 AM          35080 System.Security.Cryptography.Pkcs.dll

-a----        7/25/2017   1:59 PM          22920 System.ServiceModel.Duplex.dll

-a----        7/25/2017   1:59 PM          23432 System.ServiceModel.NetTcp.dll

-a----        7/25/2017   1:59 PM          28568 System.ServiceModel.Primitives.dll

-a----        7/25/2017   1:59 PM          23280 System.ServiceModel.Security.dll

-a----        9/26/2017   9:12 AM         759544 System.Text.Encoding.CodePages.dll

-a----        11/5/2016   4:57 AM         118680 System.Xml.XPath.XmlDocument.dll

2.5.2       Install DotNetCore Framework

If you intend to run this tool on Mac, install framework from https://www.microsoft.com/net/download/macos. Use the Installer (.pkg) link for 2.0.x framework.

If you intend to run this tool in Linux, choose your distribution from https://www.microsoft.com/net/download/linux and download 2.0.x framework.

2.5.3       Parameters

AppDynamics DEXTER is controlled via command-line parameters.

Parameter

Datatype

Purpose

Example Value

-j

--jobfile

String

Path

Specifies job file to process

Mandatory

Can be relative or absolute

-j .\JobFiles\demo1ECommerce.json

Specifies that demo1ECommerce.json job file should be loaded from JobFiles subdirectory relative to the current directory

 

-j "C:\appdynamics\AppDynamics.DEXTER\JobFiles\demo1ECommerce.json"

Specifies absolute path to the job file

-r

--restart

Boolean

Specifies that the job should be restarted from scratch

 

Removes any previously done work from the output directory for the job

 

See later section on resuming jobs mid-flight

 

-o

--outputfolder

String

Path

Specifies where to store intermediate and final report files

Optional

If not specified, “C:\AppD.Dexter.Out” is assumed on Windows and “%HOME%\AppD.Dexter.Out is assumed on Mac and Linux

Recommend you set this to be at the root of the drive to avoid problems with path length

-o c:\out

Specifies that output should be directed to C:\out

 

-o \\some\network\share

Specifies that output should be directed to the network share

 

--output out

Specifies that output should be directed to "out" folder in local directory. Not recommended

 

-s

--sequential

Boolean

Specifies that all data extraction and report generation are to be done by single thread

Optional

If not specified, assumed false and execution will be parallel

 

--help

None

Displays help screen

 

Figure 18 Command-line Parameters for Application

2.5.4       Examples using .NET Full Framework on Windows

Open PowerShell or Command prompt to start the application.

You should specify the output folder as close as possible to the root of the drive, because some of the files AppDynamics DEXTER generates can bump into Windows dreaded 260 path character limit.

Example commands:

.\AppDynamics.Dexter.exe -j .\DefaultJob.json

Processes DefaultJob.json in current folder and creates output in C:\AppD.Dexter.Out\DefaultJob

.\AppDynamics.Dexter.exe -j .\DefaultJob.json -o c:\out

Processes DefaultJob.json in current folder and creates output in C:\out\DefaultJob

.\AppDynamics.Dexter.exe -j .\DefaultJob.json -o c:\out -r

Processes DefaultJob.json in current folder and creates output in C:\out\DefaultJob. If C:\out\DefaultJob already exists, removes it first.

.\AppDynamics.Dexter.exe --jobfile "C:\appdynamics\AppDynamics.DEXTER\Release\DefaultJob.json" --outputfolder c:\out -sequential

Processes C:\appdynamics\AppDynamics.DEXTER\Release\DefaultJob.json and stores results in C:\out\DefaultJob

.\AppDynamics.Dexter.exe --jobfile "C:\appdynamics\AppDynamics.DEXTER\Release\DefaultJob.json" -o out -sequential

Processes C:\appdynamics\AppDynamics.DEXTER\Release\DefaultJob.json and stores results in out\DefaultJob in the local working folder

2.5.5       Examples .NET Core Framework on Windows, Mac or Linux

dotnet exec AppDynamics.Dexter.dll -j .\DefaultJob.json

Processes DefaultJob.json in current folder and creates output in C:\AppD.Dexter.Out\DefaultJob

dotnet exec AppDynamics.Dexter.dll -j .\DefaultJob.json -o /home/out

Processes DefaultJob.json in current folder and creates output in “home/out folder”

dotnet exec AppDynamics.Dexter.dll -j .\DefaultJob.json -o /home/out -r

Processes DefaultJob.json in current folder and creates output in /home/out/DefaultJob. If /home/out/DefaultJob already exists, removes it first.

dotnet exec AppDynamics.Dexter.dll --jobfile "/home/appdynamics/AppDynamics.DEXTER/Release/DefaultJob.json" --outputfolder /home/out -sequential

Processes /home/appdynamics/AppDynamics.DEXTER/Release/DefaultJob.json and stores results in /home/out/DefaultJob

dotnet exec AppDynamics.Dexter.dll --jobfile "/home/appdynamics/AppDynamics.DEXTER/Release/DefaultJob.json" -o out -sequential

Processes /home/appdynamics/AppDynamics.DEXTER/Release/DefaultJob.json and stores results in out/DefaultJob in the local working folder

2.5.6       Example Output

The console application progress looks like that:

Figure 19 Output from application. Exciting isn’t it!

2.6       Phases and Job Steps

AppDynamics DEXTER has 4 phases:

·        Input Validation phase, where job file is validated, list of Applications filtered, and time ranges expanded

·        Extraction phase, where data is retrieved from Controller(s) and Application(s)

·        Indexing phase, where data is converted into intermediate format (mostly CSV files)

·        Reporting phase, where reports are generated

The phases run sequentially. The phases are broken out into multiple steps, also ran in certain sequence. Some steps run multiple threads in parallel to speed things up.

Here are the phases and steps and their descriptions:

Phase

Step

Description

Input Validation

Expand file

Validate job file for validity

Prompt for Controller credentials

Connect to Controller(s) and retrieves list of Applications

Choose Applications from the list based on what is asked for in Job File

Saves results in an expanded copy of job file in output folder called jobparameters.json

 

REST API used:

controller/rest/applications

 

 

 

Extract

ExtractControllerApplicationsAndEntities (1)

Extracts list of Applications in each Controller and Entities in each Application

 

Runs always

 

REST API used:

controller/rest/applications

controller/rest/applications/{0}

controller/rest/applications/{0}/tiers

controller/rest/applications/{0}/nodes

controller/rest/applications/{0}/business-transactions

controller/rest/applications/{0}/backends

controller/rest/applications/{0}/metric-data

 

RESTUI API used:

controller/auth?action=login

controller/restui/backendUiService/backendListViewData/{0}/false

controller/restui/serviceEndpoint/list2/{0}/{0}/APPLICATION

controller/restui/informationPointUiService/getAllInfoPointsListViewData

 

ExtractControllerAndApplicationConfiguration (2)

Extracts Controller settings, and configuration of each Application in each Controller

 

Runs only if Input\Configuration=true

 

REST API used:

controller/rest/configuration

controller/ConfigObjectImportExportServlet?applicationId={0}

 

ExtractApplicationAndEntityMetrics (3)

Extracts metrics for each Entity in each of the time ranges, with rollup true and false for each of the time ranges

 

Runs only if Input\Metrics=true

 

REST API used:

controller/rest/applications/{0}/metric-data

 

ExtractApplicationAndEntityFlowmaps (4)

Extracts Flowmaps for each Entity in each of the time ranges

 

Runs only if Input\Flowmaps=true

 

RESTUI API used:

controller/restui/applicationFlowMapUiService/application/{0}

controller/restui/componentFlowMapUiService/component/{0}

controller/restui/nodeFlowMapUiService/node/{0}

controller/restui/btFlowMapUiService/businessTransaction/{0}

controller/restui/backendFlowMapUiService/backend/{0}

 

ExtractEventsAndHealthRuleViolations (5)

Extracts all Events and Health Rule Violations in each Application in each of the time ranges

 

Runs only if Input\Events=true

 

These subsets of events are supported:

// Events UI: Application Changes

// App Server Restart

{ "APP_SERVER_RESTART" },

// Thrown when application parameters change, like JVM options, etc

{ "APPLICATION_CONFIG_CHANGE" },

// This is injected by user / REST API.

{ "APPLICATION_DEPLOYMENT" },

 

// Events UI: Code problems

// Code deadlock detected by Agent

{ "DEADLOCK" },

// This is thrown when any resource pool size is reached, thread pool, connection pool etc. fall into this category

{ "RESOURCE_POOL_LIMIT" },

          

// Events UI: Custom

// Custom Events thrown by API calls using REST or machine agent API

{ "CUSTOM" },

 

// Events UI: Server Crashes

{ "APPLICATION_CRASH" },

// CLR Crash

{ "CLR_CRASH" },           

 

// Events UI: Health Rule Violations

// Health rules

{ "POLICY_OPEN_WARNING" },

{ "POLICY_OPEN_CRITICAL" },

{ "POLICY_CLOSE_WARNING" },

{ "POLICY_CLOSE_CRITICAL" },

{ "POLICY_UPGRADED" },

{ "POLICY_DOWNGRADED" },

{ "POLICY_CANCELED_WARNING" },

{ "POLICY_CANCELED_CRITICAL" },

{ "POLICY_CONTINUES_CRITICAL" },

{ "POLICY_CONTINUES_WARNING" },

 

// Events UI: Error

// This is thrown when the agent detects and error NOT during a BT (no BT id on thread)

{ "APPLICATION_ERROR" },

 

// Events UI: Not possible - this is just a query here

// Diagnostic session.  There are several subTypes for this.

{ "DIAGNOSTIC_SESSION" },

 

// Bad events not visible in the UI

{ "AGENT_ADD_BLACKLIST_REG_LIMIT_REACHED" },

{ "AGENT_ASYNC_ADD_REG_LIMIT_REACHED" },

{ "AGENT_ERROR_ADD_REG_LIMIT_REACHED" },

{ "AGENT_METRIC_BLACKLIST_REG_LIMIT_REACHED" },

{ "AGENT_METRIC_REG_LIMIT_REACHED" },

{ "CONTROLLER_ASYNC_ADD_REG_LIMIT_REACHED" },

{ "CONTROLLER_ERROR_ADD_REG_LIMIT_REACHED" },

{ "CONTROLLER_EVENT_UPLOAD_LIMIT_REACHED" },

{ "CONTROLLER_METRIC_REG_LIMIT_REACHED" },

{ "CONTROLLER_RSD_UPLOAD_LIMIT_REACHED" },

{ "CONTROLLER_STACKTRACE_ADD_REG_LIMIT_REACHED" },

 

// Others

{ "CONTROLLER_AGENT_VERSION_INCOMPATIBILITY" },

{ "LICENSE" }

 

REST API used:

controller/rest/applications/{0}/problems/healthrule-violations

controller/rest/applications/{0}/events

 

ExtractSnapshots (6)

Extracts all snapshots in each Application in each of the time ranges

 

Runs only if Input\Snapshot=true

 

RESTUI API used:

controller/restui/snapshot/snapshotListDataWithFilterHandle (list of snapshots)

controller/restui/snapshot/getFilteredRSDListData (list of segments)

controller/restui/snapshot/getRequestSegmentById (segment detail)

controller/restui/snapshot/getErrorsForRsd (segment error detail

controller/restui/snapshot/getCallGraphRoot (segment call graph)

controller/restui/snapshotFlowmap/distributedSnapshotFlow (snapshot flowmap)

 

 

 

 

 

 

Index

IndexControllersApplicationsAndEntities (11)

Converts lists of Entities into intermediate format

 

Runs always

 

IndexControllerAndApplicationConfiguration (12)

Converts Controller and Application configuration into intermediate format

 

Runs only if Input\Configuration=true

 

IndexApplicationAndEntityMetrics (13)

Converts Metric data for all Entities into intermediate format

 

Runs only if Input\Metrics=true

 

IndexApplicationAndEntityFlowmaps (14)

Converts flowmap data for all Entities into intermediate format

 

Runs only if Input\Flowmaps=true

 

IndexEventsAndHealthRuleViolations (15)

Converts Event data for all Entities into intermediate format

 

Runs only if Input\Events=true

 

IndexSnapshots (16)

Converts Snapshot data (Segments, Exits, Backends, Business Data Collectors, Errors, Service Endpoints) for all Snapshots into intermediate format

 

Runs only if Input\Snapshot=true

 

 

 

 

 

 

Report

ReportControlerApplicationsAndEntities (21)

Creates “Detected Entities” report for all Entities in each Application

 

Runs always

 

Report is saved as:

Reports\DetectedEntities.<jobfile>.{start:yyyyMMddHH}-{end:yyyyMMddHH}.xlsx

 

ReportControllerAndApplicationConfiguration (22)

Creates “Detected Configuration” report for all Applications

 

Runs only if Input\Configuration=true

 

Report is saves as:

Report\Configuration. <Job File Name>.{start:yyyyMMddHH}-{end:yyyyMMddHH}.xlsx

 

ReportApplicationAndEntityMetrics (23)

Creates “Entity Metrics” report with Calls Per Minute/Average Response Time/Errors Per Minute information for all time range and hourly breakdowns for all Entities in each Application

 

Runs only if Input\Metrics=true

 

Report is saved as:

Reports\EntityMetrics.<jobfile>.{start:yyyyMMddHH}-{end:yyyyMMddHH}. xlsx

 

ReportApplicationAndEntityMetricGraphs (24)

Created “Entity Metric Graphs” Report with Calls Per Minute/Average Response Time/Errors Per Minute information for all time range and hourly breakdowns for all Entities in each Application, including metric detail and visual graphs

 

Runs only if Input\Metrics=true

 

Report is saved as:

Report\<Controller>\<Application>\EntityMetricGraphs. <ControllerName>.<ApplicationName>.<EntityName>.{start:yyyyMMddHH}-{end:yyyyMMddHH}.xlsx

 

ReportEventsAndHealthRuleViolations (25)

Creates “Detected Events” report for all Applications

 

Runs only if Input\Events=true

 

Report is saved as:

Reports\Events.<jobfile>.{start:yyyyMMddHH}-{end:yyyyMMddHH}.xlsx

 

ReportSnapshots (26)

Creates report for all Snapshots

Creates individual reports for each Snapshot

 

Runs only if Input\Snapshot=true

 

Report is saved as:

Reports\Snapshots.<jobfile>.{start:yyyyMMddHH}-{end:yyyyMMddHH}. xlsx

 

ReportIndividualApplicationAndEntityDetails (27)

Creates “Entity Details” Report for each Entity in each Application

 

Runs if any of these are true:

Input\Flowmaps=true

Input\Metrics=true

Input\Snapshots=true

Input\Events=true

 

Report is saved in

Report\<Controller>\<Application>\<APP|TIER|NODE|BT|BACK|ERR|SEP>\ <ControllerName>.<ApplicationName>.<EntityName>.{start:yyyyMMddHH}-{end:yyyyMMddHH}xlsx

 

 

 

End

Done (30)

This is the final status if no errors occur

 

Error (100)

This is the final status if errors occur

Figure 20 Execution Phases and Steps Description

2.7       Parallelization and Sequential Execution

AppDynamics DEXTER parallelizes some steps to reduce time it takes to produce data. If it was started without -s or --sequential flag:

Phase

Step

Description

Input Validation

Expand file

Sequential

 

 

 

Extract

ExtractControllerApplicationsAndEntities (1)

Sequential

 

ExtractControllerAndApplicationConfiguration (2)

Sequential

 

ExtractApplicationAndEntityMetrics (3)

Sequential or Parallel

1 metric per thread

1, 3 or 5 threads, depending on number of metrics for each entity

 

ExtractApplicationAndEntityFlowmaps (4)

Sequential or Parallel

20 entities per thread

5 threads

 

ExtractEventsAndHealthRuleViolations (5)

Sequential for Health Rule Violations

 

Sequential or Parallel for Events

5 threads

 

ExtractSnapshots (6)

Sequential or Parallel

50 entities per thread

5 threads

 

 

 

Index

IndexControllersApplicationsAndEntities (11)

Sequential

 

IndexControllerAndApplicationConfiguration (12)

Sequential

 

IndexApplicationAndEntityMetrics (13)

Parallel

7 threads, 1 thread per entity type

 

IndexApplicationAndEntityFlowmaps (14)

Sequential

 

IndexEventsAndHealthRuleViolations (15)

Sequential

 

IndexSnapshots (16)

Sequential or Parallel

100 entities per thread

Thread number managed by the Parallel.For TaskScheduler/ThreadPool, optimized for your system configuration

 

 

 

Report

ReportControlerApplicationsAndEntities (21)

Sequential

 

ReportControllerAndApplicationConfiguration (22)

Sequential

 

ReportApplicationAndEntityMetrics (23)

Sequential

 

ReportEventsAndHealthRuleViolations (24)

Sequential

 

ReportSnapshots (25)

Sequential

 

ReportIndividualApplicationAndEntityDetails (26)

Sequential or Parallel

10 entities per thread

Thread number managed by the Parallel.For TaskScheduler/ThreadPool, optimized for your system configuration

 

 

 

End

Done (30)

 

 

Error (100)

 

Figure 21 Parallelization parameters used by each execution phase and steps

2.8       Duration of Steps

2.8.1       Duration of Extract Phase

AppDynamics DEXTER always expands the time range to at least 1 hour.

The timing report is output to Reports folder as StepTimings.csv.

The duration of the Extract phase depends on:

·        The number of Applications to query

o  More Applications => More work to retrieve anything

·        The complexity of Applications being queried

o  More Tiers, Business Transactions, Configuration rules and so on => More time to retrieve Metrics and Flowmaps

·        The busy-ness of Applications being queried

o  More Snapshots => More time to retrieve Snapshots

o  More Events => More time to retrieve Events

·        Whether sequential or parallel mode is chosen

o  Sequential => Longer

·        Ability of Controller to respond to queries in timely interval, especially for Snapshot retrieval

o  Slower Controller => Longer

·        Your network connection

o  Slower => Longer

Phase

Duration

ExtractControllerApplicationsAndEntities (1)

1-4 seconds per Application

ExtractControllerAndApplicationConfiguration (2)

10-40 seconds per Application

ExtractApplicationAndEntityMetrics (3)

3-4 seconds per Entity Type (Tier, Node, Backend, etc.)

ExtractApplicationAndEntityFlowmaps (4)

1-2 minutes for each 200 Entities per Application

Or

~100 ms per entity (Tier, Node, Backend, etc.)

ExtractEventsAndHealthRuleViolations (5)

10-30 seconds for each Application

ExtractSnapshots (6)

2-5 seconds per Snapshot, depending on Snapshot size

Figure 22 Duration of Extract Phase for each setting

2.8.2       Duration of Index Phase

During Index phase, large number of small JSON files are read, converted in memory and stored as small CSV files.

The duration of Index phase is defined number of CPUs and CPU speed and speed of local IO system. Local SSD is highly recommended. More CPUs => More work done.

Setting

Duration

IndexControllersApplicationsAndEntities (11)

0.5-1 seconds per Application

IndexControllerAndApplicationConfiguration (12)

Not timed yet

IndexApplicationAndEntityMetrics (13)

20-30 seconds for each 200 Entities per Application

Or

~60 ms per entity (Tier, Node, Backend, etc.)

IndexApplicationAndEntityFlowmaps (14)

5-10 seconds for each 200 Entities per Application

Or

~100 ms per entity (Tier, Node, Backend, etc.

IndexEventsAndHealthRuleViolations (15)

1-2 seconds for each Application

IndexSnapshots (16)

~100 ms per Snapshot

Figure 23 Duration of Index Phase for each setting

2.8.3       Duration of Report Phase

During Report phase, large number of small CSV files are assembled into increasingly larger sized in-memory structures, and written out to Excel files, some fairly large.           

The duration of Report Phase depends on size of memory and speed of CPU. It takes a bit of CPU and memory to create some of the more complex CSVs and XLSX files.

Setting

Duration

Input\* = false

1-2 seconds per Application

Input\Configuration=true

4-5 seconds per Application

Input\Metrics=true

30-40 seconds for each 200 Entities per Application

Input\Flowmaps=true

5-10 seconds for each 200 Entities per Application

Input\Events=true

10-15 seconds for each Application

Input\Snapshots=true

~1-2 seconds per Snapshot

 

 

ReportControlerApplicationsAndEntities (21)

1-2 seconds per Application

ReportControllerAndApplicationConfiguration (22)

1-2 seconds per Application

ReportApplicationAndEntityMetrics (23)

50 ms per Entity

ReportApplicationAndEntityMetricGraphs (24)

15-20 seconds per Application

ReportEventsAndHealthRuleViolations (25)

~1 seconds per Application

ReportSnapshots (26)

10-20 ms per Entity

ReportIndividualApplicationAndEntityDetails (27)

2-3 seconds per Entity

Figure 24 Duration of Report Phase for each setting

2.9       Local File Usage

AppDynamics DEXTER stores data locally as JSON and CSV files.

The size of local file space used depends on:

·        The number of Applications to query

o  More Applications => More data to store

·        The complexity of Applications being queried

o  More Tiers, Business Transactions and so on => more Metrics to store

·        The busy-ness of Applications being queried

o  More Snapshots => More space to store Snapshots

An extract of ~8K snapshots with metrics for couple of hours will produce ~600MB of intermediate data and ~200MB of final report files (CSV and XLSX).

Extracts of 50K snapshots with metrics for 1 hour can consume 12-15GB of intermediate space with final indexed report taking about ~400MB of file space.

2.10   Resuming Interrupted Job Mid-Flight

If you stopped the job mid-flight or it crashed, you can restart the job using the same command.

Job restart is done the following way. Application checks whether job folder for the job file already exits. If it does, and contains jobparameters.json, the job is resumed. Instead of input job file that was specified, the previously created jobparameters.json is loaded.

Previously created jobparameters.json has a Status property. The value of Status is a number that corresponds to the step in Extract and Report Job Steps.

It can be adjusted by hand, setting it by either number or even string value.

2.11   Logging Activity

Application generates bunch of logs in the \logs subfolder relative to where AppDynamics.DEXTER.exe is located.

There are 3 log files:

Log file

Purpose

AppDynamics.Dexter.Console.YYYY-MM-DD.log

Logs what is output to Console window

AppDynamics.Dexter.Controller.YYYY-MM-DD.log

Logs duration and detail of all HTTP calls to the Controller

AppDynamics.Dexter.Main.YYYY-MM-DD.log

Logs main application activity

Figure 25 Log files for application

Log configuration is in NLog format managed by NLog.config.

Logs will roll over every day and after 50MB of size.

2.12   Stress Testing Controller

Because AppDynamics DEXTER uses RESTUI API for extraction (for example, Entity Flowmaps and Snapshots), and those are the same API used by AppDynamics UI, it can be used to drive synthetic load against controller, especially when ran in default parallel mode.

It is not currently possible to adjust number of parallel threads used in each of the steps. Those has been arrived by experimentation and are designed to emulate moderate, but not excessive load from the users.

2.13   Running Multiple Instances at the Same Time

If running multiple instances of application at the same time, the logs will become items of contention. If you want to do it, make copies of main executable in separate folders.

3        Available Reports

This section describes reports produced by AppDynamics DEXTER.

3.1       Reports Location

Reports are output to Output\Report folder specified under the folder named after the Job Input file. For example, C:\AppD.Dexter.Out\mycontroller if you specified mycontroller.json as Job Input file.

3.2       Viewing Reports

You will need install of Office locally to open the Excel reports. Many get quite complex.

Google Sheets doesn’t cut it on these spreadsheets. Office Online Excel, however, can render things just fine.

3.3       Detected Entities Report

Detected Entities report is produced when Output.DetectedEntities=True. It uses detected metadata data that is always extracted.

Detected Entities report has the following file format:

Report\DetectedEntities.<Job File Name>.<Start Date and Time>-<End Date and Time>.xlsx

 

For example, demo2Ecommerce.2017091914-2017091916.DetectedEntities.xlsx

The data for the report is in the following files:

"Report\ENT\applications.csv"

"Report\ENT\backends.csv"

"Report\ENT\businesstransactions.csv"

"Report\ENT\controllers.csv"

"Report\ENT\errors.csv"

"Report\ENT\nodes.csv"

"Report\ENT\serviceendpoints.csv"

"Report\ENT\tiers.csv"

 

For detailed description of parts of this report, see documentation file AppDynamics DEXTER Documentation.docx in the binaries archive.

3.4       Entity Metrics Report

Entity Metrics report is produced when Input\Metrics=True and Output.EntityMetrics=True. It combines information about detected Entities with their Metric data to show all entities with activity in the requested time range.

Entity Metrics report has the following file format:

Report\EntityMetrics.<Job File Name>.<Start Date and Time>-<End Date and Time>.xlsx

 

For example, demo2Ecommerce.2017091914-2017091916.EntityMetrics.xlsx

The data for the report is in the following files:

"Report\METR\APP.entities.full.csv"

"Report\METR\APP.entities.hour.csv"

"Report\METR\BACK.entities.full.csv"

"Report\METR\BACK.entities.hour.csv"

"Report\METR\BT.entities.full.csv"

"Report\METR\BT.entities.hour.csv"

"Report\METR\ERR.entities.full.csv"

"Report\METR\ERR.entities.hour.csv"

"Report\METR\NODE.entities.full.csv"

"Report\METR\NODE.entities.hour.csv"

"Report\METR\SEP.entities.full.csv"

"Report\METR\SEP.entities.hour.csv"

"Report\METR\TIER.entities.full.csv"

"Report\METR\TIER.entities.hour.csv"

For detailed description of parts of this report, see documentation file AppDynamics DEXTER Documentation.docx in the binaries archive.

3.5       Events Report

Events report is produced when Input\Events=True and Output.Events=True. It provides information about Events and Health Rule Violations in the requested time range.

Events report has the following file format:

Report\Events.<Job File Name>.<Start Date and Time>-<End Date and Time>.xlsx

 

For example, demo2Ecommerce.2017091914-2017091916.Events.xlsx

The data for the report is in the following files:

"Report\EVT\application.events.csv"

"Report\EVT\events.csv"

"Report\EVT\hrviolationevents.csv"

For detailed description of parts of this report, see documentation file AppDynamics DEXTER Documentation.docx in the binaries archive.

3.6       Snapshots Report

Snapshot report is produced when Input\Snapshots=True and Output.Snapshots=True. It provides information about Snapshots, Segments, Exit Calls, traversed Service Endpoints, Business Data and Call Graphs for all Snapshots.

Snapshots report has the following file format:

Report\Snapshots.<Job File Name>.<Start Date and Time>-<End Date and Time>.xlsx

 

For example, demo2Ecommerce.2017091914-2017091916.Snapshots.xlsx

The data for the report is in the following files:

"Report\SNAP\application.snapshots.csv"

"Report\SNAP\snapshots.businessdata.csv"

"Report\SNAP\snapshots.csv"

"Report\SNAP\snapshots.errors.csv"

"Report\SNAP\snapshots.exits.csv"

"Report\SNAP\snapshots.segments.csv"

"Report\SNAP\snapshots.serviceendpoints.csv"

For detailed description of parts of this report, see documentation file AppDynamics DEXTER Documentation.docx in the binaries archive.

3.7       Configuration Report

Configuration report is produced when Input\Configuration=True and Output.Configuration=True.

Configuration report has the following file format:

Report\Configuration.<Job File Name>.<Start Date and Time>-<End Date and Time>.xlsx

 

For example, demo2Ecommerce.2017091914-2017091916.Configuration.xlsx

For example, demo2Ecommerce.2017091914-2017091916.Snapshots.xlsx

The data for the report is in the following files:

"Report\CFG\agent.properties.csv"

"Report\CFG\application.configuration.csv"

"Report\CFG\backend.rules.csv"

"Report\CFG\btdiscovery.rules.csv"

"Report\CFG\btentry.rules.csv"

"Report\CFG\bts.configuration.csv"

"Report\CFG\callgraphs.configuration.csv"

"Report\CFG\controller.settings.csv"

"Report\CFG\customexit.rules.csv"

"Report\CFG\datacollectors.http.csv"

"Report\CFG\datacollectors.midc.csv"

"Report\CFG\healthrules.csv"

"Report\CFG\infopoints.csv"

"Report\CFG\tiers.configuration.csv"

For detailed description of parts of this report, see documentation file AppDynamics DEXTER Documentation.docx in the binaries archive.

3.8       Entity Detail Report

Entity Detail report is produced when any of the Input\Snapshots|Flowmaps|Metrics|Events=True and Output.EntityDetails=True. It provides summary view into all activity that affected this Entity.

The report is only produced for Entities that had some metric activity (HasActivity=True in EntityMetrics report)

Entity Detail report has the following file format:

Report\<Controller>\<Application>\<APP|TIER|NODE|BT|BACK|ERR|SEP>\<ControllerName>.<ApplicationName>.<EntityName>.<Start Date and Time>-<End Date and Time>.xlsx

 

For example, "C:\AppD.Dexter.Out\demo2ECommerce\Report\demo2.appdynamics.com\ECommerce.41\APP\demo2Ecommerce.2017091914-2017091916.demo2.appdynamics.com.ECommerce.41.xlsx"

For detailed description of parts of this report, see documentation file AppDynamics DEXTER Documentation.docx in the binaries archive.

4        Support

5        Technical Details

5.1       Version History

Version

Release notes

1.0.0.5

First release, x64 debug build

Reports:

·        Detected Entities

·        Entity Metrics

·        Events

·        Snapshots

·        Entity Details

1.0.0.6

Changed User-Agent for access to Controller to send unique agent key

Added Occurred columns to Exit Calls section of Snapshots and Entity Details reports

Changed the Call Chains portion of the Entity Details report popups for Snapshots

Moved the output of reports to Reports\* folder

Improved speed of the Snapshots and Entity Detail reports when processing large numbers of Snapshots

Added check for the empty Backend details during extraction phase

Reorganized some of the pivot tables in Snapshots report

1.0.0.7

Changed Metric Extract step to do bulk-extraction for Entities (Tiers, Nodes, etc.) instead of single, resulting in much reduced time needed to extract data

Changed Metric Index step to accommodate the new improvements

1.0.0.8

All Reports:

-Added Output variable checking to provide fine-grained control of what reports are generated

Configuration Report:

- Implemented all items necessary for Configuration Report, including Controller Settings, BT rules, MIDCs, Health Rules and all other entities

Entity Detail Report:

- Added check for metric activity to prevent Entity Detail report from being generated for non-active entities

Detected Entities Report:

- Added output of renamed BTs for Detected Entities report

Events Report:

- Added Application tab with summaries of events

Snapshots Report:

- Added Application tab with summaries of events

Added license comments as required by legal

Added EPPlus source as required by legal

 

Documented Configuration Report

1.0.0.9

Changed report file naming strategy

Added timing report for each of the phases

Changed order of execution for steps

Added constants for all the colors used in the report

Added a pretty icon to the application

 

Detected Entities report:

Events report:

Snapshots report:

Configuration report:

- Changed indexing process to combine results from individual files into larger intermediate file and output it into Reports

- Changed report to use combined resulting CSV

- Added graph to the pivots by Type

- Increased number of indexing threads from 10 to 15

- Added color formatting rules to the Num*** columns

- Changed freeze panes for Pivots to only freeze rows and not columns

 

Snapshot Report

- Refactored extraction to support <=4.2.3 version of the controller

- Added checks to resume extraction mid-way for snapshots that had errors

- Corrected bug for invalid number of HTTP and MIDC collectors in the snapshot

 

Entity Metrics report:

- Added color formatting rules to the metric columns

- Corrected division by 0 error in check for HasActivity and made sure it considers all columns

 

Configuration Report:

- Removed ID from detected Tier and BT for places where the association is mapped

 

Entity Details report:

- Removed metric graph legend from the graph area

- Added summary values for metrics to each of the hourly ranges

- Added error detail to the snapshot summary tooltip

 

Detected Entities report:

- Added 2 more properties to Backends list, to the total of 7

- Added description property to Application and Tiers, mapping it to the data returned from controller

1.0.0.10

Configuration Report:

- Added support for Config 2.0 elements (Scopes, BT Discovery and BT Entry rules)

- Fixed the number of Health Rules in Application Summary not being correct

 

Entity Details Report:

- Changed file naming pattern

- Minor adjustment to freeze panes on one of the sheets

1.0.0.11

Added ability to run on Mac and Linux using dotnetcore

 

Added explicit reference to the System.Net.Http package

Added logic to set default output folder on Mac and Linux to different value than on Windows

Updated EPPlus with newer build

Changed startup parameters for --output to default to something non-Windows on Mac and Linux

Added version number to each report

Changed all instances of AutoFit columns to be specific width

 

Entity Metric Graphs Report:

- Added new report with graphs for each hour

 

Snapshots Report:

- Added error handling for 4.2.3 report

1.0.0.12

Events Report:

- Parallelized Events extraction to speed things up

- Added more types of events

 

Entity Details Report:

- Parallelized Flowmap index to speed things up

- Removed hardcoded limit on number of threads used to index snapshots, instead relying on defautl ThreadPool settings

 

Detected Entities Report:

- Added support for Information Points

 

Metrics Report:

- Parallelized metrics extraction to speed things up

- Parallelized metric index to speed things up

- Added support for Information Points

 

Metrics Graphs Report:

- Added support for Information Points

 

Snapshots Report

- Reduced number of threads to extract snapshots from 10 to 5 to reduce impact on Controllers

- Removed hardcoded limit on number of threads used to index snapshots, instead relying on default ThreadPool settings

Figure 26 Changelog

5.2       Source Location

Source code is located at https://github.com/Appdynamics/AppDynamics.DEXTER

Application releases are located at https://github.com/Appdynamics/AppDynamics.DEXTER/releases

5.3       Support and How to Submit Issues

Send me an email at daniel.odievich@appdynamics.com with your job input files and contents of the “logs” folder, zipped, and describe the issue in detail.