购物车服务
该服务负责维护用户所放入购物车中的商品。它与 Redis 缓存服务进行交互,以便快速访问购物车数据。
注意 .NET 的 OpenTelemetry 使用
System.Diagnostic.DiagnosticSource
库作为其 API,而非标准的 OpenTelemetry Traces 和 Metrics API。 日志方面则使用Microsoft.Extensions.Logging.Abstractions
库。
跟踪
初始化跟踪
OpenTelemetry 在 .NET 依赖注入容器中进行配置。使用 AddOpenTelemetry()
构建器方法来配置所需的仪表库,添加导出器并设置其他选项。对导出器和资源属性的配置是通过环境变量进行的。
Action<ResourceBuilder> appResourceBuilder =
resource => resource
.AddDetector(new ContainerResourceDetector());
builder.Services.AddOpenTelemetry()
.ConfigureResource(appResourceBuilder)
.WithTracing(tracerBuilder => tracerBuilder
.AddRedisInstrumentation(
cartStore.GetConnection(),
options => options.SetVerboseDatabaseStatements = true)
.AddAspNetCoreInstrumentation()
.AddGrpcClientInstrumentation()
.AddHttpClientInstrumentation()
.AddOtlpExporter());
为自动仪表化的跟踪添加属性
在自动仪表化代码的执行过程中,您可以从上下文中获取当前跟踪(activity)。
var activity = Activity.Current;
使用活动对象上的 SetTag
方法向跟踪(activity)添加属性(在 .NET 中称为标签)。在 services/CartService.cs
文件的 AddItem
函数中,会向自动仪表化的跟踪添加多个属性。
activity?.SetTag("app.user.id", request.UserId);
activity?.SetTag("app.product.quantity", request.Item.Quantity);
activity?.SetTag("app.product.id", request.Item.ProductId);
添加跟踪事件
使用活动对象上的 AddEvent
方法即可添加跟踪(activity)事件。在 services/CartService.cs
文件的 GetCart
函数中,会添加一个跟踪事件。
activity?.AddEvent(new("Fetch cart"));
指标
初始化指标
和配置 OpenTelemetry 跟踪类似,.NET 依赖注入容器需要调用 AddOpenTelemetry()
。该构建器配置所需的仪表库、导出器等。
Action<ResourceBuilder> appResourceBuilder =
resource => resource
.AddDetector(new ContainerResourceDetector());
builder.Services.AddOpenTelemetry()
.ConfigureResource(appResourceBuilder)
.WithMetrics(meterBuilder => meterBuilder
.AddRuntimeInstrumentation()
.AddAspNetCoreInstrumentation()
.AddOtlpExporter());
日志
在 .NET 依赖注入容器的 LoggingBuilder
级别上调用 AddOpenTelemetry()
即可配置日志。该构建器配置所需的选项、导出器等。
builder.Logging
.AddOpenTelemetry(options => options.AddOtlpExporter());
最后修改 December 13, 2023: improve glossary translation (46f8201b)