otelcollectorがローカルにいればそちらで指定すれば良いがそうじゃないケースでサンプリングしたい場合に使える。
package main import ( "context" "log" "go.opentelemetry.io/otel" "go.opentelemetry.io/otel/attribute" "go.opentelemetry.io/otel/exporters/stdout/stdouttrace" "go.opentelemetry.io/otel/sdk/resource" sdktrace "go.opentelemetry.io/otel/sdk/trace" semconv "go.opentelemetry.io/otel/semconv/v1.7.0" ) func main() { // トレースエクスポーターの設定 exporter, err := stdouttrace.New(stdouttrace.WithPrettyPrint()) if err != nil { log.Fatalf("Failed to create stdouttrace exporter: %v", err) } // サンプリングレートを50%に設定 sampler := sdktrace.ParentBased(sdktrace.TraceIDRatioBased(0.5)) tp := sdktrace.NewTracerProvider( sdktrace.WithBatcher(exporter), // サンプラーを設定 sdktrace.WithSampler(sampler), sdktrace.WithResource(resource.NewWithAttributes( semconv.SchemaURL, attribute.String("service.name", "your-service-name"), )), ) otel.SetTracerProvider(tp) // ここからアプリケーションのトレースを開始します tracer := otel.Tracer("your-tracer-name") ctx, span := tracer.Start(context.Background(), "your-operation-name") defer span.End() // トレース対象の操作... }