OpenTelemetry Go: создание трассировщика
В OpenTelemetry Go не нужно создавать новый экземпляр трассировщика для каждого трейса. Обычно, один и тот же трассировщик (tracer) используется для создания нескольких спанов (spans) в рамках одной трассировки (trace).
Объяснение
- Трассировщик (
Tracer
): Это объект, который используется для создания спанов. Он представляет собой средство для создания и управления трассировками и спанами. - Спан (
Span
): Это отдельная единица работы в контексте трассировки, которая содержит информацию о выполнении операции.
Рекомендованная практика
В большинстве случаев достаточно создать один трассировщик и использовать его для создания спанов. Вы можете использовать один и тот же экземпляр трассировщика для создания спанов, что упрощает и уменьшает количество создаваемого кода.
Пример использования одного трассировщика для нескольких спанов
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
package main import ( "context" "go.opentelemetry.io/otel" "go.opentelemetry.io/otel/trace" ) func main() { // Получение глобального трассировщика (или можно использовать конкретный экземпляр) tracer := otel.Tracer("example-tracer") // Создание первого спана ctx, span := tracer.Start(context.Background(), "first-span") span.End() // Завершение первого спана // Создание второго спана в том же контексте ctx, span = tracer.Start(ctx, "second-span") span.End() // Завершение второго спана // Создание третьего спана, связанного с предыдущим ctx, span = tracer.Start(ctx, "third-span") span.End() // Завершение третьего спана } |
Пояснение к коду
otel.Tracer("example-tracer")
создает трассировщик с именем"example-tracer"
. Имя используется для идентификации источника трассировок.- Вы можете использовать этот же трассировщик для создания нескольких спанов, которые будут связаны друг с другом в одной трассировке.
Причины использовать один трассировщик
- Эффективность: Создание одного трассировщика и повторное его использование упрощает управление памятью и снижает накладные расходы.
- Контекст трассировки: Все спаны, созданные одним трассировщиком, могут передаваться и передавать контекст между собой.
- Лучшее отслеживание: Один трассировщик позволяет связать все спаны в одну трассировку, обеспечивая полное отслеживание пути выполнения.
Когда следует использовать разные трассировщики
- Разные источники трассировок: Если у вас есть отдельные части приложения, которые должны отслеживаться независимо (например, разные микросервисы или модули), вы можете использовать разные трассировщики с разными именами.
- Изоляция контекста: Если необходимо изолировать контексты для разных логических операций, может быть полезно создать отдельные трассировщики.
Вывод
Обычно достаточно создавать один экземпляр трассировщика и использовать его для создания нескольких спанов в контексте одной трассировки. Это упрощает код и позволяет эффективно управлять отслеживанием операций.
Recommended Posts
Golang Sarama: настройка Partitioner
20.03.2024