在本地运行aspire-dashboard (aspire.net)
背景:
在试用 aspire.net 时,看到官方文档提供了一个 “独立模式”的使用方式使用 aspire 仪表盘(独立 .NET.NET Aspire 仪表板 - .NET Aspire | Microsoft Learn),但是这个用法是通过docker 方式运行了。然而本机又不太适合跑docker(或者我就是不想通过docker跑)。于是想办法实现本地启用 。
分析
在本地创建了一个 aspire.net 的“入门应用”,即可得到官方的应用demo。其中本就包含了 仪表盘 功能,看着跟官方提供的docker 运行起来的平台类似。这样看来,官方提供的镜像应该也只是一个空的 aspire host 的打包 。那么如果将数据推送到该入门aspire host 接口,按理就可以展示跟踪数据。
尝试
创建了 aspire 入门 演示程序运行后,发现没有启动数据接入的端口,后面看了文档中的配置 (.NET .NET Aspire 仪表板配置 - .NET Aspire | Microsoft Learn),翻看 host 的启动配置,增加了几个配置后,就可以接受数据。
实现
aspire-dashboard host
通过 创建项目 模板创建一个 aspire.net 空项目。
在 launchSettings.json 配置增加以下配置:
1 2 3 4 | "DOTNET_DASHBOARD_OTLP_HTTP_ENDPOINT_URL" : "http://localhost:4317" , "DOTNET_DASHBOARD_UNSECURED_ALLOW_ANONYMOUS" : "true" , "DOTNET_ASPIRE_SHOW_DASHBOARD_RESOURCES" : "true" , "ASPIRE_ALLOW_UNSECURED_TRANSPORT" : "true" |
在自己的项目通过 OpenTelemetry 将以http方式将数据推送到 DOTNET_DASHBOARD_OTLP_HTTP_ENDPOINT_URL 即可。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | var otel = services.AddOpenTelemetry(); // Add Tracing for ASP.NET Core and our custom ActivitySource and export via OTLP otel.WithTracing(tracing => { tracing.SetResourceBuilder(ResourceBuilder.CreateDefault().AddService( "WorkFlowCore.Host" )); tracing.AddSource(WorkflowActivitySource.SourceName); tracing.AddAspNetCoreInstrumentation(opt => { opt.EnrichWithHttpRequest = (act, req) => { if ( string .IsNullOrEmpty(act.ParentId)) { act.DisplayName = req.Path; } }; opt.Filter = context => { return context.Request.Path.ToString().StartsWith( "/api/" ); }; }); tracing.AddHttpClientInstrumentation(opt => { opt.EnrichWithHttpWebRequest = (act, req) => { act.DisplayName = req.RequestUri.AbsolutePath; }; opt.EnrichWithHttpRequestMessage = (act, req) => { act.DisplayName = req.RequestUri.AbsolutePath; }; }); #if DEBUG tracing.AddEntityFrameworkCoreInstrumentation(options => { options.SetDbStatementForText = true ; // 将 SQL 文本设置为 db.statement 标签 options.EnrichWithIDbCommand = (activity, command) => { // 添加自定义标签(例如数据库类型) activity.SetTag( "db.system" , command.Connection?.Database ?? "unknown" ); }; }); //tracing.AddConsoleExporter();//控制台输出 #endif }); // Export OpenTelemetry data via OTLP, using env vars for the configuration // Export OpenTelemetry data via OTLP, using env vars for the configuration otel.UseOtlpExporter(OpenTelemetry.Exporter.OtlpExportProtocol.HttpProtobuf, new Uri( "http://localhost:4317" )); |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】凌霞软件回馈社区,携手博客园推出1Panel与Halo联合会员
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步