Aspire Monitoring
Aspire CLI provides full observability locally. For deployed apps, route to platform-specific tools.
Diagnostics Bridge — Where To Look
Decision tree:
- Is this about AppHost code or deployment definition? →
aspire-deploymentskill. - Is the app running locally via
aspire start? → Aspire CLI. - Is it deployed to AKS? → kubectl + Container Insights for workload;
azure-diagnosticsfor the cluster's Azure resources. - Is it deployed to other Azure (App Service, Container Apps)? →
azure-diagnostics. - Is it deployed to Docker / Compose? →
docker/docker composeCLI.
See diagnostics-bridge.md [blocked] for detailed routing.
Investigation Workflow
When something is wrong, investigate before editing code:
aspire describe— check resource state and endpointsaspire otel logs <resource>— structured logs firstaspire logs <resource>— console output as secondary viewaspire otel traces <resource>— cross-service activityaspire export— zipped telemetry snapshot for deeper analysis
Local Commands Reference
Hidden resources are filtered by default
aspire describe and other CLI commands filter out resources marked hidden in the AppHost (proxies, helper containers, migrations). The default output is correct for normal app inspection. Add --include-hidden when:
- Debugging proxies, sidecar/helper containers, or migration jobs.
- An expected resource is "missing" from
aspire resources/aspire describe. - Triaging connectivity or wiring issues that may involve infrastructure resources.
Tips for Agents
Version-Specific Diagnostics
Check the running dashboard version and actual error before applying a historical fix. An older fix does not establish that downgrading a newer dashboard is a working mitigation, even temporarily or in an isolated test.
Resolved in 13.3: The standalone-dashboard workaround for #16236 is obsolete — use
aspire dashboard run(see below).
Standalone Dashboard (aspire dashboard run)
aspire dashboard run launches the Aspire Dashboard without an AppHost, so any OTLP-emitting application (Aspire or not) can stream telemetry into it.
⚠️ Foreground / blocking.
aspire dashboard rundoes not return until you stop it (Ctrl-C). Agents must treat it as a long-running background process — start it with the bash tool'smode="async", capture the dashboard URL and token from initial output, and leave it running. Do not invoke it as a one-shot synchronous command, and do not wait for it to "finish".
Connect the Aspire CLI to a standalone dashboard
aspire otel logs and aspire otel traces accept --dashboard-url. The simplest form passes the full login URL printed by aspire dashboard run — the CLI normalizes it automatically:
For dashboards configured with API-key authentication (e.g., the standalone container image with a separate API key), pass --api-key alongside the base --dashboard-url:
The container-image standalone dashboard still works for environments where the CLI isn't available.
Browser Logs (Aspire.Hosting.Browsers)
When a frontend has already opted into WithBrowserLogs(), Aspire creates a child resource named
<frontend>-browser-logs. Browser console messages, errors, exceptions, and network diagnostics
are sent to that child resource's console log stream, not to the frontend's OpenTelemetry logs.
-
Begin with normal
aspire describeoraspire resourcesoutput to find<frontend>-browser-logs;aspire psno longer lists resources. It is a normal child resource, so retry withaspire describe --include-hiddenonly if unavailable. -
Correlate it to the frontend through its parent relationship and
Sourceproperty. -
Start a tracked browser session with:
-
Inspect the browser diagnostics with:
Do not use aspire otel logs <frontend> for browser output; it does not return that child
resource's browser diagnostics.
Dashboard UX Features
Agents inspecting a running dashboard should know:
- Notification center (bell icon, top-right) — surfaces results of resource commands and lifecycle events. Inline command responses appear here instead of being scraped from the logs panel.
- Rebuild command — available on container and project resources; rebuilds the image and restarts the resource without restarting the whole AppHost. Result lands in the notification center.
- Structured command results — custom resource commands return
ExecuteCommandResultwith aMessagepayload that the dashboard renders inline; HTTP commands setHttpCommandResultMode.Auto | Json | Text | Noneto control how the response body is shown. - 13.5 filtering — filter telemetry by timestamp, use
==/!=for exact numeric values, and search console-log text while streams continue updating. - Terminal view — resources configured with experimental
WithTerminal()open as interactive sessions in the dashboard. - No dashboard AI Assistant — it was removed in 13.5. Use
aspire agent initand the AppHost/CLI agent integration instead. - VS Code launch is opt-in — the Aspire extension no longer opens the dashboard
automatically. Use its in-editor dashboard or configure
dashboardBrowser/launch.json.
Authoring custom commands or
WithBrowserLogs()calls is AppHost work — route toaspireify. This skill is for observing what those features surface in the dashboard.
Why Aspire CLI Can't Do Remote Diagnostics
The Aspire CLI talks to a running AppHost through a local backchannel socket at ~/.aspire/backchannels/. This is by design — there is no remote backchannel. For deployed apps, route to platform-specific tools (azure-diagnostics, kubectl, docker).
Exception: if a Dashboard is reachable (deployed alongside the app, or running standalone), aspire otel logs and aspire otel traces can query it via --dashboard-url (login URL form) and optional --api-key (see the Standalone Dashboard section above). This does not apply to aspire logs or aspire describe.
Handoff Rules
Project-Local Skill Routing
If .agents/skills/aspire/SKILL.md exists (from aspire agent init), see its
references/monitoring.md for deeper telemetry workflow guidance.
References
- diagnostics-bridge.md [blocked] — Local vs deployed routing detail
- monitoring.md [blocked] — Telemetry inspection and export patterns
- playwright-handoff.md [blocked] — Find the correct Aspire frontend URL before browser testing

