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-userverify-credentialschecks
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"было более заметно, убедитесь, что ваш бекенд отображает данные о библиотеке, либо добавляйте это значение как атрибут к спану.
