Brave 是一个分布式跟踪仪器库。 Brave 通常会拦截生产请求以收集计时数据、关联和传播跟踪上下文。虽然跟踪数据通常会发送到 Zipkin 服务器,但第三方插件也可发送到替代服务,例如 Amazon X-Ray。
该存储库包括无依赖性 Java 库和生产服务中使用的常用组件的工具。例如,这包括 Servlet 的跟踪过滤器和 Apache Log4J 的日志关联。
您可以查看我们的示例项目,了解如何跟踪简单的 Web 应用程序。
Brave 的无依赖跟踪器库适用于 JRE6+。这是仪器用来计时操作并添加描述它们的标签的底层 API。该库还包含解析X-B3-TraceId
标头的代码。
大多数用户不会直接编写跟踪代码。相反,他们重用其他人编写的工具。在推出您自己的仪器之前,请检查我们的仪器和 Zipkin 的列表。常见的跟踪库(如 JDBC、Servlet 和 Spring)已经存在。此处编写的仪器经过测试和基准测试。
如果您尝试跟踪遗留应用程序,您可能对 Spring XML 配置感兴趣。这允许您无需任何自定义代码即可设置跟踪。
您可能希望将跟踪 ID 放入日志文件中,或更改线程本地行为。查看我们的上下文库,以与 SLF4J 等工具集成。
所有 Brave 库都与正在跟踪或集成的最低 Java 版本相匹配,并且不添加第 3 方依赖项。目标是既不影响您的项目的选择,也不让您的项目受到其他人做出的依赖决策的影响。
例如,即使包含基本的报告库 zipkin-sender-urlconnection,Brave 也不会包含 json、日志记录、protobuf 或 thrift 依赖项。这意味着如果您的应用程序选择 SLF4J、Gson 或 Guava 的特定版本,则无需担心。此外,整个依赖树(包括 json、thrift 或 protobuf 中的基本报告)的 jar 大小不到 512KiB。
有一个最低 Java 版本 1.6,它允许较旧的 JRE 和较旧的 Android 运行时,但可能会限制某些应用程序。例如,Servlet 2.5 可与 Java 1.5 配合使用,但由于 Brave 为 1.6,因此在您至少使用 JRE 1.6 之前,您将无法跟踪 Servlet 2.5 应用程序。
所有集成都将其关联的库设置为“提供的”范围。这可确保 Brave 不会干扰您选择的版本。
有些库经常更新,这会导致 api 漂移。在某些情况下,我们会测试版本范围以减少这种影响。例如,我们针对多个库版本测试 gRPC 和 Kafka。
所有工件都会发布到组 ID“io.zipkin.brave”。我们对所有组件使用通用发行版本。
快照上传到与 Maven Central 同步的 Sonatype
提交到 master 后,快照会上传到 Sonatype。
当使用多个勇敢的组件时,您需要将版本对齐在一处。这可以让您更安全地升级,不用担心冲突。
为此,您可以使用我们的 Maven 工具 BOM(物料清单):
前任。在依赖项部分中,像这样导入 BOM:
< 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 >
现在,您可以在选择任何受支持的仪器时忽略版本。此外,任何间接使用都会使版本对齐:
< dependency >
< groupId >io.zipkin.brave</ groupId >
< artifactId >brave-instrumentation-okhttp3</ artifactId >
</ dependency >
完成上述操作后,您可以使用属性brave.version
连贯地覆盖依赖项版本。这最常见的是测试新功能或修复。
注意:如果您覆盖某个版本,请务必仔细检查您的版本是否比您要更新的版本有效(等于或晚于)。这样就可以避免阶级矛盾。