Пользовательские пролеты с использованием аннотаций - PullRequest
0 голосов
/ 06 февраля 2019

Я пробую разные подходы для отслеживания микросервисов (в основном я работаю с сервисами, управляемыми событиями, используя RabbitMQ).

Что я тестирую:

  • spring-cloud-sleuth + zipkin + logstash-reporter
  • astic-apm-api +astic-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 голосов
/ 10 февраля 2019

Вы вызываете один метод из другого.Spring создает прокси вокруг вашего метода.Если вы вызываете один метод из другого из того же класса, то вы не проходите через прокси.Извлеките метод, аннотированный новым span, в отдельный класс, и он будет работать нормально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...