You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

New Relic分布式追踪中传递自定义属性的技术咨询

关于New Relic自定义属性的问题解答

问题1:UI层设置的自定义属性是否自动传递到所有事务跨度?

不会自动传递。浏览器端(ReactJS UI)通过newrelic.setCustomAttribute()设置的属性仅会附加在前端的New Relic事务和跨度中,默认的分布式追踪上下文不会自动携带这类自定义属性到下游服务。

要让这个userID贯穿整个链路的所有跨度,需要手动在各层传递并设置:

  • ReactJS UI:发起请求时,把userID放到请求头(比如X-User-ID)里,同时保留前端的自定义属性设置。
  • Node.js层:从请求头提取userID,调用newrelic.setCustomAttribute('userID', user_ID)把属性附加到Node.js的事务/跨度;发送消息到Azure Service Bus时,把userID放到消息的自定义属性字段中(比如消息的applicationProperties)。
  • Spring Boot应用:接收消息时提取这个属性,再通过New Relic Java API设置到自身的跨度/事务中。

问题2:Spring Boot应用中如何读取并设置该自定义属性?

按以下步骤操作:

  1. 提取消息中的userID:
    如果使用Azure的Spring Starter处理Service Bus消息,在消息处理方法中可以从Message对象的属性里获取。示例代码:
    import org.springframework.messaging.Message;
    
    @Service
    public class MessageHandler {
        public void handleMessage(Message<String> message) {
            // 从消息头中提取userID
            String userId = message.getHeaders().get("X-User-ID", String.class);
            // 或者从Azure Service Bus的applicationProperties中获取
            // Map<String, Object> appProps = (Map<String, Object>) message.getHeaders().get("applicationProperties");
            // String userId = (String) appProps.get("userID");
        }
    }
    
  2. 设置到New Relic跨度/事务:
    提取到userID后,调用New Relic的Java API将属性附加到当前的追踪实体上:
    import com.newrelic.api.agent.NewRelic;
    
    // 在消息处理逻辑中添加
    if (userId != null) {
        NewRelic.addCustomAttribute("userID", userId);
    }
    
    这个属性会被附加到当前Spring Boot应用处理该消息对应的跨度和事务中,这样在New Relic的追踪视图里就能看到整个链路的userID属性了。

内容的提问来源于stack exchange,提问作者Sathees Rajagopal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 14:52:42