在我的golang应用程序中,我使用otelmux
中间件和ddotel
跟踪器提供程序来检测OTEL跟踪中间件:
package tracing
import (
"github.com/gorilla/mux"
"go.opentelemetry.io/contrib/instrumentation/github.com/gorilla/mux/otelmux"
ddotel "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/opentelemetry"
"gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer"
)
// Middleware returns a tracing middleware that will add a span for each request.
func Middleware(t *TraceProvider) mux.MiddlewareFunc {
sampler := tracer.NewRateSampler(0.1)
provider := ddotel.NewTracerProvider(
tracer.WithSampler(sampler),
tracer.WithRuntimeMetrics(),
)
return otelmux.Middleware("my-service", otelmux.WithTracerProvider(provider))
}
字符串
无论何时将跟踪附加到请求(考虑到采样率),我都希望从根跨度中提取跟踪ID,这样我就可以将其注入到日志记录API中,以便将该请求的日志与同一请求的跟踪关联起来。
到目前为止,我还没有找到一个直接从请求上下文中获取跟踪ID的方法。
如何提取跟踪ID?
1条答案
按热度按时间a5g8bdjr1#
感谢@hamed-n评论的最佳解决方案:
有一个函数可以从跟踪包中的span上下文中提取跟踪ID:“go.opentelemetry.io/otel/trace“:
字符串
在我的例子中,由于我使用的提供程序是DataDog,我必须将跟踪ID转换为uint 64 big endian:
型