Brave es una biblioteca de instrumentación de seguimiento distribuida. Brave normalmente intercepta solicitudes de producción para recopilar datos de tiempo, correlacionar y propagar contextos de seguimiento. Si bien normalmente los datos de seguimiento se envían al servidor Zipkin, hay complementos de terceros disponibles para enviar a servicios alternativos como Amazon X-Ray.
Este repositorio incluye bibliotecas Java e instrumentación libres de dependencias para componentes comunes utilizados en servicios de producción. Por ejemplo, esto incluye filtros de seguimiento para Servlet y correlación de registros para Apache Log4J.
Puede consultar nuestro proyecto de ejemplo sobre cómo rastrear una aplicación web simple.
La biblioteca de seguimiento libre de dependencias de Brave funciona con JRE6+. Esta es la API subyacente que utiliza la instrumentación para cronometrar las operaciones y agregar etiquetas que las describen. Esta biblioteca también incluye código que analiza los encabezados X-B3-TraceId
.
La mayoría de los usuarios no escribirán código de seguimiento directamente. Más bien, reutilizan instrumentación que otros han escrito. Consulte nuestra instrumentación y la lista de Zipkin antes de lanzar la suya propia. Ya existen bibliotecas de seguimiento comunes como JDBC, Servlet y Spring. La instrumentación escrita aquí se prueba y compara.
Si está intentando rastrear aplicaciones heredadas, puede que le interese la configuración Spring XML. Esto le permite configurar el seguimiento sin ningún código personalizado.
Es posible que desee colocar ID de seguimiento en sus archivos de registro o cambiar el comportamiento local del subproceso. Consulte nuestras bibliotecas de contexto para la integración con herramientas como SLF4J.
Todas las bibliotecas de Brave coinciden con la versión mínima de Java de lo que se está rastreando o integrando y no agregan dependencias de terceros. El objetivo no es afectar las elecciones de sus proyectos ni someter su proyecto a decisiones de dependencia tomadas por otros.
Por ejemplo, incluso incluyendo una biblioteca de informes básica, zipkin-sender-urlconnection, Brave no incluye transitivamente ninguna dependencia de json, logging, protobuf o thrift. Esto significa que no hay preocupación si su aplicación elige una versión específica de SLF4J, Gson o Guava. Además, todo el árbol de dependencias, incluidos los informes básicos en json, thrift o protobuf, tiene menos de 512 KB de archivos jar.
Existe una versión básica de Java 1.6, que permite JRE más antiguos y tiempos de ejecución de Android más antiguos, pero puede limitar algunas aplicaciones. Por ejemplo, Servlet 2.5 funciona con Java 1.5, pero debido a que Brave es 1.6, no podrá rastrear aplicaciones de Servlet 2.5 hasta que use al menos JRE 1.6.
Todas las integraciones configuran su biblioteca asociada en el alcance "proporcionado". Esto garantiza que Brave no interfiera con las versiones que elijas.
Algunas bibliotecas se actualizan con frecuencia, lo que provoca una desviación de la API. En algunos casos, probamos rangos de versiones para reducir el impacto de esto. Por ejemplo, probamos gRPC y Kafka con múltiples versiones de biblioteca.
Todos los artefactos se publican en el ID de grupo "io.zipkin.brave". Utilizamos una versión de lanzamiento común para todos los componentes.
Las instantáneas se cargan en Sonatype, que se sincroniza con Maven Central.
Las instantáneas se cargan en Sonatype después de confirmarlas con el master.
Cuando utilice varios componentes valientes, querrá alinear las versiones en un solo lugar. Esto le permite actualizar de forma más segura y con menos preocupación por los conflictos.
Puede utilizar nuestra BOM (lista de materiales) de instrumentación Maven para esto:
Ex. en su sección de dependencias, importe la lista de materiales de esta manera:
< 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 >
Ahora puede omitir la versión al elegir cualquier instrumentación compatible. Además, cualquier uso indirecto tendrá versiones alineadas:
< dependency >
< groupId >io.zipkin.brave</ groupId >
< artifactId >brave-instrumentation-okhttp3</ artifactId >
</ dependency >
Con lo anterior implementado, puede usar la propiedad brave.version
para anular las versiones de dependencia de manera coherente. Esto suele realizarse para probar una nueva función o corregirla.
Nota: Si anula una versión, siempre verifique que su versión sea válida (igual o posterior) a la que está actualizando. Esto evitará conflictos de clases.