IT заметки по программированию
IT заметки по программированию
IT заметки по программированию
IT заметки по программированию

Golang OpenTelemetry: как пробрасывать трейсы между архитектурными слоями

В Go для передачи контекста трассировки между архитектурными слоями обычно используется стандартный механизм контекста (context.Context) совместно с инструментами OpenTelemetry (Otel). Вот пошаговое руководство, как это сделать:


1. Создание и управление контекстом трассировки

Инициализация трейсинга

Перед началом работы убедитесь, что ваш проект настроен для использования OpenTelemetry. Обычно это включает настройку экспорта трассировок (например, в Jaeger, Zipkin или OTLP).

Пример инициализации:

Вызывайте initTracer при запуске приложения.


2. Создание нового трейса в слое верхнего уровня

В верхнем уровне архитектуры (например, в HTTP- или gRPC-обработчике) создавайте новый спан и добавляйте его в контекст.

Пример для HTTP-обработчика:

3. Передача контекста между слоями

Передавайте context.Context через функции или методы, чтобы сохранить связность трейсов. Каждый слой может создавать новые дочерние спаны.

Пример бизнес-логики:

Пример взаимодействия с базой данных:

4. Обогащение трейсов

Вы можете добавлять атрибуты (ключ-значение) и события в спаны на каждом уровне:

Добавление атрибутов:

Добавление событий:

5. Проверка контекста трейса

Вы можете проверить, содержит ли context.Context активный спан, с помощью:

6. Межсервисное взаимодействие

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

Пример передачи через HTTP:

Резюме

  • Используйте context.Context: передавайте контекст через все уровни архитектуры.
  • Создавайте дочерние спаны: каждый слой может добавлять свои спаны, сохраняя общую цепочку.
  • Обогащайте трейсы: добавляйте атрибуты и события, чтобы упростить диагностику.
  • Передавайте контекст между сервисами: используйте пропагаторы для сериализации и десериализации контекста трассировки.

Это позволяет интегрировать трейсинг в многослойную архитектуру и сохранять полную картину цепочек вызовов.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *