C# Aspire仪表板使用方法 C#如何通过Aspire Dashboard监控应用

来源:这里教程网 时间:2026-02-21 17:40:47 作者:

Aspire Dashboard 启动后打不开页面怎么办

默认启动

dotnet aspire dashboard
后,浏览器访问
http://localhost:18080
却显示连接被拒绝或空白页,大概率是后台服务没起来或端口被占。先确认 Aspire host 进程是否在运行:
dotnet --list-processes
或任务管理器查
Microsoft.Extensions.Hosting
相关进程。

常见原因和应对方式:

项目未启用 Aspire 托管模型:确保启动项目是
AspireApp.Host
(或含
AddAspireDashboard()
的宿主),不是直接跑 Web API 项目
端口冲突:用
netstat -ano | findstr :18080
查占用进程,或改用
dotnet aspire dashboard --port 18081
Dashboard 依赖的 Redis / PostgreSQL 容器未就绪:检查终端输出是否有
Waiting for container 'redis' to be ready...
类提示,等待几秒再刷新
首次启动需拉取镜像:Docker Desktop 必须运行且有网络,
docker ps
应能看到
aspire-dashboard-db
等容器

为什么资源列表里看不到我的服务

Aspire Dashboard 不会自动发现所有项目,只监控通过

AddProject<t>()</t>
AddExecutable(...)
显式注册到
AspireAppHost
的组件。如果你的服务是独立部署的(比如手动
dotnet run
),它不会出现在仪表板中。

正确做法是在

Program.cs
的宿主构建阶段注册:

var builder = DistributedApplication.CreateBuilder(args);
builder.AddProject<Projects.MyApi>("myapi"); // ← 必须这样注册
builder.AddProject<Projects.WebFrontend>("frontend");
builder.Build().Run();

注意点:

项目名(如
"myapi"
)会作为服务标识显示在 Dashboard 左侧资源列表,不能重复
若服务启动慢(如 EF Core 迁移耗时),Dashboard 可能短暂显示 “Not Ready”,等其健康检查通过(HTTP 200 或
/health
endpoint)才会变绿
确保服务暴露了可被 Dashboard 探测的 endpoint:默认要求
http://localhost:50xx/health
返回 200,否则需在注册时指定健康检查路径:
.WithHealthCheck("/api/health")

如何查看服务的实时日志和依赖拓扑

Dashboard 页面左上角切换到 Logs 标签页,选中某服务后,日志流会自动按时间倒序加载。它不是简单转发

Console.WriteLine
,而是依赖
Microsoft.Extensions.Logging
的结构化日志管道 —— 所以你的服务必须使用
ILogger<t></t>
记录,且宿主已启用日志聚合(默认开启)。

拓扑图(Topology 标签页)展示服务间调用关系,但前提是调用走的是 Aspire 内置的可观测性链路:

HTTP 调用需用
HttpClient
实例(由
builder.AddProject().WithReference(...)
注入),而非硬编码 URL
gRPC 调用需用
AddGrpcServiceReference
注册,Dashboard 才能解析服务发现地址并绘制箭头
数据库连接不会自动出现在拓扑中 —— 即使你用了
AddRedis
AddPostgres
,它们只显示为独立资源节点,不体现“谁连了它”

Dashboard 报错 “Failed to load metrics: 404” 怎么办

这个错误说明服务没暴露 Prometheus metrics endpoint,或者路径不对。Aspire 默认期望服务在

/metrics
提供 OpenMetrics 格式数据(如
http://localhost:5091/metrics
)。

修复步骤:

在服务项目中安装
Prometheus.AspNetCore
Program.cs
添加:
builder.Services.AddEndpointsApiExplorer(); builder.Services.AddPrometheusHttpMetrics(); app.MapPrometheusScrapingEndpoint();
确保服务启动后,手动 curl
curl http://localhost:5091/metrics
能返回文本指标(含
# TYPE process_cpu_seconds_total counter
等)
Dashboard 默认每 15 秒拉一次指标;如果服务刚启动,可能要等一两个周期才显示图表

注意:指标采集依赖服务的

ASPNETCORE_ENVIRONMENT
Development
或明确启用了
app.UsePrometheusHttpMetrics()
中间件 —— 生产环境常会关闭此 endpoint。

相关推荐