.NET Core OpenTelemetry

在开发 .NET Core 微服务时有一个比较麻烦的事情就是关联服务调用的日志,各个服务的日志已经通过 ELK 统一收集了,但是还无法关联同一次请求中调用的多个服务的日志。

比如 一个请求调用 A 服务,然后 A 服务又调用了 B 服务。现在 A 服务和 B 服务的日志没有办法关联起来,不知道哪些日志是属于哪一个请求的。单个服务中的日志可以通过线程上下文或者类似的处理关联,但是跨服务的就比较麻烦了。

性能监控中也有类似的需求,每个系统监控的框架都有一套自己的跟踪机制。比如曾经使用过的 SkyWalking 就可以获取到一个全局的跟踪 ID(GlobalTraceId),可惜的是后来版本升级后就获取不到了。再比如公司正在使用的 听云 ,也有类似的 TracingIdRequestId ,可惜只能在监控系统中看到,代码中无法获取。