如何从New Relic事务获取TraceId并返回给Rails客户端?
在Rails应用中获取New Relic TraceID并返回为响应头
问题描述
我有一个运行New Relic Ruby Agent v7.2版本的Rails应用,已启用分布式追踪功能。启用该功能后,New Relic会为每个被记录的API调用创建TraceId属性,我可在仪表盘查看该属性,但想知道如何获取该TraceId并将其作为响应头返回给调用我API的客户端。
我希望在application_controller.rb中实现类似如下的逻辑:
after_action :set_trace_id_header # ... 其他代码 ... def set_trace_id_header response.headers["NR-TraceId"] = get_nr_trace_id end def get_nr_trace_id # NewRelic::Agent.something_to_get_traceid_from_current_transaction? end
解决方案
在New Relic Ruby Agent v7.x版本中,可以通过当前事务对象直接获取TraceId,修改后的代码如下:
after_action :set_trace_id_header # ... 其他代码 ... def set_trace_id_header response.headers["NR-TraceId"] = get_nr_trace_id end def get_nr_trace_id # 获取当前New Relic事务对象,仅在请求上下文内有效 transaction = NewRelic::Agent.current_transaction transaction&.trace_id end
说明
NewRelic::Agent.current_transaction会返回当前正在处理的请求对应的事务对象,仅在Rails请求的生命周期内可用- 事务对象的
trace_id方法直接返回分布式追踪的TraceId字符串 - 确保你的
newrelic.yml中已经开启了分布式追踪:distributed_tracing.enabled: true
内容的提问来源于stack exchange,提问作者Siddhesh Acharekar
相关产品推荐
相关产品推荐

