OpenTracing Python请求:传播范围

2024-05-29 07:48:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个Python Flask应用程序,它使用requests库。我正在尝试在应用程序中实现OpenTracing。简化版本为:

from flask_opentracing import FlaskTracer
from flask import Flask
from jaeger_client import Config
from opentracing_instrumentation.client_hooks import install_all_patches
from os import getenv
import requests

JAEGER_HOST = getenv('JAEGER_HOST', 'localhost')


def initialise_tracer():
    config = Config(
        config={
            'local_agent': {
                'reporting_host': 'jaeger'
            }
        },
        service_name='opentracing_test',
        validate=True
    )
    return config.initialize_tracer()


app = Flask(__name__)
tracer = FlaskTracer(initialise_tracer, trace_all_requests=True, app=app)
install_all_patches()


@app.route('/foo')
def foo():
    r = requests.get('http://localhost/bar')
    return 'foo : ' + r.text


@app.route('/bar')
def bar():
    return 'bar'


if __name__ == '__main__':
    app.run(debug=True, host='0.0.0.0', port=80)

由于将trace_all_requests赋给FlaskTracer,所以跟踪所有端点。使用requests库发出的所有请求都将被跟踪,因为install_all_patches()来自{}。在

我的'/foo'端点向'/bar'发出请求。当我访问'/foo'端点并查看跟踪时,我可以看到两个独立的跟踪:一个只包含'/foo',另一个同时包含requestsGET和对{}的调用。我本以为跨距会在整个进程中传播,因此我应该看到一个带有'/foo'->;GET->;'/bar'的跟踪。在

是否需要手动设置每个requests上的头来传递跨距?看起来这正是requests猴子补丁应该做的。。。在


Tags: installfromimportconfigappflaskfoodef

热门问题