将 MDC 上下文值记录到 New Relic

将 MDC 上下文值记录到 New Relic

本文旨在指导开发者如何配置 Spring Boot 项目,在使用 Logback 打印日志的同时,将 MDC(Mapped Diagnostic Context)上下文中的值正确地传递到 New Relic 监控平台。通过修改 New Relic 的配置文件,启用上下文数据转发功能,确保请求 ID 等重要信息能够被 New Relic 捕获和分析,从而提升问题诊断和性能优化的效率。

在使用 Spring Boot 和 Logback 构建的应用中,MDC 是一种强大的工具,用于在日志中添加上下文信息,例如请求 ID、用户 ID 等。这些信息对于追踪和调试分布式系统中的问题至关重要。然而,默认情况下,New Relic 可能无法自动捕获 MDC 上下文中的值。以下步骤将指导您如何配置 New Relic 以正确地记录这些值。

配置 New Relic Agent

要将 MDC 上下文值转发到 New Relic,需要在 newrelic.yml 配置文件中启用 context_data 转发功能。打开您的 newrelic.yml 文件,并添加或修改以下配置:

common: &default_settings
    # 转发 Diagnostic Context 到 New Relic Agent
    forwarding:
        context_data:
            enabled: true

这个配置告诉 New Relic Agent 将诊断上下文数据(包括 MDC 值)转发到 New Relic 平台。

示例 Logback 配置 (logback.xml)

以下是一个示例 logback.xml 配置文件,展示了如何使用 MDC 以及如何配置 New Relic Encoder 和 Async Appender:


    
        logs/logback-app.log
        false
        
        
        
    

    
        
    

    
        
            %X{request-id} %d %-5level [%thread] %logger{0}: %msg%n
        
    

    
        
        
    

在这个配置中:

  • com.newrelic.logging.logback.NewRelicEncoder 用于格式化日志消息,以便 New Relic 可以正确解析它们。
  • com.newrelic.logging.logback.NewRelicAsyncAppender 用于异步地将日志消息发送到 New Relic,从而避免阻塞应用程序的主线程。
  • %X{request-id} 用于从 MDC 上下文中获取 request-id 的值,并将其包含在控制台输出的日志消息中。

注意事项

  • 确保您的 New Relic Agent 版本支持上下文数据转发功能。
  • 验证 newrelic.yml 文件的配置是否正确,并且 Agent 能够正确加载该文件。
  • 检查 New Relic 平台,确认 MDC 值是否已成功记录。通常,您可以在 New Relic 的日志事件或自定义属性中找到这些值。
  • 如果 MDC 值仍然无法显示在 New Relic 中,请检查您的 Logback 配置和代码,确保 MDC 值已正确设置,并且 New Relic Agent 正在运行并正确配置。

总结

通过启用 New Relic Agent 的 context_data 转发功能,您可以轻松地将 MDC 上下文值集成到 New Relic 监控平台中。这使得您可以更有效地追踪和调试应用程序中的问题,并利用 New Relic 的强大分析功能来优化应用程序的性能。确保您的配置正确,并验证数据是否已成功记录,以便充分利用这一功能。