Как интегрировать Sleuth в загрузочную пружину 1.5 для распространения идентификатора трассировки в новой весенней загрузке 2.2? - PullRequest
0 голосов
/ 30 марта 2020

У нас есть микросервисная архитектура, построенная на Spring Boot 2.2, и мы используем Spring Cloud Sleuth для распространения идентификатора трассы.

Однако у нас есть один старый огромный монолит c, созданный с помощью Spring Boot 1.5.2 что он не использует Sleuth (обновление этого монолитного c до Spring Boot 2.x не вариант). Я попытался интегрировать Spring Cloud Sleuth 1.3.5 в это, но он также не генерирует идентификатор трассировки (и не нашел документации об этом).

В настоящее время я закодировал этот фильтр, чтобы зарегистрировать свою транзакцию как альтернативу, но Я не хочу изобретать велосипед:

@Component
public class TransactionLoggingFilter implements Filter {

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain) throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest) servletRequest;

        String txnId = ofNullable(request.getHeader(TXN_ID_HEADER))
                .orElse(randomUUID().toString().substring(0, 8));

        MDC.put(TXN_ID, txnId);
        chain.doFilter(request, servletResponse);
        MDC.remove(TXN_ID);
    }
}

Мне было интересно, как я могу добавить Sleuth и программно создать идентификатор трассировки / диапазона, чтобы он мог беспрепятственно распространяться на другие микросервисы с помощью Spring Boot 2.2.

Более старая документация, которую я нашел о Spring Cloud Sleuth, - это 2.1.6. Итак, я не нашел способа использовать Sleuth с Spring Boot 1.5. Знаете ли вы, совместимо ли оно с ним и как я могу его интегрировать?

Мне не нравится приведенный выше фрагмент, потому что я создаю другой идентификатор трассировки, который не перехватывается Sleuth.

Ответы [ 2 ]

0 голосов
/ 13 апреля 2020

Нашли проблему с моим ответом. Совместное использование для других, которые могут оказаться полезными.

Чтобы использовать весеннюю загрузку 1.5, версия Spring Cloud Sleuth должна быть 1.3.6. Проблема, с которой мы столкнулись, заключалась в том, что у нас был собственный logback. xml, и это ограничивало Sleuth печати идентификатора trace / span.

Поэтому, когда мы добавили конфигурацию весенней загрузки default.xml в logback. xml, он начал печатать необходимые журналы:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!-- Needed for Sleuth to print the logs -->
    <include resource="org/springframework/boot/logging/logback/defaults.xml"/>

    <variable name="LOGS_DIR_VAR" value="${LOGS_DIR:-/logs}"/>

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>
                %clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}
            </pattern>
        </encoder>
    </appender>

    <root level="info">
        <appender-ref ref="STDOUT"/>
    </root>
</configuration>
0 голосов
/ 30 марта 2020

Если вы следуете соглашению B3 Headers, которое должно работать из коробки. В общем, вам следует обновить до последней версии как можно скорее, потому что 1.3.x древний.

Заголовки, о которых я говорю, здесь для 1.3.6 (https://github.com/spring-cloud/spring-cloud-sleuth/blob/v1.3.6.RELEASE/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/Span.java#L79 -L86 ) и здесь для версии 2.x Sleuth (https://github.com/openzipkin/brave/blob/release-5.10.2/brave/src/main/java/brave/propagation/B3Propagation.java#L102 -L125 )

...