Используете ли трейсинг, например Jaeger
Что проверяют
Как вы отлаживаете запрос, идущий через несколько сервисов, и знаете ли современный стек трейсинга в Go. Следом обычно спрашивают, как контекст трейса переходит между сервисами и какую долю запросов вы сэмплируете в проде.
Как отвечать
Расскажите, как трейсинг устроен у вас, цифры приводите свои. Каркас:
- стек: инструментирование через OpenTelemetry (
go.opentelemetry.io/otel), экспорт по OTLP в OTel Collector или прямо в Jaeger, который принимает OTLP нативно. Jaeger v2 сам построен на OpenTelemetry Collector, аjaeger-client-goи OpenTracing устарели; - инициализация:
TracerProviderс батчевым экспортом, ресурс сservice.name, пропагаторpropagation.TraceContext{}. При остановке сервиса нуженtp.Shutdown(ctx), иначе последние спаны теряются; - инструментирование:
otelhttpоборачивает HTTP-обработчики и клиент,otelgrpcподключается через stats handler. Свои спаны:ctx, span := tracer.Start(ctx, "LoadOrder")иdefer span.End(); - контекст: трейс живёт в
context.Context, между сервисами едет в заголовкеtraceparent(W3C Trace Context), через Kafka в заголовках сообщения; - сэмплирование: в проде обычно
ParentBasedс долей запросов, а tail sampling в коллекторе сохраняет все трейсы с ошибками и медленные; - связь с логами:
trace_idв каждой строке лога через обработчикslog, чтобы из логов переходить прямо в трейс.
Пример нужен конкретный: какой запрос тормозил и что показал трейс. Скажем, N+1 к базе или последовательные вызовы, которые можно распараллелить. Если трейсинга в проекте не было, скажите честно и опишите, как внедрили бы его по этой схеме.
Где спотыкаются
Теряют контекст: создают context.Background() внутри обработчика или запускают горутину без ctx. Трейс рвётся, и в Jaeger видно несколько несвязанных деревьев.
Пишут в атрибуты спанов всё подряд: тела запросов, персональные данные, уникальные значения. Хранилище раздувается, а данные пользователей оседают в системе мониторинга.
Приводят проценты ускорения, которые не могут объяснить. Одна честная история про найденный узкий участок лучше, чем «сократили время на 30%» без методики замера.