如何在 Spring Sleuth / Brave 中编写自定义跟踪发件人
How to write custom trace sender in Spring Sleuth / Brave
我公司有定制的分布式跟踪解决方案。
我已经为它准备好了 Java client/proxy 库,它能够将 traces/spans 发送到服务器。
但是我想将它与 Spring Boot Sleuth / Brave 集成,
所以要从 Brave 实现某种桥接,Brave 会使用我的 client/proxy 库来发送 traces/spans.
如何在 Brave 中仅自定义发送者部分?
另一种方法是从头开始实施所有 Sleuth api 接口(Tracer、Span、TraceContext 等),这是一项艰巨的任务。
我想使用 Brave 实现,只是为了注入某种 bridge/adapter,它将使用我的自定义 client/proxy。
我不建议实现所有 Sleuth 接口,那样的话你正在编写一个 Tracing 库(你正在重写 Brave)。
您可以实现 zipkin2.reporter.Sender
接口并从中创建一个 @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);
}
}
您还需要创建一个 Reporter<zipkin2.Span>
bean,但是为此,您不需要实现任何东西:
@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-the-auto-configuration-of-zipkin
我公司有定制的分布式跟踪解决方案。 我已经为它准备好了 Java client/proxy 库,它能够将 traces/spans 发送到服务器。
但是我想将它与 Spring Boot Sleuth / Brave 集成, 所以要从 Brave 实现某种桥接,Brave 会使用我的 client/proxy 库来发送 traces/spans.
如何在 Brave 中仅自定义发送者部分?
另一种方法是从头开始实施所有 Sleuth api 接口(Tracer、Span、TraceContext 等),这是一项艰巨的任务。
我想使用 Brave 实现,只是为了注入某种 bridge/adapter,它将使用我的自定义 client/proxy。
我不建议实现所有 Sleuth 接口,那样的话你正在编写一个 Tracing 库(你正在重写 Brave)。
您可以实现 zipkin2.reporter.Sender
接口并从中创建一个 @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);
}
}
您还需要创建一个 Reporter<zipkin2.Span>
bean,但是为此,您不需要实现任何东西:
@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-the-auto-configuration-of-zipkin