0

假设我有一个使用 Open Telemtry 分布式跟踪的 Python 应用程序:

from flask import Flask, jsonify, request
import tracer, connector, logger, metricer

app = Flask(__name__)


metricer.instrument(app)
tracer.instrument(app)
logger.instrument(app)


@app.route('/api/v1/participants', methods=["GET"])
def get_participants():

        with tracer.start_span("dbquery"):
            try:
                participants = connector.query()
                return jsonify(participants)
            except:
                logger.log("DB query has failed")
                return "Internal Server Error", 500

if __name__ == "__main__":
    app.run(host='0.0.0.0', port=8080, debug=False)

在这种情况下如何获取跟踪 ID?我想将它记录到日志文件中。

谢谢

4

1 回答 1

1

您可以获取跨度上下文,然后访问跟踪 ID。在你的情况下,它会是

...
        with tracer.start_span("dbquery") as sp:
            try:
                participants = connector.query()
                return jsonify(participants)
            except:
                logger.log("DB query has failed %s", sp.get_span_context().trace_id)
                return "Internal Server Error", 500
...

附带说明,如果您想在日志中自动注入信息,例如跟踪 ID、跨度 ID,并且您使用标准 python 日志记录模块,您可能需要使用https://opentelemetry-python-contrib.readthedocs.io/en/latest/仪表/记录/记录.html

于 2021-05-19T14:32:42.687 回答