FastAPI接入New Relic在Docker Compose运行时trace缓存错误如何解决?
错误原因
该报错为New Relic Python代理的链路追踪缓存冲突,同一个线程ID被检测到存在未结束的活跃追踪记录,通常出现在Gunicorn + Uvicorn ASGI异步工作进程的启动模式下,使用newrelic-admin run-program全局启动代理时,多进程fork会复制父进程的追踪上下文,导致子进程上下文残留冲突。
解决方案
方案1:调整New Relic初始化方式(最有效)
- 移除启动命令中的
newrelic-admin run-program前缀,修改后的启动命令为:
gunicorn main:app -w 4 -k uvicorn.workers.UvicornWorker -b 0.0.0.0:8000- 在FastAPI入口文件
main.py的**最顶部(所有其他导入语句之前)**添加New Relic手动初始化代码:
import newrelic.agent newrelic.agent.initialize("newrelic.ini")- 移除启动命令中的
方案2:调整New Relic配置参数
在newrelic.ini配置文件中添加如下配置,禁用异步上下文跨线程传播、优化追踪缓存清理策略:[newrelic] # 原有配置保持不变,新增以下参数 asyncio_tracer.propagate_context = false trace_cache.ttl = 30 transaction_tracer.stack_trace_threshold = 0.5方案3:升级New Relic代理版本
低于7.10.0版本的New Relic Python代理存在已知的异步上下文处理bug,升级到最新稳定版即可解决:pip install --upgrade newrelic方案4:排查重复初始化问题
确认Docker Compose环境变量、配置文件中没有重复配置New Relic license、应用名等参数,避免代理被多次初始化。
内容的提问来源于stack exchange,提问作者Sina Mehrabi
相关产品推荐
相关产品推荐

