Executando verificação de segurança...
1

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.

text

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

Carregando publicação patrocinada...
2

Estou vendo mais detalhadamente seu projeto ainda, mas gostaria de aproveitar para mandar esse projeto que fiz com uma implementação bem parecida, porém com NodeJs: https://github.com/wesleyburlani/nodejs-open-telemetry

Usei esse projeto como PoC para uma implementação de produção que está em andamento no momento. Por enquanto parece bastante promissor.

Gostaria também de adicionar que utilizei ele para comunicação AMQP, não apenas HTTP, e os traces funcionam muito bem, além disso a intergação com Kubernetes utilizando tobs resolve a ideia de Telemetria de uma forma bem ágil.

1

Muito legal @wesleyburlani , obrigado por compartilhar seu projeto, vou usar de sua ideia também para complementar minha POC e interagir entre os serviços node vs java;
Sobre a integração om o K8s usando o TOBS eu não conhecia e achei muitoooo legal o projeto, uma coisa interessante que notei que o prometheus nessa stack coleta as métricas tanto da app (diretamente) quando as que são enviadas para o otel collector, isso pode ser uma solução para alguns cenários em que se usa o framework para gerar o /metrics da api e algumas métricas customizadas sendo enviadas somente para o otel. Obrigado por compartilhar, duvida: vocês estão usando essa stack do tobs em produção?

2

Não estou usando em produção por que na minha impressão o tobs é algo para se inserir numa infra que está começando do zero. Como eu já tenho algumas coisas como Prometheus e Grafana rodando, eu teria que juntar ambos e poderia perder os logs já existentes para implantar um novo prometheus junto com o tobs, mas dá para usar ele como parametro e implantar cada componente separadamente no K8s, depedendo da necessidade e do que já existe em cada infra.