Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 获取已发送请求的跟踪ID_Python_Grpc_Zipkin_Opentracing_Jaeger - Fatal编程技术网

Python 获取已发送请求的跟踪ID

Python 获取已发送请求的跟踪ID,python,grpc,zipkin,opentracing,jaeger,Python,Grpc,Zipkin,Opentracing,Jaeger,我正在使用GRPC的开放跟踪Python库,并尝试在这里构建示例脚本: 一旦我通过截获的通道发送了一个请求,我如何找到该请求的跟踪id值?我想用它来查看Jaeger UI中的跟踪数据。如果我错了,请纠正我。如果您指的是如何在服务器端找到跟踪id,那么您可以尝试通过访问OpenTracing span。我想,跟踪id应该是其中的一个标记。我错过了一个关键的文档。为了获得跟踪ID,必须在客户端创建一个范围。此范围将具有可用于检查Jaeger UI中数据的跟踪ID。必须通过ActiveSpanSour

我正在使用GRPC的开放跟踪Python库,并尝试在这里构建示例脚本:


一旦我通过截获的通道发送了一个请求,我如何找到该请求的跟踪id值?我想用它来查看Jaeger UI中的跟踪数据。

如果我错了,请纠正我。如果您指的是如何在服务器端找到跟踪id,那么您可以尝试通过访问OpenTracing span。我想,跟踪id应该是其中的一个标记。

我错过了一个关键的文档。为了获得跟踪ID,必须在客户端创建一个范围。此范围将具有可用于检查Jaeger UI中数据的跟踪ID。必须通过
ActiveSpanSource
实例将span添加到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)

当然,您可以使用语句切换
的顺序,以便在GRPC通道之后创建span。那部分没什么区别。

我想我不清楚。发送请求后,我需要客户端的跟踪ID。我不是OpenTracing专家。通过阅读其代码,我发现在客户端,OpenTracing拦截器为每个gRPC调用提供了跟踪范围,因此您可以通过
tracer.active\u span
访问当前范围。然后,您可以访问span对象中的属性。只有当用户提供
ActiveSpanSource
时,才会出现这种情况,而我没有这样做(这意味着TraceID是由其他机制生成的)。您认为可以在gRPC拦截器中获取跟踪ID,然后将其保存到线程局部变量或全局变量中吗?一旦gRPC调用开始,你就可以尝试获取跟踪ID。我找到了。我会用另一个答案来回答:)