Size: a a a

Programming Offtop

2021 February 08

Kd

Konstantin dmz9 in Programming Offtop
Daniil Karpov
самый забавный холивар который я видел
источник

VP

Vladimir Petrakovich in Programming Offtop
Unat
Так и корутина рано или поздно свалится в синхронный вызов
Вот там уже интереснее, но средства всё равно есть.
И даже интеграция с MDC из SLF4J из коробки.
источник

AD

Aleksey D. in Programming Offtop
интересно, кто там победил
источник

Kd

Konstantin dmz9 in Programming Offtop
Aleksey D.
интересно, кто там победил
звуки послушай
источник

AM

Andrew Mikhaylov in Programming Offtop
Aleksey D.
интересно, кто там победил
🌈 Дружба 🌟
источник

AK

Anton Korotkikh in Programming Offtop
Unat
Господа, позвольте отвлечь вас от насущных проблем и поговорить об абстрактном. Третий день голову мою терзают мысли о том, как бы получше, поэлегантнее да поудобнее прикрутить логи к бэкенду. Да не простые, а с добавлением идентификатора запроса к каждой записи. Вся чудо-поделка пилится на Go, но мне кажется, что это не сильно принципиально.

Вот пришёл запрос, я ему бац! и приделал uuid в контекст используя middleware. То-есть могу из объекта запроса в любой момент получить его идентификатор.
Теперь приходит запрос в handler/обработчик, там всё чинно-гладко. logFooBar(getRequestID(request), "Hello, world, you obosralza")
Теперь обработчик тянется своими ручками в сервис. Вызывает handler.fooBarUsersService.searchForAlkogolik(parseRequestBodyFilter(request)) и дальше пляски идут внутри сервиса.

Вопрос: как мне передать идентификатор внутрь сервиса? Какие есть техники? Можно явно первым аргументом закинуть, можно сделать копию сервиса _для_этого_запроса_ и передать туда идентификатор полем, можно крутануть эту баламуть в контексте каком-нибудь как-нибудь и тягать оттуда (не хочу, звучит как бред).

А сервис потом ещё в репозиторий сходит базу потормошить, да пару запросов с рассылкой спама отправит в sendgrid.
если каждый запрос и не хочешь  минимизипровать проблемы с перфом, то тебе нужны не просто логи, а трейсинг.
смотри jaeger и zipkin например.

ежели хочешь быть вообще на острие последних веяний то сюда
https://opentelemetry.io/

по техникам. техника называется x-request-id, к каждому запросу цепляется хедер с уникальным ид. система телеметрии выделяет этот ид в отдельный тег (setTag в контекте open tracing и open telemetry), где по нему потом запрос благополучно ищется в куче трейсов (считай логов)
источник

U

Unat in Programming Offtop
Anton Korotkikh
если каждый запрос и не хочешь  минимизипровать проблемы с перфом, то тебе нужны не просто логи, а трейсинг.
смотри jaeger и zipkin например.

ежели хочешь быть вообще на острие последних веяний то сюда
https://opentelemetry.io/

по техникам. техника называется x-request-id, к каждому запросу цепляется хедер с уникальным ид. система телеметрии выделяет этот ид в отдельный тег (setTag в контекте open tracing и open telemetry), где по нему потом запрос благополучно ищется в куче трейсов (считай логов)
Хедер я и так прицепил, это понятно. Но эта информация существует ровно до момента выхода из обработчика в сервис, где ни реквеста, ни идентификатора нет.
источник

AD

Aleksey D. in Programming Offtop
Anton Korotkikh
если каждый запрос и не хочешь  минимизипровать проблемы с перфом, то тебе нужны не просто логи, а трейсинг.
смотри jaeger и zipkin например.

ежели хочешь быть вообще на острие последних веяний то сюда
https://opentelemetry.io/

по техникам. техника называется x-request-id, к каждому запросу цепляется хедер с уникальным ид. система телеметрии выделяет этот ид в отдельный тег (setTag в контекте open tracing и open telemetry), где по нему потом запрос благополучно ищется в куче трейсов (считай логов)
ого, так вот что это за X-Request-ID на прошлой работе были
источник

BP

Bogdan Panchenko in Programming Offtop
Andrew Mikhaylov
А вот Навальный учил пайтон
Оставь козырь на пятницу
источник

U

Unat in Programming Offtop
Или там уже всё решено и оно само протягивает этот RequestID через все вызовы?
источник

AK

Anton Korotkikh in Programming Offtop
Unat
Хедер я и так прицепил, это понятно. Но эта информация существует ровно до момента выхода из обработчика в сервис, где ни реквеста, ни идентификатора нет.
суть в том, что ты должен передавать его насквозь в остальные интеграции. твой сервис делает запрос сам на сонвоание входящего - добавляй этот же ид. причём не важно хттп это или что-то другое, например amqp или kafka, в любом протокле, где есть хедеры ты прокидываешь этот же ид, а остальные системы используют эту же систему телеметрии и единую помойку логов-трейсов.
по итогу по ид входящего запрсоа ты можешь отслеживать всю цепочку взаимодействия на различных сервсиах.
источник

AK

Anton Korotkikh in Programming Offtop
в идеале все кучка сервсиов должна быть подцеплина к единой телеметрии
источник

U

Unat in Programming Offtop
Anton Korotkikh
суть в том, что ты должен передавать его насквозь в остальные интеграции. твой сервис делает запрос сам на сонвоание входящего - добавляй этот же ид. причём не важно хттп это или что-то другое, например amqp или kafka, в любом протокле, где есть хедеры ты прокидываешь этот же ид, а остальные системы используют эту же систему телеметрии и единую помойку логов-трейсов.
по итогу по ид входящего запрсоа ты можешь отслеживать всю цепочку взаимодействия на различных сервсиах.
Да-да, именно это я и пытаюсь сделать. У меня вопрос по деталям реализации - как передать этот идентификатор в коде без лишнего кода.
источник

AA

Andrey Akimov in Programming Offtop
Aleksey D.
ого, так вот что это за X-Request-ID на прошлой работе были
++++ тоже розвеваюсь
источник

AK

Anton Korotkikh in Programming Offtop
Unat
Да-да, именно это я и пытаюсь сделать. У меня вопрос по деталям реализации - как передать этот идентификатор в коде без лишнего кода.
есть два стула.

первый с ручным контролем, сам дописываешь нужный код, чётко контролируешь что и как логируется.

второй магический и мутный. береёшь решение, где есть автоинструментация кода и присоски к рантайму, скажем так, чтобы они сами за тебя расставляли теги и разбирали основные интеграции - хттп, amqp итд. это за деньги и может быть опасно
https://www.dynatrace.com/

бонусное седалище для самых модных:
при деплое сервисов, обвешиваешь их сайдкарами со специальными проксями пепрехватчиками. т.е. всеь трафик по основным протоклоам проходит через них, они же занимаются service discovery - istio, linkerd вот эти все ребята. они же могут сами снимать трейсы
источник

U

Unat in Programming Offtop
Да уже первый выбрал, присаживаюсь поудобнее.
источник

AM

Andrew Mikhaylov in Programming Offtop
Unat
Да уже первый выбрал, присаживаюсь поудобнее.
Можно, наверна, вместо враппера над сервисом сделать враппер над трейсером, которому нужен тот айдишник.
источник

AM

Andrew Mikhaylov in Programming Offtop
И уже его в сервис при вызове передавать.
источник

U

Unat in Programming Offtop
И аргумент будет, и враппер :)
источник

AM

Andrew Mikhaylov in Programming Offtop
Зато SRP. К примеру, при мокировании тебе не надо будет ни секунды тратить на то, чтобы думать о моках ни трейсера, ни рыквест айди.
источник