问题描述
我需要跟踪我的服务器的响应主体,我实现了 GoKit 框架的 ServerFinalizer 但响应不存在,我如何拦截主体响应以使用 opentelemetry 生成跟踪,我的示例代码:
- 创建 ServerOptions 以拦截响应:
var serverOptions []kithttp.ServerOption
serverOptions = append(serverOptions,tracing.HTTPServerTrace("server trace name",global.Tracer("tracer name")))
- 实现 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 (将#修改为@)