diff --git a/ocis-pkg/tracing/tracing.go b/ocis-pkg/tracing/tracing.go new file mode 100644 index 0000000000..1965535594 --- /dev/null +++ b/ocis-pkg/tracing/tracing.go @@ -0,0 +1,41 @@ +package tracing + +import ( + "fmt" + + "go.opentelemetry.io/otel/exporters/jaeger" + "go.opentelemetry.io/otel/sdk/resource" + sdktrace "go.opentelemetry.io/otel/sdk/trace" + semconv "go.opentelemetry.io/otel/semconv/v1.4.0" +) + +// GetTraceProvider returns a configured open-telemetry trace provider. +func GetTraceProvider(collectorEndpoint, traceType, serviceName string) (*sdktrace.TracerProvider, error) { + switch t := traceType; t { + case "jaeger": + { + exp, err := jaeger.New( + jaeger.WithCollectorEndpoint( + jaeger.WithEndpoint(collectorEndpoint), + ), + ) + if err != nil { + return nil, err + } + + return sdktrace.NewTracerProvider( + sdktrace.WithBatcher(exp), + sdktrace.WithResource(resource.NewWithAttributes( + semconv.SchemaURL, + semconv.ServiceNameKey.String(serviceName)), + ), + ), nil + } + case "agent": + fallthrough + case "zipkin": + fallthrough + default: + return nil, fmt.Errorf("invalid trace configuration") + } +}