Exportando Trace e Metrics com OpenTelemetry e Quarkus
Introdução
Atualmente estou estudando sobre OpenTelemetry, e como implementar uma solução de observabilidade em ambiente produtivo. A ideia aqui não é explicar o que é o OpenTelemetry e sim compartilhar uma das soluções com quarkus que estou estudando atualmente.
Qual o cenário atual?
Atualmente uma arquitetura mais classica no qual o Prometheus raspa as métricas da aplicação no endpoint exposto /q/metrics
e Trace apenas por logs, usando o OpenTrace do Quarkus, que inclusive o próprio Quarkus o considera depreciado e pede para usar o OpenTelemetry;
O desejado? (provavelmente o futuro!)
A aplicação exportar os traces e metrics para um OpenTelemetry Collector que estará conectado a 'n' vendors, como o Jaeger para trace, Prometheus para métrics, etc... Vejo que em breve as ferramentas de observabilidade estaram implementando a leitura de dados baseada no OpenTelemetry de forma mais natural.
O Projeto
Criei um projeto para testar essa arquitetura usando as seguintes tecnologias:
A ideia é que as métricas atuais com o micrometer não sejam perdidas, hoje (Nov/2022) encontramos de forma oficial apenas o trace no ecosistema do Quarkus. Mas no Quarkiverse já existe um micrometer exporter para otlp, assim, suas métricas seriam exportadas tbm para o collector do OpenTelemetry.
Arquitetura
Nesse projeto, a aplicação exportaria seus traces/metrics para um collector agent configurado apenas para receber esses dados e exportar para um collector gateway no qual ficará com as configurações mais pesadas, como exportar para o Jaeger e Prometheus, essa arquitetura tbm se imaginarmos em uma implementação de infra em produção seria mais segura.
- Infra
- OpenTelemetry Collector
- Prometheus
- Jaeger Tracing
- Aplicação: Java Quarkus sample1
- Quarkus 2.14.1.Final
Repositório
Segue o repositório que realizei esse teste com sucesso:
Nele tem exemplo de como executa e os dados para acessar as ferramentas. Em seu docker-compose é possível ver como levantei a infra e na pasta config contém suas configurações.
Para ficar legal a visualização do trace subi a imagem da aplicação 3x uma chamando a outra.
Bom o post é simples, mas a ideia é mais divulgar o repositório e algumas evoluções que tive com o OpenTelemetry. Em breve complementarei essa aplicação adicionando um banco de daos e intrumentar as chamadas para visualizar no trace da app. Também quero contruir um serviço com o Spring Boot usando a nova lib Sleuth deles integrado com o OpenTelemetry e adicionar entre as chamadas para ter exemplos de integração com 'n' Frameworks