引言
在现今飞速发展的技术世界中,引用最新的工具和框架来提升项目的性能和可管理性至关重要。作为一名开发者,我最近在自己的AI知识库项目AntSK中集成了.NET Aspire,这为我的项目注入了新的活力。如果你还不清楚什么是.NET Aspire,那你将通过这篇文章充分了解它,并且学会如何将其集成到你的项目中,大大提高项目的分布式能力和可观察性。
什么是.NET Aspire?
简单来说,.NET Aspire 是一种具有高度主见性和云原生的技术堆栈,专门为打造可观察的、生产就绪的分布式应用程序而设计。它通过一系列NuGet包提供支持,这些包解决了特定的云原生问题。
云原生应用程序通常由小型、互连的微服务组成,而不是一个单一的代码库。这类应用程序充分利用了云基础架构的优势,如可扩展性、弹性和管理性。分布式应用程序需要在多个节点之间通信,以便为最终用户提供快速响应,而.NET Aspire正是为此类应用而生。
为什么选择.NET Aspire?
选择.NET Aspire的原因很多,主要包括以下几点:
-
云原生特性:.NET Aspire特别适用于云原生应用,其设计理念就是为分布式系统提供可靠、可扩展和高性能的解决方案。
-
强大的观察能力:启用.NET Aspire后,可以通过仪表盘实时监控系统运行状态,方便进行性能调优和故障排查。
-
便捷的开发体验:通过NuGet包和相关工具的支持,使得集成和开发过程变得简单易行。
如何集成.NET Aspire?
以下是我在AntSK项目中集成.NET Aspire的具体步骤。
安装.NET Aspire
开始前,我们需要先安装.NET Aspire。可以通过以下命令确认当前已安装的项并进行安装:
dotnet workload list
dotnet workload install aspire
dotnet workload update
创建并配置项目
进入AntSK.AppHost目录,执行以下命令:
-
在项目中创建两个文件夹:
-
AntSK.AppHost
-
AntSK.ServiceDefaults
-
dotnet new aspire-apphost
类似地,进入AntSK.ServiceDefaults目录,执行:
dotnet new aspire-servicedefaults
-
将这两个项目添加到解决方案中,并使用Host项目引用AntSK(这是我们的Blazor Web应用,也可以是API)。
注册服务
在AntSK中,我们需要登记服务。使用以下代码:
builder.AddServiceDefaults();
此操作将成功引入Aspire。
配置日志
为了更好地监控和管理日志,可以使用Serilog。需要引入以下包:
<PackageReference Include="Serilog" Version="4.0.0-dev-02195" />
<PackageReference Include="Serilog.Sinks.Console" Version="5.1.0-dev-00943" />
<PackageReference Include="Serilog.Sinks.File" Version="5.0.1-dev-00972" />
<PackageReference Include="Serilog.Extensions.Logging" Version="8.0.1-dev-10391" />
<PackageReference Include="Serilog.Settings.Configuration" Version="8.0.1-dev-00583" />
<PackageReference Include="Serilog.Sinks.Seq" Version="8.0.0-dev-00302" />
<PackageReference Include="Serilog.Sinks.OpenTelemetry" Version="3.0.0-dev-00298" />
通过配置文件来初始化Serilog:
Log.Logger = new LoggerConfiguration()
.ReadFrom.Configuration(builder.Configuration)
.CreateLogger();
var loggerFactory = LoggerFactory.Create(builder => {
builder.ClearProviders();
builder.AddSerilog();
});
在appsettings.json中添加配置:
"Serilog": {
"Using": [ "Serilog.Sinks.Console", "Serilog.Sinks.Seq", "Serilog.Sinks.File" ],
"MinimumLevel": "Debug",
"WriteTo": [
{ "Name": "Console" },
{
"Name": "OpenTelemetry",
"Args": {
"Endpoint": "http://localhost:18889"
}
},
{
"Name": "File",
"Args": {
"path": "D:\\git\\AntBlazor\\model\\logs\\log-.txt",
"rollingInterval": "Day",
"fileSizeLimitBytes": 10485760
}
}
],
"Enrich": [ "FromLogContext", "WithMachineName", "WithThreadId" ]
}
还需要在Host项目的Properties/launchSettings.json进行修改:
{
"$schema": "https://json.schemastore.org/launchsettings.json",
"profiles": {
"http": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,
"applicationUrl": "http://localhost:18888",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development",
"DOTNET_ENVIRONMENT": "Development",
"DOTNET_DASHBOARD_OTLP_ENDPOINT_URL": "http://localhost:18889",
"DOTNET_RESOURCE_SERVICE_ENDPOINT_URL": "http://localhost:20229",
"ASPIRE_ALLOW_UNSECURED_TRANSPORT": "true"
}
}
}
}
注意,ASPIRE_ALLOW_UNSECURED_TRANSPORT需要设置为true以便在本地调试时不使用https。
启动Aspire仪表盘
完成上述步骤后,可以直接启动Host项目来启动Aspire仪表盘。
然后运行 localhost:18888就可以打开仪表盘了。
Docker化应用
为了在Docker中使用Aspire,我们的Dockerfile不需要修改,但需要在docker-compose文件中进行以下配置:
version: '3.8'
services:
aspire-dashboard:
container_name: aspire-dashboard
image: mcr.microsoft.com/dotnet/aspire-dashboard:8.0
networks:
- antsk
environment:
- DOTNET_DASHBOARD_UNSECURED_ALLOW_ANONYMOUS=true
- ASPIRE_ALLOW_UNSECURED_TRANSPORT=true
- DASHBOARD__OTLP__AUTHMODE=ApiKey
- DASHBOARD__OTLP__PRIMARYAPIKEY=antsk
- DASHBOARD__TELEMETRYLIMITS__MAXLOGCOUNT=1000
- DASHBOARD__TELEMETRYLIMITS__MAXTRACECOUNT=1000
- DASHBOARD__TELEMETRYLIMITS__MAXMETRICSCOUNT=1000
- DASHBOARD__APPLICATIONNAME=AntSKDashBoard
ports:
- 18888:18888
- 18889:18889
restart: unless-stopped
antsk:
container_name: antsk
image: registry.cn-hangzhou.aliyuncs.com/xuzeyu91/antsk:p0.3.8
ports:
- 5000:5000
networks:
- antsk
depends_on:
- antskpg
restart: always
environment:
- ASPNETCORE_URLS=http://*:5000
- ASPNETCORE_FORWARDEDHEADERS_ENABLED=true
- OTEL_DOTNET_EXPERIMENTAL_OTLP_EMIT_EXCEPTION_LOG_ATTRIBUTES=true
- OTEL_DOTNET_EXPERIMENTAL_OTLP_EMIT_EVENT_LOG_ATTRIBUTES=true
- OTEL_DOTNET_EXPERIMENTAL_OTLP_RETRY=in_memory
- OTEL_SERVICE_NAME=antsk
- OTEL_EXPORTER_OTLP_ENDPOINT=http://aspire-dashboard:18889
volumes:
- ./appsettings.json:/app/appsettings.json
- /AntSK/model:/app/model
- /AntSK/model:/root/.cache/modelscope/hub/AI-ModelScope
networks:
antsk:
external: true
效果展示
完成以上配置和部署后,您将能享受到.NET Aspire带来的强大功能,能够实时监控并分析你的应用性能。借助Aspire仪表盘,你不仅能查看详细的日志信息,还能通过各种性能指标来优化你的AI项目。
我们可以通过aspire仪表盘看到我们的log日志
以及项目的链路追踪
包括还有各种各样的指标数据,这是非常不错的
总结
通过这篇文章的介绍和指导,大家应该已经了解到.NET Aspire的强大之处以及如何将其无缝集成到你的AI项目中。.NET Aspire不仅可以提供优秀的分布式能力和监控功能,还能帮助开发者高效地进行开发和调试,是一个值得信赖的技术工具。希望大家能够通过实践,发挥Aspire的最大价值,让你的项目更上一层楼。
也欢迎大家关注我的开源项目,AntSK:
https://github.com/AIDotNet/AntSK