用途:为 ASP.NET Core 应用接入 OpenTelemetry,实现分布式追踪、指标和日志的可观测性;适用于添加追踪、配置导出器(OTLP 为主,Jaeger 原生接受 OTLP,Prometheus 需显式开启 OTLP 摄取)、为业务操作创建自定义指标与 Span,以及排查跨服务追踪上下文传播问题。不适合仅做应用级日志(用 ILogger、Serilog)、直接使用 Application Insights SDK,或需要商业厂商专有 APM SDK 的场景。
主要能力:安装核心包 OpenTelemetry.Extensions.Hosting、OpenTelemetry.Instrumentation.AspNetCore、OpenTelemetry.Instrumentation.Http 及 OpenTelemetry.Exporter.OpenTelemetryProtocol,并可按需添加 SqlClient、EntityFrameworkCore、GrpcNetClient、Runtime 等自动埋点包。在 Program.cs 中用 AddOpenTelemetry 为 Tracing、Metrics、Logging 统一配置,使用 UseOtlpExporter,默认读取 OTEL_EXPORTER_OTLP_ENDPOINT(默认 http://localhost:4317)。
使用方式:通过 ActivitySource 创建自定义 Span,名称必须与 AddSource 完全一致;通过 DI 注入 IMeterFactory 创建 Meter,名称须与 AddMeter 一致;用 Propagators.DefaultTextMapPropagator 在消息队列等非 HTTP 场景手动注入/提取上下文。日志经 WithLogging 集成后自动携带 TraceId、SpanId。
限制与注意:ActivitySource 应设为 static;不要在指标标签中使用用户 ID、请求 ID 或 UUID 等高基数数据;注意 OTLP gRPC 4317 与 HTTP 4318 的端口与协议差异,不匹配时需设置 OtlpExportProtocol.HttpProtobuf;健康检查端点可通过 Filter 排除。Console 导出器仅建议本地调试,不要用于生产。资料未提供收费、价格及具体后端部署细节。