如何使用 Opentelemetry 使用 GoKit 和 ServerFinalizer 跟踪身体响应?

问题描述

我需要跟踪我的服务器的响应主体,我实现了 GoKit 框架的 ServerFinalizer 但响应不存在,我如何拦截主体响应以使用 opentelemetry 生成跟踪,我的示例代码

  1. 创建 ServerOptions 以拦截响应:
var serverOptions []kithttp.ServerOption
    serverOptions = append(serverOptions,tracing.HTTPServerTrace("server trace name",global.Tracer("tracer name")))
@H_502_8@
  1. 实现 serverFinalizer:
serverFinalizer := kithttp.ServerFinalizer(
        func(ctx context.Context,code int,req *http.Request) {
            attrs,entries,spanCtx := httptrace.Extract(ctx,req)
                ctx = trace.ContextWithRemoteSpanContext(ctx,spanCtx)
                // Apply the correlation context tags to the request context.
                req = req.WithContext(correlation.ContextWithMap(ctx,correlation.NewMap(correlation.MapUpdate{
                    MultiKV: entries,})))

                _,span := tracer.Start(
                    req.Context(),os.Getenv("response"),trace.WithAttributes(attrs...),)

                span.AddEvent(ctx,"Response")
                span.SetAttribute("Response Headers",kithttp.ContextKeyResponseHeaders)
                span.SetAttribute("Response body","Todo")
                span.SetAttribute("HTTPStatusCode",code)
                defer span.End()
        },)
@H_502_8@

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)