Spring Cloud Sleuth: экспорт данных из удаленной системы в локальный Zipkin

В моем приложении Spring Boot для трассировки я использую spring-cloud-starter-syuth (версия Hoxton.SR10). Это (все еще) монолитное приложение, поэтому я широко использую аннотацию @NewSpan для создания новых промежутков.

В своей среде разработки я также использую spring-cloud-starter-zipkin, который отлично работает.

Но на серверах наших клиентов у меня нет доступа к серверу Zipkin и мне не разрешено его устанавливать. Есть ли возможность сохранить данные, которые Spring отправляет в Zipkin, и импортировать их на мой локальный сервер Zipkin?


Решение благодаря вдохновению Марцина:

@Configuration
@ConditionalOnProperty(name = "custom.property", havingValue = "true")
public class SleuthConfiguration {
    @Bean("zipkinSender")
    Sender restTemplateSender() {
        return new Sender() {
           public Encoding encoding() { return Encoding.JSON; }
           public int messageMaxBytes() { return Integer.MAX_VALUE; }
           public int messageSizeInBytes(List<byte[]> list) { return Integer.MAX_VALUE; }

           @Override
           public Call<Void> sendSpans(List<byte[]> list) {
              String result = convertByteArrayToList(list);
              saveToFile(result);
              return new Call.Base<Void>() {...};
           }
        };
     }
}

Реализуйте convertByteArrayToList и saveToFile свои собственные, потому что мое решение зависит от пользовательских библиотек.


person Rokko_11    schedule 26.02.2021    source источник


Ответы (1)


Вы можете создать свой собственный SpanHandler bean-компонент, который принимает FinishedSpan, конвертирует в JSON и хранит его где-нибудь на вашем диске. Затем вы можете просто перебрать jsons и загрузить их на сервер Zipkin.

person Marcin Grzejszczak    schedule 26.02.2021
comment
Спасибо @ marcin-grzejszczak, вот так я и буду реализовывать! Создание настраиваемого SpanHandler и запись полного содержимого (span.toString ()) в файл с именем span.traceId_span.id.json. Насколько я понял, присоединение файлов по-прежнему нужно делать вручную. Но это нормально :) - person Rokko_11; 26.02.2021
comment
Не думаю, что вам нужно присоединяться к файлам. Просто отправьте их Зипкину, и Зипкин к ним присоединится. - person Marcin Grzejszczak; 26.02.2021
comment
Привет, Марчин, запись файла в CustomSpanHandler.end оказалась синхронной и влияет на производительность. Я решил подключиться к методу sendSpans компонента zipkinSender. Это происходит после завершения запроса, поэтому он не влияет на производительность. - person Rokko_11; 01.03.2021
comment
Вы можете записать его асинхронным способом. Тем не менее хорошо, что вы нашли решение, которое вам подходит! - person Marcin Grzejszczak; 11.03.2021