如何在ASP.NET Core中使用OpenTelemetry追踪MySQL数据库操作并上报Jaeger?
实现MySQL操作耗时统计上报Jaeger操作流程
1. 安装对应NuGet包
根据你项目中操作MySQL的方式选择安装对应埋点包:
- 用Entity Framework Core操作MySQL:安装
OpenTelemetry.Instrumentation.EntityFrameworkCore - 用MySqlConnector原生操作MySQL:安装
OpenTelemetry.Instrumentation.MySqlConnector - 用MySql.Data原生操作MySQL:安装
OpenTelemetry.Instrumentation.MySqlData
2. 调整OpenTelemetry埋点配置
在你已有的Program.csOpenTelemetry Trace配置中,新增数据库埋点注册即可,示例如下:
var builder = WebApplication.CreateBuilder(args); // 原有服务注册(AddDbContext、AddControllers等)省略 builder.Services.AddOpenTelemetry() .WithTracing(b => b .AddAspNetCore() // 你已有的HTTP请求埋点配置 // 以下二选一,对应你用的数据库操作方式 // 选项1:EF Core 埋点配置 .AddEntityFrameworkCoreInstrumentation(opt => { // 按需开启,开启后会上报SQL语句文本,生产环境注意敏感数据泄露风险 opt.SetDbStatementForText = true; // 可选自定义新增上报标签,比如标记数据库实例 opt.EnrichWithIDbCommand = (activity, cmd) => { activity.SetTag("db.instance", "projectA_prod"); }; }) // 选项2:MySqlConnector原生操作埋点配置 // .AddMySqlConnectorInstrumentation(opt => opt.SetDbStatement = true) .AddJaegerExporter() // 你已有的Jaeger上报配置 ); // 原有中间件配置、app.Run()省略
3. 验证效果
启动项目后发起一次涉及数据库查询的请求,打开Jaeger UI查看对应Trace链路,就可以看到数据库操作对应的Span,包含操作耗时、数据库地址、库名、SQL语句(开启上报的话)等信息。
注意事项
- 生产环境如果SQL中包含用户敏感数据,建议关闭SQL语句上报配置,避免数据泄露
- 若你使用其他第三方ORM操作MySQL,没有对应官方Instrumentation包的话,可以通过拦截
IDbCommand执行逻辑手动创建Activity实现埋点
内容的提问来源于stack exchange,提问作者yusuf
相关产品推荐
相关产品推荐

