bigywater.tech
Spring · 175

spring-boot-starter-opentelemetry:只加依赖会导出什么,traces、metrics、logs 各要配什么

引入 spring-boot-starter-opentelemetry 之后,只加依赖会往哪里导出什么?traces、metrics、logs 各要配什么,怎么单独关?收集端挂了会怎样?这篇用本地假的 OTLP 收集端在 Spring Boot 4.0.8 上逐个验证。

只加依赖就推 metrics
不配任何 management.* 属性,应用在 1 分钟的步长之后往 localhost:4318 推 /v1/metrics;traces 和 logs 没有导出
logs 配了地址仍无
把 management.opentelemetry.logging.export.otlp.endpoint 指向收集端,收集端一条 /v1/logs 都没收到
三个开关
management.tracing.export.otlp.enabled、management.otlp.metrics.export.enabled、management.logging.export.otlp.enabled 各管一个信号

只加依赖

实测 · 本机执行输出
  100 次 GET /hi,返回 200 的有 100 次
  收集端收到的路径:/v1/metrics 是
  应用日志里 WARN/ERROR 的行数:0

等 75 秒后只收到 /v1/metrics。

配上地址

实测 · 本机执行输出
  20 次 GET /hi,返回 200 的有 20 次
  收集端收到的路径:/v1/metrics 是, /v1/traces 是
  traces 请求体里有字符串 "http get /hi",有字符串 demo-app(service.name),Content-Type application/x-protobuf
  应用日志里 WARN/ERROR 的行数:0

traces 与 metrics 到了收集端,logs 没有。

关 traces

实测 · 本机执行输出
  20 次 GET /hi,返回 200 的有 20 次
  收集端收到的路径:/v1/metrics 是
  应用日志里 WARN/ERROR 的行数:0

只剩 metrics。

关 metrics 和 logs

实测 · 本机执行输出
  20 次 GET /hi,返回 200 的有 20 次
  收集端收到的路径:/v1/traces 是
  traces 请求体里有字符串 "http get /hi",有字符串 demo-app(service.name),Content-Type application/x-protobuf
  应用日志里 WARN/ERROR 的行数:0

只剩 traces。

收集端不可达

实测 · 本机执行输出
  20 次 GET /hi,返回 200 的有 20 次
  应用日志里 WARN/ERROR 的行数:3;按日志器:i.m.registry.otlp.OtlpMeterRegistry 3 行
  第一条:Failed to publish metrics to OTLP receiver (context: url=http://127.0.0.1:9613/v1/metrics, resource-attributes={service.name=demo-app})

业务不受影响,日志里只有指标推送失败的 WARN。

分步演示

OTel
本步的对象

    本文用到的工具与边界

    • 本机 macOS 27 arm64 / OpenJDK 21.0.12(Homebrew) / Spring Boot 4.0.8(Spring Framework 7.0.9、Tomcat 11.0.24) / Spring Cloud 2025.1.3;用 javac 编译、java 直接运行,依赖由 Maven 从 Maven Central 解析;数字每次运行会有小幅抖动(Spring Boot 4.0.8,spring-boot-starter-webmvc 加 spring-boot-starter-opentelemetry,没有 actuator;OpenTelemetry SDK 1.55.0、Micrometer 1.16.7;用 Python 写的本地假 OTLP/HTTP 收集端接收 POST 并记录路径与请求体,在请求体字节里查找 Span 名与 service.name;应用里只有一个 GET /hi 端点)
    • 没有验证:logs 要怎样才能导出(猜测需要在 Logback 里另配 OpenTelemetry 的 appender,没有试);默认采样率 0.1 下 traces 的导出情况(第一步没有配地址,所以不能说明默认采样下是否导出);gRPC 传输(management.opentelemetry.tracing.export.otlp.transport=grpc);带 actuator 时的行为;默认的 localhost:4318 地址是否由 Micrometer 的 OTLP 注册表给出(只观察到了现象);traces 导出失败时的日志;跨服务的 trace 上下文传播
    京ICP备2026067502号-1京公网安备11010502063487号