Как отправлять журналы целиком в jaeger span

Есть ли способ поместить журналы std, предоставленные приложением, и ошибки в диапазон?

Я знаю, что могу отправить некоторые журналы с span.LogKV() или span.LogFields(), но из-за этого код выглядит плохо, в то время как есть одинаковые журналы как с регистратором приложений, так и с регистратором диапазона.

Я ищу автоматический способ поместить все журналы в соответствующий диапазон.


person meshkati    schedule 31.10.2019    source источник


Ответы (2)


Если вы используете весеннюю загрузку с автоматической конфигурацией, журналы, напечатанные с использованием log4j, будут инструментированы и отправлены автоматически в диапазоне.

person Sergio Santiago    schedule 18.11.2019

В Go это не очень просто и во многом зависит от библиотеки журналов, которую вы используете, и интерфейса, который она предоставляет. Один пример реализован в демонстрации HotROD в репозитории Jaeger и описано в записи блога, сопровождающей демонстрацию. Он использует go.uber.org/zap библиотеку ведения журнала внизу и позволяет записывать операторы журнала, принимающие аргумент Context:

logger.For(ctx).Info(
    "Searching for nearby drivers",
    zap.String("location", location),
)

За кулисами logger.For(ctx) фиксирует текущие интервалы трассировки и добавляет все операторы журнала в этот интервал в дополнение к отправке их в stdout, как обычно.

Насколько мне известно, go.uber.org/zap пока не поддерживает этот режим регистрации изначально, и поэтому требует оболочки.

Если вы используете другую библиотеку ведения журнала, то на высоком уровне это должно произойти:

  1. должен быть способ передачи контекста методам ведения журнала, который может быть зафиксирован внутри структурой ведения журнала в структуре данных сообщения журнала.
  2. "appender" (или как там он называется, я использую терминологию log4j), отвечающий за прием сообщений журнала и их запись в некоторый выходной поток, может быть расширен для извлечения Span из контекста и записи сообщения журнала в Span с помощью span.LogKV() или аналогичный API.
person Yuri Shkuro    schedule 10.12.2019