Skip to content

Walkthrough Part 1

Daniel Odievich edited this page Apr 18, 2018 · 32 revisions

Platform Overview

The AppDynamics interface is built upon the concept of “Applications”—logical groups for organizing individual executables (Nodes) into roles of execution (Tiers). All discovery in AppDynamics is scoped to the Applications. If your app spans multiple AppD Applications, or if you have multiple instances of your application serving, say, multiple customers or data centers, or if you’re using blue-green deployment, etc., you must manage those environments individually.

Sometimes reviewing information in aggregate can be easier than tracking individual snapshots. AppDynamics is often configured to focus on data relevant to the immediate past—aggregating older data to provide more trend-based information rather than keeping everything for extended time periods. But when you want to perform more detailed, long-term analysis of a particular time range, DEXTER can help with that capture.

Data Extraction and Reporting

If you’re familiar with data warehousing terminology, think of DEXTER as an extract/transform/load (ETL) utility for AppDynamics data. It extracts information from the AppDynamics platform, transforms it into an enriched, query-able form for faster access, and loads it into variety of reports for:

  • Application logical model (applications, tiers, nodes, backends, business transactions)
  • Performance metrics (average response time, calls, errors per minute, CPU, memory, JVM, JMX, GC metrics)
  • Dependency data (flow maps, relationships between components)
  • Events (errors, resource pool exhaustion, application crashes and restarts, health rule violations)
  • Configuration rules (business transaction, backend detection, data collectors, error detection, agent properties)
  • Snapshots (SQL queries, HTTP destinations, data collectors, call graph data, errors)

The data, once extracted, is yours to mine. DEXTER provides Microsoft Excel and Power BI templates for viewing and analyzing your data.

Should you have additional data-mining needs, DEXTER provides clean, well-formatted CSV files for use in other data warehousing and enhanced query systems, such as Tableau and Power BI.

One common scenario is to identify the time of interest—say, a load test, an application outage, or a reported customer bug—and preserve this data for careful analysis and/or future comparison against a similar incident.

Create Reports from Your Data

To give DEXTER instructions on what to report, first create a job parameter file in simple JSON format. In the example below, we specify that we want all AppDynamics APM Applications data from two Controllers in a two-hour time range, and instruct DEXTER to extract and report on the logical model, configuration rules, performance metrics, dependency data, events, and snapshots:

{
    "Input": {
        "TimeRange": {
            "From": "2018-01-31T19:00:00",
            "To": "2018-01-31T21:00:00"
        },
        "Metrics": true,
        "MetricsSelectionCriteria": ["Transaction", "AgentStats", "OSHardware", "CLRStats", "IISStats", "JVMStats", "BusinessTransactionPercentiles"],
        "Flowmaps": true,
        "Configuration": true,
        "Events": true,
        "Snapshots": true,
        "SnapshotSelectionCriteria": {
            "Tiers": [],
            "TierType": {
                "All": true, 
                "APP_AGENT": false, "DOT_NET_APP_AGENT": false, "NATIVE_APP_AGENT": false, "NATIVE_DYNAMIC": false, "NATIVE_SDK": false,
                "NATIVE_WEB_SERVER": false, "NODEJS_APP_AGENT": false, "PHP_APP_AGENT": false, "PYTHON_APP_AGENT": false, "RUBY_APP_AGENT": false
            },
            "BusinessTransactions": [],
            "BusinessTransactionType": {
                "All": true,
                "SERVLET": false, "HTTP": false, "WEB_SERVICE": false, "POJO": false, "JMS": false, "EJB": false, "SPRING_BEAN": false, "STRUTS_ACTION": false, "ASP_DOTNET": false, "ASP_DOTNET_WEB_SERVICE": false, "DOTNET_REMOTING": false, "WCF": false, "DOTNET_JMS": false, "POCO": false,
                "PHP_WEB": false, "PHP_MVC": false, "PHP_DRUPAL": false, "PHP_WORDPRESS": false, "PHP_CLI": false, "PHP_WEB_SERVICE": false, "NODEJS_WEB": false, "NATIVE": false, "WEB": false, "PYTHON_WEB": false, "RUBY_WEB": false, "RUBY_RAILS": false, "BINARY_REMOTING": false
            },
            "UserExperience": {
                "Normal": true, 
                "Slow": true, 
                "VerySlow": true, 
                "Stall": true, 
                "Error": true},
            "SnapshotType": { 
                "Full": true, 
                "Partial": true, 
                "None": true
            }
        }
    },
    "Output": {
        "DetectedEntities": true,
        "EntityMetrics": true,
        "EntityMetricGraphs": true,
        "EntityDetails": true,
        "Events": true,
        "Configuration": true,
        "Snapshots": true,
        "FlameGraphs": true
    },
    "Target": [
        {
            "Controller": "http://demo1.appdynamics.com/",
            "UserName": "username@customer1",
            "UserPassword": "",
            "Application": ".*",
            "NameRegex": true
        },
        {
            "Controller": "http://demo2.appdynamics.com/",
            "UserName": "username@customer1",
            "UserPassword": "",
            "Application": ".*",
            "NameRegex": true
        }
    ]
}
Clone this wiki locally