Visão geral
Jaeger é um software open source para rastreamento de transações entre serviços distribuídos. Ele é usado para monitorar e solucionar problemas em ambientes de microsserviços complexos.
O que é rastreamento distribuído?
Rastreamento distribuído é uma maneira de ver e entender a cadeia de eventos inteira em interações complexas entre microsserviços.
O desenvolvimento moderno de software, nativo em nuvem, depende dos microsserviços: serviços independentes, cada um fornecendo uma funcionalidade básica diferente. Quando um usuário faz uma solicitação em uma aplicação, muitos serviços individuais respondem para produzir um resultado.
Uma única chamada na aplicação pode invocar dezenas de serviços diferentes que interagem uns com os outros. Como desenvolvedores e engenheiros isolam um problema quando ocorre um erro ou uma solicitação está lenta? Precisamos encontrar uma maneira de rastrear todas as conexões.
É aí que o rastreamento distribuído entra em cena. Geralmente, ele é executado como parte de uma service mesh, que é um modo de gerenciar e observar os microsserviços.
O Jaeger usa o rastreamento distribuído para seguir o caminho de uma solicitação por diferentes microsserviços. Em vez de tentar adivinhar, temos uma representação visual do fluxo da chamada.
Ter informações organizadas sobre as transações é útil para fins de debugging e otimização. O Jaeger inclui ferramentas para monitorar transações distribuídas, otimizar o desempenho e a latência e realizar análises de causa (RCA), um método para solucionar problemas.
Comunidade open source do Jaeger
Como projeto open source, o Jaeger conta com uma comunidade de centenas de colaboradores. O Jaeger é baseado na instrumentação e APIs OpenTracing, independentes de fornecedor.
A Uber, uma empresa de transporte privado, desenvolveu o Jaeger como um projeto open source em 2015. Ele foi aceito como um projeto de incubação na Cloud Native Computing Foundation (CNCF) em 2017 e promovido ao status de graduado em 2019.
Terminologia e componentes do Jaeger
O Jaeger apresenta as solicitações de execução como traces, que mostram os dados/caminhos de execução através de um sistema.
Um trace é formado por um ou mais spans, que são as unidades de trabalho lógicas do Jaeger. Cada span inclui o nome da operação, a data/hora de início e a duração. Os spans podem estar aninhados e ordenados.
O Jaeger tem vários componentes que funcionam juntos para coletar, armazenar e visualizar spans e traces.
O Jaeger Client inclui implementações específicas da API OpenTracing por linguagem para rastreamento distribuído. Elas podem ser usadas manualmente ou com uma variedade de frameworks open source.
O Jaeger Agent é um daemon de rede que detecta spans enviados por meio do User Datagram Protocol (UDP). O agente deve estar no mesmo host da aplicação instrumentada. Normalmente, isso é implementado por meio de um sidecar em ambientes de containers, como o Kubernetes.
O Jaeger Collector recebe os spans e os coloca em uma fila para processamento.
Esses coletores precisam de um back-end de armazenamento persistente para que o Jaeger também tenha um mecanismo conectável para armazenar os spans.
Query é um serviço que recupera os traces do armazenamento.
O Jaeger Console é uma interface do usuário que permite visualizar os dados do rastreamento distribuído.
O Jaeger e a Red Hat
O Jaeger é instalado por padrão como parte do Red Hat® OpenShift® Service Mesh, que inclui uma implementação do Istio, uma service mesh open source.
Essa implementação de rastreamento distribuído gera vários benefícios. O Jaeger se integra ao Kiali, um console de observabilidade para o Istio. O back-end do Jaeger foi projetado para oferecer alta escalabilidade sem pontos de falha individuais. O Jaeger pode conectar dados de componentes diferentes para criar um rastreamento completo. Além disso, ele é compatível com versões antigas do Zipkin.