Opentelemetry_Spring_Boot_starter

前言

先前有過一篇Tracing with Opentelemetry,後續有些更新的做法,修改後留了這篇記錄。

早期Spring在用Opentelemetry的時候,似乎僅有唯一的選擇,就是使用Opentelemetry Java Agent,但的確不是每個程式都可以直接套用這種模式,例如如果想用Graalvm Native Image的方式包成執行檔,或是已經有另一個其他功能的Java Agent,那這模式就無法使用了。

所以Opentelemetry在2022年起開始了新的專案,先前一直都是以alpha的版本發佈,直到前幾天2024/07/17才發佈一個正式的版本,但程式裡的info還是有著不少alpha的標記,但至少在maven的設定裡不再是alpha了。

POM設定

dependencyManagement

  <dependencyManagement>
      <dependency>
        <groupId>io.opentelemetry.instrumentation</groupId>
        <artifactId>opentelemetry-instrumentation-bom</artifactId>
        <version>2.6.0</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
    </dependencies>
  </dependencyManagement>

dependency 引用

    <dependency>
      <groupId>io.opentelemetry.instrumentation</groupId>
      <artifactId>opentelemetry-spring-boot-starter</artifactId>
    </dependency>

application.yaml 設定

再來可以不用透過System Environment做為設定的唯一方式,用SpringBoot裡的application.yaml也可以控制。

otel:
  sdk:
    disabled: false
  exporter:
    otlp:
      endpoint: http://localhost:4318
  logs:
    exporter: none
  metrics:
    exporter: none

otel.sdk.disabled可以決定是否要啟用

otel.logs.exporterotel.metrics.exporter設為none則是因為用jaegertracing全家桶不支援這兩類

otel.exporter.otlp.endpoint則可參考jaegertracing的設定,簡單一點走http就是port 4318

最後

然後就好了….

實在太簡單。

07/31 補記

後來發現似乎在logback裡沒有辦法取得MDC裡的traceId跟spanId,查了一下,將這部份補上

加入logback moc要用的libaray

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

修改logback.xml,主要是加入OpenTelemetryAppender

<?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.mdc.v1_0.OpenTelemetryAppender">
    <appender-ref ref="CONSOLE"/>
    <appender-ref ref="FILE"/>
  </appender>
  <root level="INFO">
    <appender-ref ref="OTEL"/>
  </root>
</configuration>

所以先前在application.yaml裡的設定就直接產生作用

logging:
  pattern:
    level: "%5p [${spring.application.name:},%X{trace_id:-},%X{span_id:-}]"

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料