后端与系统架构1253 字

Spring Boot接入OpenTelemetry可观测零侵入

·全库 361 / 611

《Spring Boot接入OpenTelemetry可观测零侵入》共 0.1 万字,通篇围绕 Agent、日志 展开,归在「后端与系统架构」这一层。

覆盖Agent日志

适合给 AI 系统搭底座、要管得住的人

目录骨架(5 节)
  1. 理论基础:
  2. 详细代码
  3. Micrometer Tracing
  4. OpenTelemetry 代理 v1
  5. OpenTelemetry Agent v2

理论基础:

image.png

image.png

image.png

image.png

展示:

image.png

启动类:

image.png

接口:

image.png

配置启动jar

image.png

运行提示信息:

image.png

Jagger链路效果:

image.png

点击计入

image.png

搜索traceid进入

image.png

prometheus效果

image.png

图表:

image.png

详细代码

我将使用相同的基准应用程序:一个用 Kotlin 编写的简单 Spring Boot 应用程序。它提供一个端点。

  • 端点背后的函数名为 entry()
  • 它调用另一个名为 intermediate() 的函数
  • 后者使用 WebClient 实例,替换RestTemplate,来调用上面的端点
  • 为了避免无限循环,我传递了一个自定义请求头:如果 entry()函数找到它,它转化为以下代码:

​

@SpringBootApplication
  class Agent1xApplication

  @RestController
    class MicrometerController {
      private val logger = LoggerFactory.getLogger(MicrometerController::class.java)

      @GetMapping("/{message}")
      fun entry(@PathVariable message: String, @RequestHeader("X-done") done: String?) {
        logger.info("entry: $message")
        if (done == null) intermediate()
      }

      fun intermediate() {
        logger.info("intermediate")
        RestClient.builder()
          .baseUrl("http://localhost:8080/done")
          .build()
          .get()
          .header("X-done", "true")
          .retrieve()
          .toBodilessEntity()
      }
    }

对于每种设置,我将检查两个阶段:启用 OpenTelemetry 的主要阶段,以及创建额外内部跨度的自定义阶段。

Micrometer Tracing

Micrometer Tracing 源于 Micrometer,一个“供应商中立的应用程序可观测性门面”。

Micrometer Tracing 为最流行的跟踪库提供了一个简单的门面,让您可以在没有供应商锁定的情况下对基于 JVM 的应用程序代码进行检测。它旨在为您的跟踪收集活动增加很少或没有开销,同时最大限度地提高跟踪工作的可移植性。 — Micrometer Tracing site

要开始使用 Micrometer Tracing,需要添加一些依赖项:

  • Spring Boot Actuator,org.springframework.boot:spring-boot-starter-actuator
  • Micrometer Tracing 本身,io.micrometer:micrometer-tracing
  • 到目标跟踪后端 API 的“桥梁”。在我的例子中,它是 OpenTelemetry,因此 io.micrometer:micrometer-tracing-bridge-otel
  • 到后端的具体导出器,io.opentelemetry:opentelemetry-exporter-otlp

资料里没有你的场景?

把你手上的数据和想解决的那个环节发上来,我们按具体情况回,不复述方法论。

发布需求