Monitor ASP.NET Core application performance across five areas: HTTP request throughput and latency, process memory, GC and heap health, thread pool, and routing.
This dashboard requires OpenTelemetry NuGet instrumentation. Follow the ASP.NET Core Metrics guide to instrument your application and start sending metrics.

Dashboards → + New dashboard → Import JSON
What This Dashboard Monitors
- Request & Response: HTTP request rate, latency percentiles (P50/P95/P99), active requests, and error breakdown by route
- Process: Working set memory and CPU time
- GC & Memory: Collection counts by generation (Gen0/Gen1/Gen2), total allocated bytes, heap size and fragmentation, GC pause time, and committed memory
- Threading & Exceptions: Thread pool thread count, queue length, work item throughput, and exceptions by type
- Routing & Memory Pool: Route match success and failure rates; Kestrel memory pool rental, allocation, pooling, and eviction (.NET 10+ only)
Metrics Included
Request & Response
- HTTP Request Duration: Shows request latency percentiles (P50, P95, P99) over time
- Active Requests: Shows in-flight HTTP requests over time
- Kestrel Active Connections: Shows open Kestrel connections over time
- Kestrel Connection Duration: Shows Kestrel connection lifetime over time
Process
- Memory Working Set: Shows process working set over time
- CPU Time: Shows CPU time consumed by state over time
GC & Memory
- GC Collections: Shows garbage collection counts by generation (Gen0, Gen1, Gen2) over time
- Heap Total Allocated: Shows total bytes allocated on the managed heap over time
- Heap Size After GC: Shows heap size after the last collection over time
- Committed Memory: Shows memory committed after the last collection over time
- Heap Fragmentation: Shows heap fragmentation after the last collection over time
- GC Pause Time: Shows time spent in GC pause over time

Threading & Exceptions
- Thread Pool Thread Count: Shows the number of active thread pool threads over time
- Thread Pool Queue Length: Shows the work queue length over time
- Work Items Completed: Shows thread pool work items completed over time
- Exceptions: Shows exceptions thrown over time, grouped by
error.type

Routing & Memory Pool
- Route Match Attempts: Shows route match attempts grouped by status (
success/failure) over time - Memory Pool Rented: Shows bytes rented from the Kestrel memory pool over time
- Memory Pool Allocated: Shows bytes allocated from the OS for the pool over time
- Memory Pool Pooled: Shows bytes currently held in the pool over time
- Memory Pool Evicted: Shows bytes evicted from the pool over time

Memory pool panels populate only on .NET 10+ and only when your application has endpoints that read request bodies. On .NET 8, those panels stay empty.
Dashboard Variables
- deployment.environment: Filter by deployment environment. Set by adding
OTEL_RESOURCE_ATTRIBUTES=deployment.environment=<value>to your application's environment. - service.name: Filter by service name. Populated from
OTEL_SERVICE_NAME.
The variables cascade: picking an environment narrows the service name dropdown to services running in that environment.