docs: 新增OpenTelemetry接入指引

This commit is contained in:
2025-12-02 13:31:10 +08:00
parent 753c10c492
commit bd9a67d776
2 changed files with 41 additions and 1 deletions

View File

@@ -21,7 +21,7 @@
- [x] 商户/门店/商品/订单/支付/配送等实体与仓储实现完成,提供 CRUD + 查询。
- [x] 系统参数、默认租户、管理员账号、基础字典的种子脚本可重复执行。
## 3. 稳定性与质量
## 3. 稳定性与质量(低优先级)
- [ ] Dictionary/Identity/Storage/Sms/Messaging/Scheduler 的 xUnit+FluentAssertions 单元测试框架搭建。
- [ ] WebApplicationFactory + Testcontainers 拉起 Postgres/Redis/RabbitMQ 的集成测试模板。
- [ ] .editorconfig、.globalconfig、Roslyn 分析器配置仓库通用规则并启用 CI 检查。

View File

@@ -0,0 +1,40 @@
# 14_OpenTelemetry 接入指引
> 现状Admin/Mini/User API 已集成 OTel 埋点,可导出到 Collector/控制台/文件日志,默认关闭 OTLP 导出。
## 1. 依赖与版本
- NuGet`OpenTelemetry.Extensions.Hosting``OpenTelemetry.Instrumentation.AspNetCore``OpenTelemetry.Instrumentation.Http``OpenTelemetry.Instrumentation.EntityFrameworkCore``OpenTelemetry.Instrumentation.Runtime``OpenTelemetry.Exporter.OpenTelemetryProtocol``OpenTelemetry.Exporter.Console`
- 当前 EF Core instrumentation 由 NuGet 回退到 `1.10.0-beta.1`(会提示 NU1603/NU1902待可用时统一升级到稳定版以消除告警。
## 2. 程序内配置Admin/Mini/User API
- Resource`ServiceName` 分别为 `TakeoutSaaS.AdminApi|MiniApi|UserApi``ServiceInstanceId = Environment.MachineName`
- Tracing开启 ASP.NET Core、HttpClient、EF Core禁用 SQL 文本、Runtime采样器默认 `ParentBased + AlwaysOn`
- Metrics开启 ASP.NET Core、HttpClient、Runtime。
- Exporter
- OTLP可选读取 `Otel:Endpoint`,非空时启用。
- Console`Otel:UseConsoleExporter`(默认 Dev 开启Prod 关闭)。
- 日志Serilog 输出 Console + 文件(按天滚动,保留 7 天),模板已包含 TraceId/SpanId通过 Enrich FromLogContext
## 3. appsettings 配置键
```json
"Otel": {
"Endpoint": "", // 为空则不推 OTLP例如 http://otel-collector:4317
"Sampling": "ParentBasedAlwaysOn",
"UseConsoleExporter": true // Dev 默认 trueProd 建议 false
}
```
- 环境变量可覆盖:`OTEL_SERVICE_NAME``OTEL_EXPORTER_OTLP_ENDPOINT` 等。
## 4. Collector/后端接入建议
- Collector 监听 4317/4318gRPC/HTTP OTLP做采样/脱敏/分流,再转发 Jaeger/Tempo/ELK/Datadog 等。
- 生产注意:限制导出 SQL 文本(已关闭)、对敏感字段脱敏,必要时在 Collector 做 TraceIdRatioBased 采样以控量。
## 5. 验证步骤
1) 开启 `Otel:UseConsoleExporter=true`,本地运行 API观察控制台是否输出 Span/Metric。
2) 配置 `Otel:Endpoint=http://localhost:4317` 并启动 Collector使用 Jaeger/Tempo UI 或 `curl http://localhost:4318/v1/traces` 验证链路。
3) 文件日志:查看 `logs/admin-api-*.log` 等,确认包含 TraceId/SpanId。
## 6. 后续工作
- 待 NuGet 源更新后,升级到稳定版 OTel 包并消除 NU1603/NU1902 告警。
- 如需采集日志到 ELK可直接用 Filebeat/Vector 读取 `logs/*.log` 推送,无需改代码。
- 如需控制采样率或关闭某些 instrumentation调整 appsettings 中的 Sampling/开关后重启即可。