Golang OpenTelemetry: про наименования трейсеров и спанов
В коде:
1 2 3 |
tracer := otel.Tracer("miner-login") ctx, spanLogin := tracer.Start(ctx, "checks") |
возникает вопрос: почему название "miner-login"
не появляется в трейсе, а вместо этого фигурирует "checks"
? Давайте разберёмся.
1. Роль otel.Tracer("miner-login")
Название, переданное в метод otel.Tracer
, используется для идентификации источника трейсов (инструмента, создающего трейс). Например, "miner-login"
может указывать на то, что трейс создаётся из конкретного модуля или функции в вашем приложении.
Это метаданные, которые бекенд (например, Jaeger, Zipkin) использует для группировки и анализа. Название miner-login
само по себе не влияет на названия отдельных спанов.
2. Роль tracer.Start(ctx, "checks")
- Параметр
"checks"
— это имя создаваемого спана. - Именно оно отображается в трейсе как имя операции. Каждый спан внутри трейса может иметь своё уникальное имя.
Пример: если вы создаёте несколько спанов для разных этапов выполнения, их имена могут быть такими:
authenticate-user
verify-credentials
checks
3. Почему miner-login
не отображается в трейсе?
Название "miner-login"
относится к Tracer
, а не к отдельным спанам. Обычно эта информация отправляется в бекенд вместе со спанами, но:
- Она может быть отображена как дополнительное поле в бекенде (например, в колонке «Resource» или «Instrumentation Library»).
- Если вы не видите
"miner-login"
, убедитесь, что ваш бекенд поддерживает отображение этой информации.
4. Перезаписывает ли Tracer данные контекста?
Нет, название "miner-login"
не перезаписывает контекст. Контекст (ctx
) передаётся для связывания спанов, передачи метаданных и обработки распределённых трейсов. Название miner-login
указывает только на источник трейса, а контекст остаётся неизменным для других операций.
Как проверить, где фигурирует "miner-login"
:
- Посмотреть в бекенде:
- В Jaeger или Zipkin попробуйте найти информацию в секции «Instrumentation Library» или «Attributes».
- Вывести данные вручную: Чтобы проверить, что
miner-login
передаётся, вы можете использовать логирование:
12fmt.Println(spanLogin.TracerProvider().(*trace.TracerProvider).InstrumentationLibrary()) - Задать атрибуты вручную: Если вы хотите, чтобы название
"miner-login"
явно отображалось, добавьте его как атрибут к спану:
12spanLogin.SetAttributes(attribute.String("source", "miner-login"))
Вывод
"miner-login"
— это идентификаторTracer
и не влияет на имена спанов.- Названия спанов задаются вручную через
Start(ctx, "checks")
. - Чтобы
"miner-login"
было более заметно, убедитесь, что ваш бекенд отображает данные о библиотеке, либо добавляйте это значение как атрибут к спану.
Recommended Posts
Golang Sarama: настройка Partitioner
20.03.2024