Golang пример отправки трейса в Open Telemetry Collector
Чтобы отправить трассировки в OpenTelemetry Collector из Go-программы, вам нужно использовать OpenTelemetry Go SDK. Ниже приведен пример того, как это сделать:
1. Установка зависимостей
Сначала убедитесь, что у вас установлены необходимые библиотеки для работы с OpenTelemetry в Go:
1 2 3 4 5 |
go get go.opentelemetry.io/otel go get go.opentelemetry.io/otel/exporters/otlp/otlpgrpc go get go.opentelemetry.io/otel/sdk/trace go get go.opentelemetry.io/otel/trace |
2. Пример кода для отправки трейсов в OpenTelemetry Collector
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 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
package main import ( "context" "fmt" "log" "go.opentelemetry.io/otel" "go.opentelemetry.io/otel/exporters/otlp/otlpgrpc" "go.opentelemetry.io/otel/sdk/trace" "go.opentelemetry.io/otel/trace" "go.opentelemetry.io/otel/attribute" ) func main() { // Создание экспортера OTLP gRPC для отправки данных в OpenTelemetry Collector ctx := context.Background() exporter, err := otlpgrpc.New(ctx, otlpgrpc.WithInsecure(), otlpgrpc.WithEndpoint("localhost:4317")) if err != nil { log.Fatalf("failed to create OTLP exporter: %v", err) } // Создание провайдера трассировки с использованием экспортера tracerProvider := trace.NewTracerProvider( trace.WithSyncer(exporter), trace.WithResource( attribute.String("service.name", "example-service"), ), ) otel.SetTracerProvider(tracerProvider) // Создание трассировщика и создание трейса tracer := otel.Tracer("example-tracer") ctx, span := tracer.Start(ctx, "example-span") span.SetAttributes(attribute.String("key", "value")) // Симуляция выполнения работы fmt.Println("Executing some work...") span.End() // Завершение трассировки и освобождение ресурсов if err := tracerProvider.Shutdown(ctx); err != nil { log.Fatalf("failed to shut down tracer provider: %v", err) } } |
3. Объяснение кода
otlpgrpc.New()
: Создает OTLP экспортера с использованием gRPC для отправки данных в OpenTelemetry Collector.trace.NewTracerProvider()
: Создает нового провайдера трассировки, который будет использовать экспортера для отправки данных.otel.SetTracerProvider()
: Устанавливает провайдера трассировки, чтобы его можно было использовать во всей программе.tracer.Start()
: Создает новый спан для трассировки.
4. Конфигурация OpenTelemetry Collector
Убедитесь, что OpenTelemetry Collector настроен для получения данных через gRPC на порту 4317 (или другом, который вы указали в конфигурации):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
receivers: otlp: protocols: grpc: endpoint: "0.0.0.0:4317" exporters: logging: loglevel: debug service: pipelines: traces: receivers: [otlp] exporters: [logging] |
5. Запуск программы
- Запустите OpenTelemetry Collector:
12otelcol --config=config.yaml
- Запустите вашу Go-программу:
12go run main.go
6. Проверка
Проверьте, что OpenTelemetry Collector получает трассировки, просматривая его лог:
1 2 |
otelcol --config=config.yaml |
В логах вы увидите трассировки, которые ваша Go-программа отправляет в Collector.
Вывод
В этом примере показано, как отправить трейсы в OpenTelemetry Collector из Go-программы с использованием OpenTelemetry Go SDK. Вы можете расширить пример, добавляя больше спанов, атрибутов и логики для более сложной трассировки.
Recommended Posts
Как посмотреть метрики в Prometheus UI
12.03.2024