Contexto
Recentemente, meu time e eu trabalhávamos em atualizações de bibliotecas de APIs que utilizam o Spring Boot
. Essas
atualizações ocorreram em projetos que utilizavam o framework na versão 2.7.X
, e gostaríamos de aproveitar o ensejo e subir para a versão 3.0.1
,
disponibilizado
em Generally Available no final de novembro de 2022.
O guia de atualização disponibilizado no repositório oficial do framework transcorreu bem, com o build e os testes automatizados executando sem problemas.
Porém, ao executar o projeto e observar os logs, verificamos a ausência do Trace Id
e Span Id
nos registros, esses que
são enriquecidos através do uso da biblioteca Spring Cloud Sleuth.
2023-01-06T20:06:46.830-03:00 INFO [my-test-app,<TRACE_ID_HERE_BUT_EMPTY>,<SPAN_ID_HERE_BUT_EMPTY>] 29324 --- [nio-8080-exec-6] c.a.Loren : Loren ipsun
Problema
Uma rápida leitura na documentação do Sleuth nos informa que esse projeto foi absorvido pelo Micrometer Tracing a partir da versão 3.0 do Spring Boot, portanto aparentemente sendo descontinuado a partir da versão 3.1. Isso também é confirmado pelo GitHub oficial do Micrometer, onde é apresentado um guia de migração.
Porém, o guia para a migração não parece completo, já que seguindo-o não resultou na correta impressão dos dados de rastreabilidade.
Portanto, o objetivo do passo a passo a seguir é ajudá-los com essa migração.
Solução
- Verifique se o projeto está fazendo uso da versão 3.0 do Spring Boot;
plugins {
id("org.springframework.boot") version "3.0.1"
}
- Remova a dependência do Sleuth;
implementation("org.springframework.cloud:spring-cloud-starter-sleuth")
- Adicione a dependência do Micrometer Tracing com a bridge para o Brave, responsável pela criação dos tracers;
implementation("io.micrometer:micrometer-tracing-bridge-brave")
- Caso não possua, adicione a dependência para o Spring Actuator. Ele é necessário para fazer a autoconfiguração do Micrometer;
implementation("org.springframework.boot:spring-boot-starter-actuator")
- Finalmente, seguindo o guia de migração do Micromter, adicione a propriedade de log pattern no
arquivo
.properties
ou.yml
para que o Trace Id e Span Id sejam impressos;
logging.pattern.level=%5p [${spring.application.name:},%X{traceId:-},%X{spanId:-}]
Ao executar novamente o projeto, os Ids de Trace e Span voltarão a funcionar corretamente.
2023-01-06T20:16:46.830-03:00 INFO [my-test-app,63b8a986c713b025bfcb74bfc7c64a77,bfcb74bfc7c64a77] 29324 --- [nio-8080-exec-6] c.a.Loren : Loren ipsun
Para quaisquer dúvidas, estou disponível pelos meus contatos.
Bons códigos a todos. 😎