Python opencensus flask 将 request-id 标头设置为在 FlaskMiddleware/AzureLogHandler 中设置

问题描述

我使用 Azure Application Insights 进行日志记录。我正在尝试设置一个环境,让我的所有日​​志都具有相同的跟踪 ID/请求 ID 以确保可见性。

documentation for logging requests 中,通过使用以下代码

from flask import Flask
from opencensus.ext.azure.trace_exporter import AzureExporter
from opencensus.ext.flask.flask_middleware import FlaskMiddleware
from opencensus.trace.samplers import ProbabilitySampler

app = Flask(__name__)
middleware = FlaskMiddleware(
    app,exporter=AzureExporter(connection_string="InstrumentationKey=<your-ikey-here>"),sampler=ProbabilitySampler(rate=1.0),)

@app.route('/')
def hello():
    return 'Hello World!'

if __name__ == '__main__':
    app.run(host='localhost',port=8080,threaded=True)

请求已成功登录到 Azure Monitor,其请求 ID 为 operation_Id。

我可以使用 traces 添加具有相同 operation_Id 的日志,并且我将能够查看某些请求中的跟踪信息:

from opencensus.ext.azure.trace_exporter import AzureExporter
from opencensus.ext.azure.log_exporter import AzureLogHandler
from opencensus.ext.flask.flask_middleware import FlaskMiddleware
from opencensus.trace.samplers import ProbabilitySampler
from opencensus.trace import config_integration
from opencensus.trace.samplers import AlwaysOnSampler
from opencensus.trace.tracer import Tracer

config_integration.trace_integrations(['logging'])
logging.basicConfig(format='%(asctime)s traceId=%(traceId)s spanId=%(spanId)s %(message)s')
tracer = Tracer(sampler=AlwaysOnSampler())

logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)
logger.addHandler(AzureLogHandler(
    connection_string='InstrumentationKey=...')
)

app = Flask(__name__)
middleware = FlaskMiddleware(
    app,exporter=AzureExporter(connection_string="InstrumentationKey=..."),)

但是如何将这个记录在请求和跟踪中的跟踪 ID 作为响应中的用户头写入?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)