MoneyTree.Telemetry 1.0.5

MoneyTree.Telemetry 可观测性

📋 概述

MoneyTree.Telemetry 基于 OpenTelemetry SDK 薄封装,提供开箱即用的可观测性能力,涵盖 Traces(分布式追踪)、Metrics(指标采集)、Logs(结构化日志)三大支柱,并自动注入 TenantId、UserId、CorrelationId 等业务上下文。

属性 说明
NuGet 包 MoneyTree.Telemetry
外部依赖 MoneyTree.CoreOpenTelemetry SDK
定位 OpenTelemetry 薄封装,开箱即用

🏗️ 项目文件结构

MoneyTree.Telemetry/
├── MoneyTree.Telemetry.csproj
├── GlobalUsings.cs
├── Abstractions/
│   └── ITelemetryProvider.cs               # 遥测提供者接口
├── Core/
│   ├── TelemetryOptions.cs                 # 遥测配置选项
│   └── TelemetryDefaults.cs               # 遥测默认配置
├── Exporters/
│   ├── ConsoleTelemetryExporter.cs         # 控制台导出器
│   ├── JaegerTelemetryExporter.cs          # Jaeger 导出器
│   └── OpenTelemetryCollectorExporter.cs   # OTel Collector 导出器
├── Enrichers/
│   ├── TenantIdEnricher.cs                 # 租户 ID 增强器
│   ├── CorrelationIdEnricher.cs            # 关联 ID 增强器
│   └── ServiceInfoEnricher.cs              # 服务信息增强器
├── Instrumentation/
│   ├── AspNetCoreInstrumentation.cs        # ASP.NET Core 仪表
│   ├── EFCoreInstrumentation.cs            # EF Core 仪表
│   ├── HttpClientInstrumentation.cs        # HttpClient 仪表
│   └── CacheInstrumentation.cs            # 缓存仪表
├── Middleware/
│   └── TelemetryMiddleware.cs              # 遥测中间件
└── Extensions/
    ├── TelemetryBuilder.cs                 # 流畅配置构造器
    └── TelemetryExtensions.cs             # DI 注册扩展

📊 三大支柱

支柱 能力 说明
Traces 跨服务追踪 自动注入 TenantId、UserId、CorrelationId
Metrics 关键指标采集 HTTP/DB/Cache 指标自动采集
Logs 结构化日志 与 NLog 联动,自动注入 TraceId

📤 导出器

导出器 适用场景 说明
Console 开发调试 输出到控制台,方便本地开发
Jaeger 分布式追踪可视化 查看服务调用链
OpenTelemetry Collector 生产标准方案 统一收集后转发到各类后端

🚀 快速开始

基础配置

// Program.cs
using MoneyTree.Telemetry.Extensions;

var builder = WebApplication.CreateBuilder(args);

builder.Services.ConfigureMoneyTreeTelemetry(t =>
{
    t.WithServiceName("OrderService")
     .WithServiceVersion("2.0.0")
     .WithEnvironment("Production")
     .UseConsole()
     .UseOpenTelemetryCollector("http://otel-collector:4317")
     .WithTenantEnricher()
     .WithCorrelationIdEnricher()
     .WithSampleRate(0.5);
});

var app = builder.Build();
app.UseMoneyTreeTelemetry();
app.Run();

生产环境配置

builder.Services.ConfigureMoneyTreeTelemetry(t =>
{
    t.WithServiceName("OrderService")
     .WithEnvironment("Production")
     .UseOpenTelemetryCollector()
     .WithTenantEnricher()
     .WithSensitivePaths("/api/auth/", "/api/payment/card");
});

📈 自动仪表

仪表模块 采集内容 说明
AspNetCoreInstrumentation HTTP 请求耗时、状态码、路由 自动启用
EFCoreInstrumentation SQL 查询耗时、查询语句 自动启用
HttpClientInstrumentation 外部 HTTP 调用耗时、目标地址 自动启用
CacheInstrumention 缓存命中率、操作耗时 自动启用

🏷️ 上下文增强器

增强器自动为所有遥测数据附加业务上下文:

增强器 注入字段 说明
TenantIdEnricher tenant.id 多租户场景追踪
CorrelationIdEnricher correlation.id 跨服务请求关联
ServiceInfoEnricher service.name, service.version 服务元信息

🔒 生产安全

敏感路径屏蔽

t.WithSensitivePaths(
    "/api/auth/login",
    "/api/auth/register",
    "/api/payment/card"
);

命中路径的 DisplayNamehttp.targethttp.routeurl.path 全部替换为 SENSITIVE_PATH

SensitiveDataProcessor(自动脱敏)

框架内置 BaseProcessor<Activity> 在 Span 导出前自动处理以下脱敏:

脱敏项 处理方式
HTTP 请求头 移除 AuthorizationCookieSet-CookieX-Api-KeyX-Auth-Token
QueryString 参数 ?token=xxx?token=[REDACTED](token/key/secret/password/sign 等)
错误消息 含连接字符串/密码关键词时替换为 [SECURITY_REDACTED];超过 500 字符自动截断

可通过 Builder API 扩展:

t.WithSensitiveHeaders("X-Custom-Token")
 .WithSensitiveQueryParams("custom_secret");

网络层防护(运维)

端口 绑定 防火墙
OTLP gRPC :4317 内网 IP 仅微服务子网
OTLP HTTP :4318 内网 IP 仅微服务子网
Dashboard :18888 127.0.0.1 或 VPN 禁止公网
Consul :8500 内网 IP + ACL Token 仅微服务子网

Showing the top 20 packages that depend on MoneyTree.Telemetry.

Packages Downloads
MoneyTree.ServiceDefaults
MoneyTree Framework 服务默认配置。快速落地项目的默认入口,集成弹性策略 + 健康检查 + 可选遥测/服务发现。
1

Version Downloads Last updated
1.0.5 1 7/21/2026
1.0.3 1 7/12/2026