如何通过Fiber中间件传递Span上下文?
解决方法
你需要把包含当前Span的上下文重新设置回Fiber的Ctx中,这样后续处理器获取上下文时,就能将当前Span作为父Span。修改后的代码如下:
testGroup := fiberServer.Group("test") testGroup.Use(func(c *fiber.Ctx) error { // 基于当前上下文创建Span,得到包含Span的新上下文p p, span := otel.Tracer("my-service").Start(c.UserContext(), "middleware") defer span.End() // 将新上下文设置回Ctx,传递给后续处理器 c.SetUserContext(p) // 执行你的业务逻辑 /// some work return c.Next() })
关键说明
otel.Tracer().Start()方法会返回一个包含新Span的上下文(即变量p),这个上下文是原上下文的衍生版本,携带了当前Span的追踪信息。- 调用
c.SetUserContext(p)后,后续的处理器通过c.UserContext()获取的就是这个新上下文,当它们创建自己的Span时,OpenTelemetry会自动识别这个上下文中的Span作为父Span,实现追踪链路的传递。
内容的提问来源于stack exchange,提问作者vovanchello
相关产品推荐
相关产品推荐

