获取已发送请求的跟踪 ID
get trace ID of sent request
我正在为 GRPC 使用 Open Tracing Python 库,并尝试在此处构建示例脚本:https://github.com/opentracing-contrib/python-grpc/blob/master/examples/trivial/trivial_client.py.
通过拦截通道发送请求后,如何找到请求的 trace-id 值?我想用它来查看 Jaeger UI.
中的跟踪数据
如果我错了,请纠正我。如果你的意思是如何在服务器端找到trace-id,你可以尝试通过get_active_span访问OpenTracing span。我想trace-id应该是里面的标签之一。
我遗漏了一份关键文档。为了获得跟踪 ID,您必须在客户端创建一个跨度。此跨度将具有可用于检查 Jaeger UI 中数据的跟踪 ID。跨度必须通过 ActiveSpanSource
实例添加到 GRPC 消息中。
# opentracing-related imports
from grpc_opentracing import open_tracing_client_interceptor, ActiveSpanSource
from grpc_opentracing.grpcext import intercept_channel
from jaeger_client import Config
# dummy class to hold span data for passing into GRPC channel
class FixedActiveSpanSource(ActiveSpanSource):
def __init__(self):
self.active_span = None
def get_active_span(self):
return self.active_span
config = Config(
config={
'sampler': {
'type': 'const',
'param': 1,
},
'logging': True,
},
service_name='foo')
tracer = config.initialize_tracer()
# ...
# In the method where GRPC requests are sent
# ...
active_span_source = FixedActiveSpanSource()
tracer_interceptor = open_tracing_client_interceptor(
tracer,
log_payloads=True,
active_span_source=active_span_source)
with tracer.start_span('span-foo') as span:
print(f"Created span: trace_id:{span.trace_id:x}, span_id:{span.span_id:x}, parent_id:{span.parent_id}, flags:{span.flags:x}")
# provide the span to the GRPC interceptor here
active_span_source.active_span = span
with grpc.insecure_channel(...) as channel:
channel = intercept_channel(channel, tracer_interceptor)
当然,您可以切换 with
语句的顺序,以便在 GRPC 通道之后创建跨度。那部分没有任何区别。
我正在为 GRPC 使用 Open Tracing Python 库,并尝试在此处构建示例脚本:https://github.com/opentracing-contrib/python-grpc/blob/master/examples/trivial/trivial_client.py.
通过拦截通道发送请求后,如何找到请求的 trace-id 值?我想用它来查看 Jaeger UI.
中的跟踪数据如果我错了,请纠正我。如果你的意思是如何在服务器端找到trace-id,你可以尝试通过get_active_span访问OpenTracing span。我想trace-id应该是里面的标签之一。
我遗漏了一份关键文档。为了获得跟踪 ID,您必须在客户端创建一个跨度。此跨度将具有可用于检查 Jaeger UI 中数据的跟踪 ID。跨度必须通过 ActiveSpanSource
实例添加到 GRPC 消息中。
# opentracing-related imports
from grpc_opentracing import open_tracing_client_interceptor, ActiveSpanSource
from grpc_opentracing.grpcext import intercept_channel
from jaeger_client import Config
# dummy class to hold span data for passing into GRPC channel
class FixedActiveSpanSource(ActiveSpanSource):
def __init__(self):
self.active_span = None
def get_active_span(self):
return self.active_span
config = Config(
config={
'sampler': {
'type': 'const',
'param': 1,
},
'logging': True,
},
service_name='foo')
tracer = config.initialize_tracer()
# ...
# In the method where GRPC requests are sent
# ...
active_span_source = FixedActiveSpanSource()
tracer_interceptor = open_tracing_client_interceptor(
tracer,
log_payloads=True,
active_span_source=active_span_source)
with tracer.start_span('span-foo') as span:
print(f"Created span: trace_id:{span.trace_id:x}, span_id:{span.span_id:x}, parent_id:{span.parent_id}, flags:{span.flags:x}")
# provide the span to the GRPC interceptor here
active_span_source.active_span = span
with grpc.insecure_channel(...) as channel:
channel = intercept_channel(channel, tracer_interceptor)
当然,您可以切换 with
语句的顺序,以便在 GRPC 通道之后创建跨度。那部分没有任何区别。