如何在Dapr中使用的W3C跟踪上下文
如何在Dapr中使用的W3C跟踪上下文
内容节选自:https://docs.dapr.io/developing-applications/building-blocks/observability/w3c-tracing/w3c-tracing-howto/
使用Dapr的W3C追踪标准。
如何从响应中检索跟踪上下文。
注意:在Dapr SDK中没有暴露的帮助方法来传播和检索跟踪上下文。你需要使用http/gRPC客户端通过http头和gRPC元数据来传播和检索跟踪头。
在Go中检索跟踪上下文
对于HTTP调用
OpenCensus Go SDK提供ochttp包,它提供了从http响应中获取跟踪上下文的方法。
要从HTTP响应中获取跟踪上下文,你可以这样:
f := tracecontext.HTTPFormat{}
sc, ok := f.SpanContextFromRequest(req)
对于gRPC调用
要在gRPC调用返回时检索跟踪上下文头,可以将响应头引用作为gRPC调用选项传递,该选项包含响应头。
var responseHeader metadata.MD
// Call the InvokeService with call option
// grpc.Header(&responseHeader)
client.InvokeService(ctx, &pb.InvokeServiceRequest{
Id: "client",
Message: &commonv1pb.InvokeRequest{
Method: "MyMethod",
ContentType: "text/plain; charset=UTF-8",
Data: &any.Any{Value: []byte("Hello")},
},
},
grpc.Header(&responseHeader))
如何在请求中传播跟踪上下文
注意:在Dapr SDK中没有暴露的帮助方法来传播和检索跟踪上下文。你需要使用http/gRPC客户端通过http头和gRPC元数据来传播和检索跟踪头。
在Go中传递跟踪上下文
对于HTTP调用
OpenCensus Go SDK提供ochttp包,提供在http请求中附加跟踪上下文的方法。
f := tracecontext.HTTPFormat{}
req, _ := http.NewRequest("GET", "http://localhost:3500/v1.0/invoke/mathService/method/api/v1/add", nil)
traceContext := span.SpanContext()
f.SpanContextToRequest(traceContext, req)
对于gRPC调用
traceContext := span.SpanContext()
traceContextBinary := propagation.Binary(traceContext)
然后你可以通过gRPC元数据用 grpc-trace-bin
头传递跟踪上下文。
ctx = metadata.AppendToOutgoingContext(ctx, "grpc-trace-bin", string(traceContextBinary))
…