python - Python Open Telemtry - 获取跟踪 ID
问题描述
假设我有一个使用 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?我想将它记录到日志文件中。
谢谢
解决方案
您可以获取跨度上下文,然后访问跟踪 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
推荐阅读
- azure-iot-hub - 从预配设备上的 UWP 应用获取 Azure IOT Hub 连接字符串
- sql - 删除单行中的重复值
- javascript - 使用 npm-net 模块的 javascript 客户端服务器程序
- regex - 在一次匹配中从句子中提取所有单个字符
- javascript - 如何在我的代码中添加 if else 语句?
- python - 最后一个 readline 函数一直在工作,直到最近出现语法错误
- c# - 如何增加派生类的值
- haskell - 如何让 Haskell 中的代码看起来很优雅?
- amazon-web-services - 如何使 EC2 用户数据脚本在 RDP 进入实例时可见的打开窗口中运行?
- python - 我找不到在新图像零点上拟合轮廓的方法