在本地运行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"));

 

 

  

posted @   mengtree  阅读(44)  评论(0)    收藏  举报
友情链接:立得表
点击右上角即可分享
微信分享提示