The AppDynamics .NET Machine Agent uses Microsoft Performance Counters to gather and report .NET metrics. To manage the metrics that the agent collects:

  • Tune the set of metrics that the agent automatically collects
  • Configure the agent to collect metrics from additional counters that are not part of the default settings

Tune the Default Performance Metrics for the .NET Agent

The .NET Agent prioritizes the default set of Performance Counters into three categories: low, medium, and high. By default, the agent is set to collect metrics for all three categories. 

Metric Browser LocationMetricPriority
ASP.NETApplication Restarts3 - Low
ASP.NETApplications Running3 - Low
ASP.NETRequest Wait Time2 - Medium
ASP.NETRequests Disconnected3 - Low
ASP.NETRequests Queued1 - High
ASP.NETRequests Rejected3 - Low
ASP.NETWorker Process Restarts3 - Low
ASP.NET ApplicationsAnonymous Requests3 - Low
ASP.NET ApplicationsAnonymous Requests/Sec3 - Low
ASP.NET ApplicationsCache API Entries3 - Low
ASP.NET ApplicationsCache API Hit Ratio3 - Low
ASP.NET ApplicationsCache API Turnover Rate3 - Low
ASP.NET ApplicationsCache Total Entries3 - Low
ASP.NET ApplicationsCache Total Hit Ratio3 - Low
ASP.NET ApplicationsCache Total Turnover Rate3 - Low
ASP.NET ApplicationsErrors During Compilation3 - Low
ASP.NET ApplicationsErrors During Execution3 - Low
ASP.NET ApplicationsErrors During Preprocessing3 - Low
ASP.NET ApplicationsErrors Total2 - Medium
ASP.NET ApplicationsErrors Total/sec2 - Medium
ASP.NET ApplicationsErrors Unhandled During Execution3 - Low
ASP.NET ApplicationsErrors Unhandled During Execution/sec3 - Low
ASP.NET ApplicationsOutput Cache Entries3 - Low
ASP.NET ApplicationsOutput Cache Hit Ratio3 - Low
ASP.NET ApplicationsOutput Cache Turnover Rate3 - Low
ASP.NET ApplicationsPipeline Instance Count3 - Low
ASP.NET ApplicationsRequests Executing3 - Low
ASP.NET ApplicationsRequests Failed3 - Low
ASP.NET ApplicationsRequests in Applicaton Queue1 - High
ASP.NET ApplicationsRequests Not Authorized3 - Low
ASP.NET ApplicationsRequests Not Found3 - Low
ASP.NET ApplicationsRequests Succeeded3 - Low
ASP.NET ApplicationsRequests Timed Out2 - Medium
ASP.NET ApplicationsRequests Total2 - Medium
ASP.NET ApplicationsRequests/sec2 - Medium
ASP.NET ApplicationsSession SQL Server Connections Total3 - Low
ASP.NET ApplicationsSession State Server Connections Total3 - Low
ASP.NET ApplicationsSessions Abandoned3 - Low
ASP.NET ApplicationsSessions Active3 - Low
ASP.NET ApplicationsSessions Timed Out3 - Low
ASP.NET ApplicationsSessions Total3 - Low
ASP.NET ApplicationsTransactions Aborted3 - Low
ASP.NET ApplicationsTransactions Committed3 - Low
ASP.NET ApplicationsTransactions Pending3 - Low
ASP.NET ApplicationsTransactions Total3 - Low
ASP.NET ApplicationsTransactions/sec3 - Low
CLRProcess CPU Burnt %2 - Medium
CLR -> ClassesCurrent Loaded Class Count3 - Low
CLR -> ClassesTotal Classes Loaded3 - Low
CLR -> Locks and ThreadsContention Rate Per Sec2 - Medium
CLR -> Locks and ThreadsCurrent Logical Threads2 - Medium
CLR -> Locks and ThreadsCurrent Physical Threads2 - Medium
CLR -> Locks and ThreadsSink Blocks in Use2 - Medium
CLR -> Memory -> HeapCommitted (bytes)1 - High
CLR -> Memory -> HeapCurrent Usage (bytes)1 - High
CLR -> Memory -> HeapGen 0 Usage (bytes)1 - High
CLR -> Memory -> HeapGen 1 Usage (bytes)1 - High
CLR -> Memory -> HeapGen 2 Usage (bytes)1 - High
CLR -> Memory -> LOHCurrent Usage (bytes)1 - High
Hardware Resources -> CPU%Busy1 - High
Hardware Resources -> CPU%Idle3 - Low
Hardware Resources -> Disks%Free1 - High
Hardware Resources -> DisksKB read/sec3 - Low
Hardware Resources -> DisksKB written/sec3 - Low
Hardware Resources -> DisksMB Free1 - High
Hardware Resources -> DisksReads/sec1 - High
Hardware Resources -> DisksWrites/sec1 - High
Hardware Resources -> MemoryFree %3 - Low
Hardware Resources -> MemoryFree (MB)3 - Low
Hardware Resources -> MemoryTotal (MB)1 - High
Hardware Resources -> MemoryUsed %1 - High
Hardware Resources -> MemoryUsed (MB)2 - Medium
Hardware Resources -> NetworkIncoming KB/sec2 - Medium
Hardware Resources -> NetworkIncoming packets/sec3 - Low
Hardware Resources -> NetworkOutgoing KB/sec2 - Medium
Hardware Resources -> NetworkOutgoing packets/sec3 - Low
IISCPU %1 - High
IISNumber of Working Processes3 - Low
IISWorking Set1 - High
IIS -> Application Pools -> <name>CPU %1 - High
IIS -> Application Pools -> <name>Number of Working Processes3 - Low
IIS -> Application Pools -> <name>Working Set1 - High
IIS -> INFOVersionMajor3 - Low
IIS -> INFOVersionMinor3 - Low

To reduce the number of metrics that the agent sends to the Controller, or to view less than a full set of metrics, you can configure that agent to collect fewer performance metrics. You can also set the agent to only collect specific metrics from the list. See .NET Agent Configuration Properties.

Configure Additional Performance Counters for .NET

If the agent does not monitor performance counters you are interested in, you can add additional performance counters.

  1. Shut down the AppDynamics.Agent.Coordinator service.
  2. Open the config.xml file for editing as an administrator.  See 'Where to Configure Agent Properties' on Administer the .NET Agent.

  3. Add the Performance Counters block as a child of the Machine Agent element.

      <perf-counters>
        <perf-counter cat="" name="" instance=""/>
      </perf-counters>
    CODE
  4. Create a Performance Counter element for each performance counter you want to add. Use any of the performance counters as specified in Performance Counters in .NET Framework.

    • Set the cat attribute to the category of the performance counter.
    • Set the name attribute to the performance counter name.
    • Set the instance attribute to the instance of the performance counter.
      If the counter does not have an instance name, leave an empty string "".
      If a particular performance counter has many instances, you can specify the following options to report the sum of all instances:
      • instance ="*" OR
      • instance ="all"

    For example, to add the performance counter for measuring CPU Idle time(%), add this element in the <perf-counters> block:

    <perf-counter cat="Processor" name="% Idle Time" instance="_Total"/>
  5. Save the config.xml file.
  6. Start the AppDynamics.Agent.Coordinator service.

After you enable Performance Counter metrics, they display under the Custom Metrics tree in the Metric Browser.

Sample .NET Machine Agent Configuration with Performance Counters

<machine-agent>
  <!-- Additional machine level Performance Counters -->
  <perf-counters>
    <perf-counter cat="Processor" name="% Idle Time" instance="_Total"/>
    <!-- Perf counter with no instance name -->
    <perf-counter cat="Memory" name="Available MBytes" instance="" />
  </perf-counters>
</machine-agent>
CODE