Brave é uma biblioteca de instrumentação de rastreamento distribuída. O Brave normalmente intercepta solicitações de produção para coletar dados de tempo, correlacionar e propagar contextos de rastreamento. Embora normalmente os dados de rastreamento sejam enviados ao servidor Zipkin, plug-ins de terceiros estão disponíveis para envio a serviços alternativos, como o Amazon X-Ray.
Este repositório inclui bibliotecas Java livres de dependência e instrumentação para componentes comuns usados em serviços de produção. Por exemplo, isso inclui filtros de rastreamento para Servlet e correlação de log para Apache Log4J.
Você pode consultar nosso projeto de exemplo para saber como rastrear um aplicativo da web simples.
A biblioteca rastreadora livre de dependência do Brave funciona no JRE6+. Esta é a API subjacente que a instrumentação usa para cronometrar operações e adicionar tags que as descrevem. Esta biblioteca também inclui código que analisa cabeçalhos X-B3-TraceId
.
A maioria dos usuários não escreve código de rastreamento diretamente. Em vez disso, eles reutilizam instrumentação que outros escreveram. Verifique nossa instrumentação e a lista do Zipkin antes de lançar a sua própria. Já existem bibliotecas de rastreamento comuns como JDBC, Servlet e Spring. A instrumentação escrita aqui é testada e avaliada.
Se você estiver tentando rastrear aplicativos legados, poderá estar interessado na configuração Spring XML. Isso permite que você configure o rastreamento sem nenhum código personalizado.
Talvez você queira colocar IDs de rastreamento em seus arquivos de log ou alterar o comportamento local do thread. Consulte nossas bibliotecas de contexto para integração com ferramentas como SLF4J.
Todas as bibliotecas Brave correspondem à versão Java mínima do que está sendo rastreado ou integrado e não adiciona dependências de terceiros. O objetivo é não impactar as escolhas dos seus projetos, nem sujeitar o seu projeto a decisões de dependência tomadas por outros.
Por exemplo, mesmo incluindo uma biblioteca básica de relatórios, zipkin-sender-urlconnection, o Brave não inclui transitivamente nenhuma dependência de json, logging, protobuf ou thrift. Isso significa zero preocupação se sua aplicação escolher uma versão específica do SLF4J, Gson ou Guava. Além disso, toda a árvore de dependências, incluindo relatórios básicos em json, thrift ou protobuf, tem menos de 512 KiB de jars.
Existe uma versão Java 1.6, que permite JREs mais antigos e tempos de execução Android mais antigos, mas pode limitar alguns aplicativos. Por exemplo, o Servlet 2.5 funciona com Java 1.5, mas como o Brave é 1.6, você não poderá rastrear aplicativos do Servlet 2.5 até usar pelo menos o JRE 1.6.
Todas as integrações definem sua biblioteca associada para o escopo "fornecido". Isso garante que o Brave não interfira nas versões que você escolher.
Algumas bibliotecas são atualizadas com frequência, o que leva ao desvio da API. Em alguns casos, testamos intervalos de versões para reduzir o impacto disso. Por exemplo, testamos gRPC e Kafka em várias versões de biblioteca.
Todos os artefatos são publicados no ID do grupo "io.zipkin.brave". Usamos uma versão de lançamento comum para todos os componentes.
Os instantâneos são carregados no Sonatype, que sincroniza com o Maven Central
Os instantâneos são carregados no Sonatype após serem confirmados no master.
Ao usar vários componentes corajosos, você desejará alinhar as versões em um só lugar. Isso permite que você atualize com mais segurança e menos preocupação com conflitos.
Você pode usar nossa BOM (lista de materiais) de instrumentação Maven para isso:
Ex. na sua seção de dependências, importe o BOM assim:
< dependencyManagement >
< dependencies >
< dependency >
< groupId >io.zipkin.brave</ groupId >
< artifactId >brave-bom</ artifactId >
< version >${brave.version}</ version >
< type >pom</ type >
< scope >import</ scope >
</ dependency >
</ dependencies >
</ dependencyManagement >
Agora, você pode deixar de lado a versão ao escolher qualquer instrumentação compatível. Além disso, qualquer uso indireto terá versões alinhadas:
< dependency >
< groupId >io.zipkin.brave</ groupId >
< artifactId >brave-instrumentation-okhttp3</ artifactId >
</ dependency >
Com o acima exposto, você pode usar a propriedade brave.version
para substituir as versões de dependência de forma coerente. Geralmente, isso é para testar um novo recurso ou correção.
Nota: Se você substituir uma versão, sempre verifique se sua versão é válida (igual ou posterior) à que você está atualizando. Isso evitará conflitos de classe.