Распределённый трейсинг: trace context, W3C traceparent, проброс через gRPC и HTTP

↑ 7.2 Observability: логи, метрики, трейсинг, OpenTelemetry · ← Предыдущая · → Следующая

Желательно~3 мин чтенияУровень: senior

Зачем это на собесе

Как трейс проходит через границы сервисов и очередей.

Объяснение

Trace — дерево span-ов одного запроса. Каждый span: имя, время, родитель, атрибуты, события, статус.

Контекст передаётся между процессами заголовком W3C:

traceparent: 00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01
             ver  trace-id (128 бит)               parent span-id   flags (sampled)
tracestate:  vendor=value
baggage:     tenant=acme,userTier=gold          (сквозные метки, осторожно)
ТранспортКак пробрасывается
HTTPзаголовок traceparent автоматически инструментацией HttpClient/ASP.NET Core
gRPCmetadata traceparent, инструментация Grpc.Net.Client/AspNetCore
Kafka/RabbitMQзаголовки сообщения: продюсер вставляет, консьюмер извлекает и создаёт span с Link/родителем
Фоновые задачиявная передача контекста при постановке задачи
// Извлечение контекста из сообщения Kafka
var parent = Propagator.Extract(default, headers, (h, k) => h.TryGetLastBytes(k, out var v) ? [Encoding.UTF8.GetString(v)] : []);
using var activity = Source.StartActivity("process orders", ActivityKind.Consumer, parent.ActivityContext);

Виды span: Server, Client, Producer, Consumer, Internal.

Нюансы и подводные камни

  • Потерянный заголовок на границе (прокси, шлюз, очередь) обрывает трейс.
  • Baggage передаётся всем downstream-сервисам и попадает в сеть: не кладите секреты.
  • Семплирование должно быть согласованным (ParentBased), иначе трейсы неполные.
  • Пакетная обработка сообщений порождает один span на много входящих: используйте Link.
  • Часы разных серверов расходятся: порядок span-ов определяют по связям, а не по времени.

Практика

  1. Пробросьте трейс через HTTP, gRPC и Kafka и посмотрите его в Jaeger/Tempo.
  2. Найдите, где обрывается цепочка, и исправьте.
  3. Добавьте trace_id в ответ об ошибке.

Вопросы с ответами

Связанные темы