使用注释的自定义范围

时间:2019-02-06 17:35:35

标签: spring-cloud spring-cloud-sleuth

我正在尝试不同的微服务跟踪方法(我主要使用RabbitMQ处理事件驱动的服务)。

我要测试的内容:

  • spring-cloud-sleuth + zipkin + logstash-reporter
  • elastic-apm-api + elastic-apm-agent + logstash-reporter
  • 使用这两种方法,我正在研究默认输出是什么以及如何添加一些我们认为有趣的跨度/事务。 (通过“如何”,我指的是成本和对代码的影响)。

提供代码

@Autowired
Tracer tracer;

@NewSpan
@CaptureSpan
private URLConnection getUrlConnection(String url) throws IOException {
    ScopedSpan sp = tracer.startScopedSpanWithParent("getUrlConnection", tracer.currentSpan().context());
    LOGGER.info("COUOSQUDQSUD");
    sp.finish();
    return new URL(url).openConnection();
}

@StreamListener(Sink.INPUT)
@CaptureTransaction
public void transferToS3(FileEntry fileEntry) throws IOException {
    MDC.put("document_id", fileEntry.getId());
    LOGGER.info("Handling Transfer");
    URLConnection fileUrlConnection = getUrlConnection(fileEntry.getUrl());
    PutObjectResponse response = s3Client.putObject(PutObjectRequest.builder()
                    .bucket(fileEntry.getS3().getBucket())
                    .key(fileEntry.getFileName())
                    .build(), RequestBody.fromInputStream(
            new BufferedInputStream(fileUrlConnection.getInputStream()),
            fileUrlConnection.getContentLength()
            )
    );
    fileEntry.getS3().setPushedAt(new Date().getTime());
    fileEntry.getS3().setPath(response.getValueForField("key", String.class).toString());
    LOGGER.info("Transfer done");
}

我的问题/评论/问题

  • @NewSpan在Zipkin中未添加跨度,整个“ transferToS3”被视为一个跨度。我尝试了其他几个注释,但均未成功。
  • 要使用这个新跨度,我使用ScopedSpan sp = tracer.startScopedSpanWithParent("getUrlConnection", tracer.currentSpan().context());sp.finish()。跨度在ZipKin中可见,但与仅放置@NewSpan相比并没有真正的吸引力。 我想念什么吗?

  • Elasticsearch APM代理+ API似乎只需要添加@CaptureTransaction@CaptureSpan即可正确处理此问题。我知道它不是完美的,因为它不能直接挂接到消费者电话上,也不能有效支持我的用例跟踪。 但这还需要添加代理。

谢谢:)。

1 个答案:

答案 0 :(得分:0)

您正在从另一个方法中调用一个方法。 Spring正在围绕您的方法创建代理。如果您从同一个类的另一个方法中调用一个方法,则不会通过代理。将用新跨度注释的方法提取到单独的类中,它将很好地工作。