跳转至

JAVA

使用观测云链接到 JAVA 应用程序:

  • 从应用当中收集自定义指标数据;
  • 从应用中收集链路追踪数据;
  • 管理应用的所有日志。

配置

指标采集

可以查看 jvm 文档

链路追踪采集

应用开启对应采集器,然后使用 JAVA agent 工具获取 traces 信息发送到观测云。

日志关联

opentelemetry-java(以下简称“Agent”)通过 javaagent 方式注入到应用当中,应用产生 trace 信息后,通过设置 MDC 可以把 traceIdspanId作为参数传递给log,这样log在输出的时候便会带上traceIdspanId

关于 MDC

映射诊断上下文 (MDC) 是一种用于区分来自不同来源的交错日志输出的工具。— log4j MDC 文档

它包含线程本地上下文信息,并将其复制到日志库捕获的每个日志事件中。

OTEL JAVA Agent 将有关当前跨度的几条信息注入到每个日志记录事件的 MDC 副本中:

  • trace_id 当前跟踪 id(与 相同Span.current().getSpanContext().getTraceId());
  • span_id 当前跨度 id(与 相同Span.current().getSpanContext().getSpanId());
  • trace_flags 当前跟踪标志,根据 W3C 跟踪标志格式(与 相同Span.current().getSpanContext().getTraceFlags().asHex())格式化。

这三条信息可以包含在日志库生成的日志语句中,方法是在模式/格式中指定它们。

提示:对于使用logback的 SpringBoot 配置,您可以通过仅覆盖以下内容将 MDC 添加到日志行logging.pattern.level

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

这样,解析应用程序日志的任何服务或工具都可以将跟踪/跨度与日志语句相关联。

日志配置

不同 APM 工具配置日志 pattern 有差异,以 logback.xml 为例:

OpenTelemetry MDC 参数:

  • trace_id
  • span_id
<property name="log.pattern" value="%d{HH:mm:ss} [%thread] %-5level %logger{10} [traceId=%X{trace_id} spanId=%X{span_id} userId=%X{user-id}] %msg%n" />

<!-- %m输出的信息,%p日志级别,%t线程名,%d日期,%c类的全名,,,, -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
        <pattern>${log.pattern}</pattern>
        <charset>UTF-8</charset>
    </encoder>
</appender>

DDTrace MDC参数:

  • dd.service
  • dd.trace_id
  • dd.span_id
<property name="log.pattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - [%method,%line] %X{dd.service} %X{dd.trace_id} %X{dd.span_id} - %msg%n" />

<!-- %m输出的信息,%p日志级别,%t线程名,%d日期,%c类的全名,,,, -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
        <pattern>${log.pattern}</pattern>
        <charset>UTF-8</charset>
    </encoder>
</appender>-

参考文档

DDTrace Log

springboot-ddtrace-server

springboot-opentelemetry-otlp-server

文档评价

文档内容是否对您有帮助? ×