当前位置: 首页 > 知识库问答 >
问题:

如何在Spring Sleuth/Brave中编写自定义跟踪发送器

宋耀
2023-03-14

我的公司有定制的分布式追踪解决方案。我已经为它准备好了Java客户机/代理库,它能够向服务器发送跟踪/跨度。

然而,我想将其与Spring Boot Sleuth/Brave集成,以便从Brave实现某种桥接,因此Brave将使用我的客户机/代理库发送跟踪/跨度。

如何在Brave中定制仅发送部分?

另一种方法是从头开始实现所有Sleuth api接口(Tracer、Span、TraceContext等),这是一项巨大的任务。

我想使用勇敢的实现,只是为了注入某种桥/适配器,它将使用我的定制客户机/代理。

共有1个答案

赏弘
2023-03-14

我不建议实现所有的Sleuth接口,在这种情况下,您正在编写跟踪库(您正在重写Brave)。

您可以实现zipkin2。记者发送方接口并从中创建一个@Bean,下面是一个示例

public class SoutSender extends Sender {
    @Override
    public Encoding encoding() {
        return JSON;
    }

    @Override
    public int messageMaxBytes() {
        return 500 * 1024; //500 KiB
    }

    @Override
    public int messageSizeInBytes(List<byte[]> encodedSpans) {
        return encodedSpans.stream()
                .mapToInt(encodedSpan -> encodedSpan.length)
                .sum();
    }

    @Override
    public Call<Void> sendSpans(List<byte[]> encodedSpans) {
        encodedSpans.stream()
                .map(String::new)
                .forEach(System.out::println);

        return Call.create(null);
    }
}

你需要创建一个报告程序

@Bean
Reporter<Span> soutReporter(SoutSender soutSender) {
    return AsyncReporter.create(soutSender);
}

@Bean
Sender soutSender(SoutSender sender) {
    return new SoutSender();
}

这将注册一个额外的报告者,如果您只想保留自己的报告者,而不想向zipkin和您自己的系统报告,您需要相应地命名bean,请参阅文档:https://docs.spring.io/spring-cloud-sleuth/docs/current/reference/html/project-features.html#overriding-zipkin的自动配置

 类似资料:
  • 我想在日志文件的开头写入自定义头行。自定义头是日期/时间,XML文件名, 在log4j中,我可以通过扩展PatternLayout来创建自定义头。 我为自定义头包含了PatternLayout的log4j属性config和子类CustomFileHeaderLayout。工作很好。 log4j.属性

  • 我正在使用侦探2.0.x,我想添加我自己的跟踪ID,除了它自己的。 我正在浏览给定的链接 https://cloud.spring.io/spring-cloud-static/spring-cloud-sleuth/2.0.0.RC2/single/spring-cloud-sleuth.html#_propagation 我想修改跟踪如下代码:-公共静态最终字符串TAG _ NAME = "

  • 问题内容: 问题 我希望某些观点仅适用于网站的高级用户。 在项目中的各种应用程序中如何使用此装饰器? 问题答案: 你不必为此编写自己的装饰器,就像中已经包含的那样。 还有一个扩展此装饰器的代码段(),该代码段非常适合你的用例。 而且,要(重新)使用装饰器,只需将装饰器放在路径中的模块中,即可从任何其他模块导入它。

  • 我正在使用SpringBoot 2.4.8(它使用logback classic 1.2.3),我想配置一个自定义转换器,将多行堆栈跟踪折叠为一行(与这个问题相同)。 假设我有一段代码片段,出于测试目的故意抛出一个异常: 当我定义了转换规则并将符号添加到模式中时,logback只会忽略错误日志: logback.xml: CompressedStackTraceConverter.java: 当我

  • 我想为Atom编写一个命令,它由两个或多个预先存在的命令组成,比如“Select Line”和“Cut”。我该怎么做?

  • 问题内容: 假设您执行 e.printStackTrace() ,则捕获到一个异常并在标准输出(例如控制台)上获得以下内容: 现在,我想将其发送给log4j之类的记录器,以获取以下信息: 我怎样才能做到这一点? 问题答案: 您将异常直接传递给记录器,例如 取决于log4j来呈现堆栈跟踪。