TIP

Эта статья направлена на помощь разработчикам в интеграции методов получения TraceID и добавления TraceID в логи приложения в коде приложения, подходящей для разработчиков бэкенда с некоторым опытом разработки.

Бизнес-лог, связанный с TraceID

Содержание

Предпосылки

  • Чтобы правильно ассоциировать несколько автоматически отправленных спанов (разные модули/узлы/сервисы, вызванные в рамках одного запроса) в единый трейс, HTTP-заголовки запроса сервиса будут включать TraceID и другую информацию, используемую для ассоциации трассировки.

  • Трасса представляет собой процесс вызова одного запроса, а TraceID — это уникальный идентификатор, идентифицирующий этот запрос. С TraceID в логах можно ассоциировать трассировку с логами приложения.

Основываясь на вышеуказанных предпосылках, в этой статье объясняется, как получить TraceID из заголовков HTTP-запроса и добавить его в логи приложения, что позволит вам точно запрашивать данные логов на платформе с использованием TraceID.

Добавление TraceID в логи Java-приложения

TIP
  • Следующие примеры основаны на фреймворке Spring Boot и используют Log4j и Logback для иллюстрации.

  • Ваше приложение должно соответствовать следующим предварительным условиям:

    • Тип и версия библиотеки логирования должны соответствовать следующим требованиям:

      Библиотека логированияТребование к версии
      Log4j 11.2+
      Log4j 22.7+
      Logback1.0+
    • Приложение было проинъектировано с помощью Java Agent.

Метод 1: Настройка logging.pattern.level

Измените параметр logging.pattern.level в конфигурации вашего приложения следующим образом:

logging.pattern.level = trace_id=%mdc{trace_id}

Метод 2: Настройка CONSOLE_LOG_PATTERN

  1. Измените файл конфигурации logback следующим образом.

    TIP

    Консольный вывод используется здесь в качестве примера, где %X{trace_id} указывает на значение ключа trace_id, извлеченное из MDC.

    <property name="CONSOLE_LOG_PATTERN"
        value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} [trace_id=%X{trace_id}] %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}}"/>
  2. В классе, где нужно выводить логи, добавьте аннотацию @Slf4j и используйте объект логирования для вывода логов, как показано ниже:

    @RestController
    @Slf4j
    public class ProviderController {
    
        @GetMapping("/hello")
        public String hello(HttpServletRequest request) {
            log.info("request /hello");
            return "hello world";
        }
    }

Добавление TraceID в логи Python-приложения

  1. В коде приложения добавьте следующий код для получения TraceID из заголовков запроса. Пример кода приведен ниже и может быть скорректирован по мере необходимости:

    TIP

    Функция getForwardHeaders извлекает информацию о трассировке из заголовков запроса, где значение x-b3-traceid является TraceID.

       def getForwardHeaders(request):
           headers = {}
           incoming_headers = [
               'x-request-id',  # Все приложения должны передавать x-request-id для журналов доступа и последовательного трассирования/логирования решений по выборке
               'x-b3-traceid',  # Заголовок B3 трассировки, совместимый с Zipkin, OpenCensusAgent и конфигурациями Stackdriver
               'x-b3-spanid',
               'x-b3-parentspanid',
               'x-b3-sampled',
               'x-b3-flags',
           ]
           for ihdr in incoming_headers:
               val = request.headers.get(ihdr)
               if val is not None:
                   headers[ihdr] = val
    
           return headers
  2. В коде приложения добавьте следующий код для включения полученного TraceID в логи. Пример кода приведен ниже и может быть скорректирован по мере необходимости:

    headers = getForwardHeaders(request)
    tracing_section = ' [%(x-b3-traceid)s,%(x-b3-spanid)s] ' % headers
    logging.info(tracing_section + "Oops, unexpected error happens.")

Метод верификации

  1. Нажмите на Трассировка в левой панели навигации.

  2. В критериях запроса выберите TraceID, введите TraceID для запроса и нажмите Добавить в запрос.

  3. В отображаемых данных трассировки ниже нажмите Просмотреть лог рядом с TraceID.

  4. На странице Запрос лога отметьте Содержит Trace ID; система будет отображать только данные логов, содержащие TraceID.