Aspire Monitoring
Aspire CLI provides full observability locally. For deployed apps, route to platform-specific tools.
Diagnostics Bridge — Where To Look
| Need | Environment | Tool | Command / Route |
|---|
| Console logs | Local dev | Aspire CLI | |
| Structured logs | Local dev | Aspire CLI | aspire otel logs [resource]
|
| Distributed traces | Local dev | Aspire CLI | aspire otel traces [resource]
|
| Span detail | Local dev | Aspire CLI | aspire otel spans [resource]
|
| Resource state | Local dev | Aspire CLI | (add if a resource is missing) |
| Telemetry export | Local dev | Aspire CLI | |
| Standalone dashboard | Any (no AppHost) | Aspire CLI | (foreground/blocking — see below) |
| Browser console / network / screenshots | Local dev (frontend) | Aspire dashboard | Surfaced via + |
| AppHost / deployment definition | Authoring | aspire-deployment skill | → skill |
| AKS workload (pod logs, pod state) | Deployed AKS | kubectl + Container Insights | , kubectl describe pod <pod>
, Container Insights in Azure Monitor |
| Azure resource health (App Insights, Front Door, NSP, private endpoint) | Deployed Azure | azure-diagnostics | → skill |
| App Service / Container Apps logs | Deployed Azure | azure-diagnostics | → skill |
| Logs/state | Deployed Docker / Compose | Docker CLI | , docker compose logs <service>
|
Decision tree:
- Is this about AppHost code or deployment definition? → skill.
- Is the app running locally via ? → Aspire CLI.
- Is it deployed to AKS? → kubectl + Container Insights for workload; for the cluster's Azure resources.
- Is it deployed to other Azure (App Service, Container Apps)? → .
- Is it deployed to Docker / Compose? → / CLI.
See diagnostics-bridge.md for detailed routing.
Investigation Workflow
When something is wrong, investigate before editing code:
- — check resource state and endpoints
aspire otel logs <resource>
— structured logs first
- — console output as secondary view
aspire otel traces <resource>
— cross-service activity
- — zipped telemetry snapshot for deeper analysis
Local Commands Reference
| Command | Purpose | Example |
|---|
| Console stdout/stderr | |
| Stream logs in real-time | aspire logs apiservice --follow
|
| Structured OpenTelemetry logs | |
| Distributed trace data | |
| Individual span detail | |
aspire otel logs --trace-id <id>
| Logs correlated to trace (⚠️ verify flag) | aspire otel logs --trace-id abc123
|
aspire otel logs --dashboard-url
| Query a standalone dashboard (login URL or base URL + ) | aspire otel logs --dashboard-url "http://localhost:18888/login?t=TOKEN" --follow
|
aspire otel traces --dashboard-url
| Query a standalone dashboard | aspire otel traces --dashboard-url "http://localhost:18888/login?t=TOKEN"
|
| Resource state, endpoints, health | aspire describe --format Json
|
aspire describe --include-hidden
| Include proxies, helper containers, migrations | aspire describe --include-hidden --format Json
|
| Resource list with state (filtered) | |
aspire ps --include-hidden --format Json
| Resource list with hidden resources | aspire ps --include-hidden --format Json
|
| Portable telemetry bundle | |
| Standalone dashboard (foreground/blocking) | |
Hidden resources are filtered by default
,
, 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
when:
- Debugging proxies, sidecar/helper containers, or migration jobs.
- An expected resource is "missing" from / .
- Triaging connectivity or wiring issues that may involve infrastructure resources.
Tips for Agents
bash
# ✅ Use --format Json for machine parsing (supported: ps, describe, start)
aspire describe --format Json
# ✅ When a resource you expect is missing, retry with --include-hidden
aspire ps --include-hidden --format Json | jq '.[] | {name, displayName, state, hidden}'
# ✅ Get endpoints from describe, not guessing ports
ENDPOINT=$(aspire describe apiservice --format Json | jq -r '.endpoints[0].url')
# ✅ Use --apphost <path> when multiple AppHosts exist
aspire describe --apphost ./src/MyApp.AppHost/
Known Diagnostics Issues
| Issue | Symptom | Workaround |
|---|
| TS AppHost DNS failure (#15782) | "No such host" for | Use --dashboard-url localhost:PORT
|
| mode telemetry (#16107) | OTEL port not randomized in isolated mode | Avoid if telemetry is needed |
| Resource missing from / | Hidden-by-default resources such as proxies, helpers, or migrations | Re-run with |
Resolved in 13.3: The standalone-dashboard workaround for
#16236 is obsolete — use
(see below).
Standalone Dashboard ()
launches the Aspire Dashboard without an AppHost, so any OTLP-emitting application (Aspire or not) can stream telemetry into it.
bash
aspire dashboard run
# Dashboard: http://localhost:18888/login?t=<TOKEN>
# OTLP/gRPC: http://localhost:4317
# OTLP/HTTP: http://localhost:4318
⚠️
Foreground / blocking. does
not return until you stop it (Ctrl-C). Agents must treat it as a long-running background process — start it with the bash tool's
, 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
and
accept
. The simplest form passes the full login URL printed by
— the CLI normalizes it automatically:
bash
# Stream structured logs from a standalone dashboard (login URL form)
aspire otel logs --dashboard-url "http://localhost:18888/login?t=TOKEN" --follow
# Search recent traces
aspire otel traces --dashboard-url "http://localhost:18888/login?t=TOKEN"
For dashboards configured with API-key authentication (e.g., the standalone container image with a separate API key), pass
alongside the base
:
bash
aspire otel logs --dashboard-url https://my-dashboard.example.com --api-key "$DASHBOARD_API_KEY" --follow
The container-image standalone dashboard still works for environments where the CLI isn't available.
Browser Telemetry ()
The
integration captures
browser console logs, network requests, and screenshots from frontend resources during local development and surfaces them in the dashboard alongside server-side telemetry. Frontend resources opt in via
.
| Need | Action |
|---|
| Inspect browser telemetry that is already wired | Open the dashboard; browser logs / network / screenshots appear next to server telemetry for the resource |
| Confirm a frontend has it enabled | Check the AppHost for on the resource (e.g., AddViteApp("frontend").WithBrowserLogs()
) |
| Add to a resource | → skill (AppHost authoring) — do not edit the AppHost from this skill |
When parsing telemetry programmatically, browser logs surface as additional OTLP log records associated with the frontend resource —
aspire otel logs <frontend-resource>
returns them alongside server logs.
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 with a payload that the dashboard renders inline; HTTP commands set
HttpCommandResultMode.Auto | Json | Text | None
to control how the response body is shown.
Authoring custom commands or
calls is AppHost work — route to
. 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
. 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),
and
can query it via
(login URL form) and optional
(see the Standalone Dashboard section above). This does
not apply to
or
.
Handoff Rules
| Scenario | Route To |
|---|
| Start/stop/wait/rebuild lifecycle | → skill |
| Deploy, publish, pipeline steps, AppHost compute environment binding | → skill |
| AppHost code changes (, custom commands, ) | → skill |
| Deployed Azure resource health (App Insights, Front Door, NSP, private endpoint, ACA, App Service) | → skill (azure-skills) |
| AKS workload diagnostics (pod logs, pod state, Container Insights) | → + Azure Monitor Container Insights |
| Docker / Compose container logs | → / |
Project-Local Skill Routing
If
.agents/skills/aspire/SKILL.md
exists (from
), see its
for deeper telemetry workflow guidance.
References
- diagnostics-bridge.md — Local vs deployed routing detail
- monitoring.md — Telemetry inspection and export patterns
- playwright-handoff.md — Find the correct Aspire frontend URL before browser testing