open-telemetry / opentelemetry-go-contrib

Collection of extensions for OpenTelemetry-Go.
https://opentelemetry.io/
Apache License 2.0
1.18k stars 555 forks source link

Using ot propagator occur error #2956

Open Frapschen opened 1 year ago

Frapschen commented 1 year ago

Using ot propagator occur error

I want to use ot propagator, but find it can't parse trace id from upstream service. I use instrumentation/google.golang.org/grpc/otelgrpc/example to test it. The config.go I modified(add a &ot.OT{} to NewCompositeTextMapPropagator):

// Init configures an OpenTelemetry exporter and trace provider.
func Init() (*sdktrace.TracerProvider, error) {
    exporter, err := stdout.New(stdout.WithPrettyPrint())
    if err != nil {
        return nil, err
    }
    tp := sdktrace.NewTracerProvider(
        sdktrace.WithSampler(sdktrace.AlwaysSample()),
        sdktrace.WithBatcher(exporter),
    )
    otel.SetTracerProvider(tp)
    otel.SetTextMapPropagator(propagation.NewCompositeTextMapPropagator(propagation.TraceContext{}, propagation.Baggage{}, &ot.OT{}))
    return tp, nil
}

then run the main.go in server dir and run the main.go with only call callSayHello() in client dir. I get the servier side log:

2022/10/31 10:58:38 Received: World
{
        "Name": "api.HelloService/SayHello",
        "SpanContext": {
                "TraceID": "0000000000000000ccb497182cb7a225",
                "SpanID": "2dbae7e914241192",
                "TraceFlags": "01",
                "TraceState": "",
                "Remote": false
        },
        "Parent": {
                "TraceID": "0000000000000000ccb497182cb7a225",
                "SpanID": "b25169efb2bd7d70",
                "TraceFlags": "01",
                "TraceState": "",
                "Remote": true
        },
        ...
}

the client side log:

2022/10/31 10:58:38 Response from server: Hello World
{
        "Name": "api.HelloService/SayHello",
        "SpanContext": {
                "TraceID": "d4cebdd9884215cbccb497182cb7a225",
                "SpanID": "b25169efb2bd7d70",
                "TraceFlags": "01",
                "TraceState": "",
                "Remote": false
        },
        "Parent": {
                "TraceID": "00000000000000000000000000000000",
                "SpanID": "0000000000000000",
                "TraceFlags": "00",
                "TraceState": "",
                "Remote": false
        },
        ...
}  

I find that the client side get a error trace id.

Aneurysm9 commented 1 year ago

This appears to be the expected behavior. The ot propagator will only inject 64-bit trace IDs for compatibility purposes. This could probably use better documentation, particularly a warning around this potential scenario where a system using the ot propagator for outbound traffic is also responsible for generating the trace ID. It would need a 64-bit trace ID generator, which I don't believe currently exists.