【问题标题】:Open Telemetry Logger MDC auto-instrumentation打开遥测记录器 MDC 自动检测
【发布时间】:2023-01-26 06:51:36
【问题描述】:

以下 Open Telemetry 启动器已添加到 Spring Boot 项目 (v2.7.2) 以检测应用程序:

<dependency>
    <groupId>io.opentelemetry.instrumentation</groupId>
    <artifactId>opentelemetry-spring-boot-starter</artifactId>
    <version>1.22.1-alpha</version>
</dependency>
<dependency>
    <groupId>io.opentelemetry.instrumentation</groupId>
    <artifactId>opentelemetry-jaeger-spring-boot-starter</artifactId>
    <version>1.22.1-alpha</version>
</dependency>

跟踪和跨度已成功导出到 Jaeger 收集器。问题是那些跟踪和跨度无法与日志语句相关联,因为日志不包含当前的 trace_idspan_id

通过关注 the documentation,我将 logging.pattern.level 属性添加到 application.properties,但似乎有关当前跨度的信息未注入到日志记录事件的 MDC 副本中。

logging.pattern.level = trace_id=%mdc{trace_id} span_id=%mdc{span_id} trace_flags=%mdc{trace_flags} %5p

例如:

log.info(
    "traceId: {}, spanId: {}",
    Span.current().getSpanContext().getTraceId(),
    Span.current().getSpanContext().getSpanId());

2023-01-25 12:21:36.774 trace_id= span_id= trace_flags= INFO 34272 --- [nio-8080-exec-2] h.c.DemoController:traceId:1bccb6a4fea8345026ca87a202f0091f,spanId:c59a5d44ee40cd2c

我错过了什么吗?

【问题讨论】:

  • MDC 检测仅适用于 Java 代理。 “OTel Java 代理注入……”

标签: spring-boot logback open-telemetry mdc


【解决方案1】:

opentelemetry-spring-boot-starter 现在缺少此功能(版本1.22.1-alpha),但可以很容易地添加。

首先,需要在项目中添加MDC Instrumentation for Logback依赖。

  <dependency>
    <groupId>io.opentelemetry.instrumentation</groupId>
    <artifactId>opentelemetry-logback-mdc-1.0</artifactId>
    <version>OPENTELEMETRY_VERSION</version>
  </dependency>

然后在类路径中添加一个自定义的logback.xml配置,它会自动将来自span上下文的上下文信息注入到日志事件中。

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!--    Default logback configuration    -->
    <include resource="org/springframework/boot/logging/logback/defaults.xml"/>
    <property name="LOG_FILE" value="${LOG_FILE:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}}/spring.log}"/>
    <include resource="org/springframework/boot/logging/logback/console-appender.xml"/>
    <include resource="org/springframework/boot/logging/logback/file-appender.xml"/>
    <!--   -->
    <appender name="OTEL" class="io.opentelemetry.instrumentation.logback.v1_0.OpenTelemetryAppender">
        <appender-ref ref="CONSOLE"/>
        <appender-ref ref="FILE"/>
    </appender>
    <root level="INFO">
        <appender-ref ref="OTEL"/>
    </root>
</configuration>

最后,将属性添加到application.properties(如问题中所述):

logging.pattern.level = trace_id=%mdc{trace_id} span_id=%mdc{span_id} trace_flags=%mdc{trace_flags} %5p

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-04
    • 2019-08-25
    • 1970-01-01
    • 2015-11-13
    • 1970-01-01
    • 2020-01-08
    相关资源
    最近更新 更多