我运行的是Opentelemetry 0.18rc1,我的应用程序运行得很好。
我使用W3C跟踪上下文规范进行上下文传播。对于注入和提取,我使用了TraceContextTextMapPropagator
from opentelemetry.trace.propagation.tracecontext import TraceContextTextMapPropagator
from opentelemetry.context import get_current
prop = TraceContextTextMapPropagator()
carrier = {}
prop.inject(set_in_carrier=dict.__setitem__, carrier=carrier, context=get_current())对于下一个微服务中的提取,我使用:
from opentelemetry.trace.propagation.tracecontext import TraceContextTextMapPropagator
from opentelemetry.propagators import textmap
prop = TraceContextTextMapPropagator()
carrier_getter = textmap.DictGetter()
context = prop.extract(carrier_getter, request.headers)当我试图升级到最新的opentelemetry 1.4.0版本时,我的注入和提取方法停止工作。新版本中似乎删除了DictGetter()类,所以我不知道如何在extract方法中设置getter参数。此外,在inject方法中,set_in_carrier被替换为setter参数,我也不确定如何设置这个参数。
如何实现opentelemetry 1.4.0 for W3C Trace Context规范中的Inject和Extract方法?
发布于 2021-07-23 16:25:41
set_in_carrier被称为Setter的东西取代,DefaultSetter实现了在类似字典的载体中设置值(例如,HTTP报头)。您不需要显式地传递当前上下文,因为如果不传递任何上下文,它将获取当前上下文。并且注入到载体中将被简化为
from opentelemetry.trace.propagation.tracecontext import TraceContextTextMapPropagator
prop = TraceContextTextMapPropagator()
carrier = {}
prop.inject(carrier=carrier)当你提取它的时候
from opentelemetry.trace.propagation.tracecontext import TraceContextTextMapPropagator
prop = TraceContextTextMapPropagator()
context = prop.extract(carrier=request.headers)这是一个工作示例,当注入和提取发生在同一个文件中时,但在现实世界中,它通常发生在不同的服务中。
from opentelemetry import trace
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import (BatchSpanProcessor,
ConsoleSpanExporter)
from opentelemetry.trace.propagation.tracecontext import \
TraceContextTextMapPropagator
trace.set_tracer_provider(TracerProvider())
trace.get_tracer_provider().add_span_processor(BatchSpanProcessor(ConsoleSpanExporter()))
tracer = trace.get_tracer(__name__)
prop = TraceContextTextMapPropagator()
carrier = {}
# Injecting
with tracer.start_as_current_span("first-span") as span:
prop.inject(carrier=carrier)
print("Carrier after injecting span context", carrier)
# Extracting
ctx = prop.extract(carrier=carrier)
with tracer.start_as_current_span("next-span", context=ctx):
passhttps://stackoverflow.com/questions/68494838
复制相似问题