🎯 Как быстро настроить распределённую трассировку в Spring Boot с OpenTelemetry
Дебажить без трейсинга — как ловить баги с завязанными глазами. Но Spring Boot и тут не подвёл: подключаем, настраиваем — и уже можно видеть, что происходит внутри сервиса (и между сервисами тоже).
<dependency>
<groupId>io.opentelemetry.instrumentation</groupId>
<artifactId>opentelemetry-spring-boot-starter</artifactId>
<version>2.1.0</version>
</dependency>
ИЛИ
implementation 'io.opentelemetry.instrumentation:opentelemetry-spring-boot-starter:2.1.0'
Плюс агент (нужно будет передать при запуске JAR-а):
-javaagent:opentelemetry-javaagent.jar
Добавляем конфигурацию в application.yml:
otel:
exporter:
otlp:
endpoint: http://localhost:4317
resource:
attributes:
service.name: my-service
instrumentation:
spring-web:
enabled: true
jdbc:
enabled: true
Можно слать трейсинг напрямую в Jaeger или Zipkin, или в OTEL Collector для гибкости.
Ничего руками писать не нужно. Всё, что проходит через @RestController и JdbcTemplate — уже обвешано спанами. Нужно только запустить приложение с агентом:
java -javaagent:opentelemetry-javaagent.jar -jar myapp.jar
Сразу работают:
— Спаны на все входящие HTTP-запросы
— Спаны на SQL-запросы
— Привязку логов к трейсам (если логгер поддерживает traceId)
Нужно залезть в середину метода и обернуть свою логику? Без проблем:
@Autowired
private Tracer tracer;
public void doSomething() {
Span span = tracer.spanBuilder("custom-operation").startSpan();
try (Scope scope = span.makeCurrent()) {
// какая-то магия
} finally {
span.end();
}
}
Установите Jaeger UI или Zipkin — и смотрите в реальном времени, что делает сервис и как долго.