Я пробую разные подходы для отслеживания микросервисов (в основном я работаю с сервисами, управляемыми событиями, используя 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
.Я знаю, что он не идеален, потому что он не подключается напрямую к вызову потребителя и не поддерживает эффективную трассировку в моем случае использования.Но также необходимо добавить агента.
Спасибо:).