@@ -29,17 +29,63 @@ import (
2929 "go.opentelemetry.io/otel/sdk/resource"
3030 sdk "go.opentelemetry.io/otel/sdk/trace"
3131 semconv "go.opentelemetry.io/otel/semconv/v1.4.0"
32+ "go.opentelemetry.io/otel/trace"
3233 "go.uber.org/zap"
3334
3435 "github.com/milvus-io/milvus/pkg/log"
3536 "github.com/milvus-io/milvus/pkg/util/paramtable"
3637)
3738
38- func Init () {
39+ func Init () error {
3940 params := paramtable .Get ()
4041
42+ exp , err := CreateTracerExporter (params )
43+ if err != nil {
44+ log .Warn ("Init tracer faield" , zap .Error (err ))
45+ return err
46+ }
47+
48+ SetTracerProvider (exp , params .TraceCfg .SampleFraction .GetAsFloat ())
49+ otel .SetTextMapPropagator (propagation .NewCompositeTextMapPropagator (propagation.TraceContext {}, propagation.Baggage {}))
50+ log .Info ("Init tracer finished" , zap .String ("Exporter" , params .TraceCfg .Exporter .GetValue ()))
51+ return nil
52+ }
53+
54+ func CloseTracerProvider (ctx context.Context ) error {
55+ provider , ok := otel .GetTracerProvider ().(* sdk.TracerProvider )
56+ if ok {
57+ err := provider .Shutdown (ctx )
58+ if err != nil {
59+ return err
60+ }
61+ }
62+ return nil
63+ }
64+
65+ func SetTracerProvider (exp sdk.SpanExporter , traceIDRatio float64 ) {
66+ if exp == nil {
67+ otel .SetTracerProvider (trace .NewNoopTracerProvider ())
68+ return
69+ }
70+
71+ tp := sdk .NewTracerProvider (
72+ sdk .WithBatcher (exp ),
73+ sdk .WithResource (resource .NewWithAttributes (
74+ semconv .SchemaURL ,
75+ semconv .ServiceNameKey .String (paramtable .GetRole ()),
76+ attribute .Int64 ("NodeID" , paramtable .GetNodeID ()),
77+ )),
78+ sdk .WithSampler (sdk .ParentBased (
79+ sdk .TraceIDRatioBased (traceIDRatio ),
80+ )),
81+ )
82+ otel .SetTracerProvider (tp )
83+ }
84+
85+ func CreateTracerExporter (params * paramtable.ComponentParam ) (sdk.SpanExporter , error ) {
4186 var exp sdk.SpanExporter
4287 var err error
88+
4389 switch params .TraceCfg .Exporter .GetValue () {
4490 case "jaeger" :
4591 exp , err = jaeger .New (jaeger .WithCollectorEndpoint (
@@ -55,25 +101,11 @@ func Init() {
55101 exp , err = otlptracegrpc .New (context .Background (), opts ... )
56102 case "stdout" :
57103 exp , err = stdout .New ()
104+ case "noop" :
105+ return nil , nil
58106 default :
59107 err = errors .New ("Empty Trace" )
60108 }
61- if err != nil {
62- log .Warn ("Init tracer faield" , zap .Error (err ))
63- return
64- }
65- tp := sdk .NewTracerProvider (
66- sdk .WithBatcher (exp ),
67- sdk .WithResource (resource .NewWithAttributes (
68- semconv .SchemaURL ,
69- semconv .ServiceNameKey .String (paramtable .GetRole ()),
70- attribute .Int64 ("NodeID" , paramtable .GetNodeID ()),
71- )),
72- sdk .WithSampler (sdk .ParentBased (
73- sdk .TraceIDRatioBased (params .TraceCfg .SampleFraction .GetAsFloat ()),
74- )),
75- )
76- otel .SetTracerProvider (tp )
77- otel .SetTextMapPropagator (propagation .NewCompositeTextMapPropagator (propagation.TraceContext {}, propagation.Baggage {}))
78- log .Info ("Init tracer finished" , zap .String ("Exporter" , params .TraceCfg .Exporter .GetValue ()))
109+
110+ return exp , err
79111}
0 commit comments