aspire-monitoring
Skill93 starsChanged 30 days agoMITView on GitHub
**ANALYSIS SKILL** - Observe Aspire apps: logs, traces, metrics, resource state, telemetry export, browser telemetry, and the standalone dashboard. Routes between local Aspire CLI, AKS workload diagnostics, and deployed Azure resource health. USE FOR: aspire logs, aspire otel logs, aspire otel traces, aspire otel spans, aspire describe, aspire ps, aspire export, aspire dashboard run, describe --include-hidden, browser logs in dashboard, DevTunnel URLs, WithBrowserLogs, App Insights query, AKS pod logs, container app logs. DO NOT USE FOR: start/stop/wait (use aspire-orchestration), deploy/publish/destroy (use aspire-deployment), AppHost code edits like WithBrowserLogs() (use aspireify), Azure provisioning (use azure-prepare), terminal authoring/input/tapes (use aspire-terminals). INVOKES: aspire CLI, azure-diagnostics (deployed Azure), kubectl + Container Insights. FOR SINGLE OPERATIONS: Run the aspire CLI command directly for quick log or describe lookups.
- Reads credentials
3 other projects use a version of this, 3 of them edited.
Adopted by
Most recently taken up by
- foxminchan/BookWormedited, first seen Oct 8, 2026
- dotnet/eShopedited, first seen Oct 8, 2026
- BlakeHastings/claude-code-artifactsedited, first seen Jun 13, 2026
Other versions3 projects use a version of this.
Word for word · 0
None found.
Edited · 3
- dotnet/eShop★ 11k82% same
- foxminchan/BookWorm★ 50899% same
- BlakeHastings/claude-code-artifacts★ 182% same
Wrote their own version · 0
None found.
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository16 other files it gives its agents.
- pr-reviewSkill
- aspire-deploymentSkill
- aspireifySkill
- aspire-initSkill
- aspire-orchestrationSkill
- aspire-project-v2-migrationSkill
- aspireSkill
- aspire-terminalsSkill
- aspire-deploymentSkill
- aspireifySkill
- aspire-initSkill
- aspire-monitoringSkill
- aspire-orchestrationSkill
- aspire-project-v2-migrationSkill
- aspireSkill
- aspire-terminalsSkill
The file
We split this skill into the rules it gives an agent
7 rules. 1 is common, 2 are distinctive, and 4 are very specific to this project.
1
Common
Most of the 3 edited versions we read keep these.
2
Distinctive
This author's own choices. Worth a look.
4
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Common: line 57
When something is wrong, investigate before editing code:
- Distinctive: line 109
Check the running dashboard version and actual error before applying a historical fix.
- Very specific: line 157
When a frontend has already opted into WithBrowserLogs(), Aspire creates a child resource named <frontend>-browser-logs.
- Distinctive: line 165
Start a tracked browser session with:
- Very specific: line 177
Do not use aspire otel logs <frontend> for browser output.
- Very specific: line 211
Exception: if a Dashboard is reachable (deployed alongside the app, or running standalone), aspire otel logs and aspire otel traces can …
- Very specific: line 226
If .agents/skills/aspire/SKILL.md exists (from aspire agent init), see its references/monitoring.md for deeper telemetry workflow guidance.
“Common” is measured: kept by at least 6 in 10 of the 3 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
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 | aspire logs <resource> |
| 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] |
| Running AppHosts | Local dev | Aspire CLI | aspire ps |
| Resource state | Local dev | Aspire CLI | aspire describe (add --include-hidden if a resource is missing) |
| Telemetry export | Local dev | Aspire CLI | aspire export [resource] |
| Standalone dashboard | Any (no AppHost) | Aspire CLI | aspire dashboard run (foreground/blocking — see below) |
| Browser console / network / diagnostics | Local dev (frontend) | Aspire CLI + dashboard | Discover <frontend>-browser-logs, start its tracked browser, then inspect its console logs |
| AppHost / deployment definition | Authoring | aspire-deployment skill | → aspire-deployment skill |
| AKS workload (pod logs, pod state) | Deployed AKS | kubectl + Container Insights | kubectl logs <pod>, kubectl describe pod <pod>, Container Insights in Azure Monitor |
| Azure resource health (App Insights, Front Door, NSP, private endpoint) | Deployed Azure | azure-diagnostics | → azure-diagnostics skill |
| App Service / Container Apps logs | Deployed Azure | azure-diagnostics | → azure-diagnostics skill |
| Logs/state | Deployed Docker / Compose | Docker CLI | docker logs <container>, docker compose logs <service> |
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 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
| Command | Purpose | Example |
aspire logs <resource> | Console stdout/stderr | aspire logs apiservice |
aspire logs --follow | Stream logs in real-time | aspire logs apiservice --follow |
aspire otel logs | Structured OpenTelemetry logs | aspire otel logs |
aspire otel traces | Distributed trace data | aspire otel traces |
aspire otel spans | Individual span detail | aspire otel spans |
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 + --api-key) | 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" |
aspire describe | Resource state, endpoints, health | aspire describe --format Json |
aspire describe --include-hidden | Include proxies, helper containers, migrations | aspire describe --include-hidden --format Json |
aspire resources | Compatibility alias for resource state | Prefer aspire describe in new guidance |
aspire export | Portable telemetry bundle | aspire export |
aspire dashboard run | Standalone dashboard (foreground/blocking) | aspire dashboard run |
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
# ✅ Use --format Json for machine parsing (supported: describe, start)
aspire describe --format Json
# ✅ When a resource you expect is missing, retry with --include-hidden
aspire describe --include-hidden --format Json
# ✅ 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/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.
| Symptom | Guidance |
Resource missing from aspire describe | Re-run aspire describe --include-hidden; do not use removed aspire ps --include-hidden. |
| DevTunnel is healthy but has no public URL on 13.5.0-13.5.2 | Fixed in 13.5.3. Use a compatible release containing the fix before changing endpoint configuration. |
| Known multi-path icon Graph crash on 13.5.0-13.5.2 | Fixed in 13.5.3. Use a compatible release containing the fix. |
| Dashboard Graph crashes on 13.5.3 or later | Keep the selected version. Capture the browser console stack trace and dashboard logs to diagnose a separate cause or regression; do not recommend installing 13.5.3 as a workaround. |
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.
aspire dashboard run
# Dashboard: http://localhost:18888/login?t=<TOKEN>
# OTLP/gRPC: http://localhost:4317
# OTLP/HTTP: http://localhost:4318⚠️ 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:
# 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 --api-key alongside the base --dashboard-url:
aspire otel logs --dashboard-url https://my-dashboard.example.com --api-key "$DASHBOARD_API_KEY" --followThe 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:
aspire resource <frontend>-browser-logs open-tracked-browserInspect the browser diagnostics with:
aspire logs <frontend>-browser-logs
Do not use aspire otel logs <frontend> for browser output; it does not return that child
resource's browser diagnostics.
| Need | Action |
| Inspect existing browser diagnostics | Discover <frontend>-browser-logs, start open-tracked-browser, then run aspire logs <frontend>-browser-logs |
| Confirm the browser resource belongs to a frontend | Check the child resource's parent relationship and Source property |
| Confirm a frontend has browser logging enabled | Check the AppHost for .WithBrowserLogs() on the resource |
Add WithBrowserLogs() to a resource | → aspireify skill (AppHost authoring) — do not edit the AppHost from this skill |
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. Invokeaspire-terminalsfor terminal authoring, input, dock/dialog lifetimes and tapes; logs/traces remain here. - 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
| Scenario | Route To |
| Start/stop/wait/rebuild lifecycle | → aspire-orchestration skill |
| Deploy, publish, pipeline steps, AppHost compute environment binding | → aspire-deployment skill |
AppHost code changes (WithBrowserLogs(), custom commands, WithHttpCommand) | → aspireify skill |
| Deployed Azure resource health (App Insights, Front Door, NSP, private endpoint, ACA, App Service) | → azure-diagnostics skill (azure-skills) |
| AKS workload diagnostics (pod logs, pod state, Container Insights) | → kubectl + Azure Monitor Container Insights |
| Docker / Compose container logs | → docker logs / docker compose logs |
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 — Local vs deployed routing detail
- monitoring.md — Telemetry inspection and export patterns
- playwright-handoff.md — Find the correct Aspire frontend URL before browser testing
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

