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

问题描述

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

  1. 创建 ServerOptions 以拦截响应:
var serverOptions []kithttp.ServerOption
    serverOptions = append(serverOptions,tracing.HTTPServerTrace("server trace name",global.Tracer("tracer name")))
  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()
        },)

解决方法

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

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

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...