OpenTelemetry Swift - how to add custom baggage to traces?

82 Views Asked by At

I'm making an iPhone app and using the OpenTelemetry Swift package to send traces to my OpenTelemetry Collector!

I want to add custom baggage to my traces, but can't see it in my collector.

iOS Client code:

        let spanExporter = OtlpHttpTraceExporter(endpoint: URL(string: "http://localhost:4318/v1/traces")!)
        
        let spanProcessor = SimpleSpanProcessor(spanExporter: spanExporter)
        OpenTelemetry.registerTracerProvider(tracerProvider: TracerProviderBuilder()
            .add(spanProcessor: spanProcessor)
            .build()
        )
        
        let tracer = OpenTelemetry.instance.tracerProvider.get(instrumentationName: "HTTPTraceTestInstrumentationName", instrumentationVersion: "HTTPTraceTestInstrumentationVersion")
        
        if #available(macOS 10.14, *), #available(iOS 12.0, *) {
            let tracerProviderSDK = OpenTelemetry.instance.tracerProvider as? TracerProviderSdk
            tracerProviderSDK?.addSpanProcessor(SignPostIntegration())
        }

        
        
        let baggageBuilder = DefaultBaggage.baggageBuilder()
        baggageBuilder.put(key: EntryKey(name: "someTestBaggageKey")!, value: EntryValue(string: "someTestBaggageValue")!, metadata: nil)
        let baggage = baggageBuilder.build()
        OpenTelemetry.instance.contextProvider.setActiveBaggage(baggage)

        
        
        let span = tracer.spanBuilder(spanName: "someSpan").setSpanKind(spanKind: .client).startSpan()
        span.setAttribute(key: "someKey", value: "someValue")
        span.end()

Collector results:

2023-10-12T11:15:18.078+0200    info    TracesExporter  {"kind": "exporter", "data_type": "traces", "name": "logging", "resource spans": 1, "spans": 1}
2023-10-12T11:15:18.078+0200    info    ResourceSpans #0
Resource SchemaURL: 
Resource attributes:
     -> telemetry.sdk.language: Str(swift)
     -> telemetry.sdk.version: Str(1.0.0)
     -> service.name: Str(unknown_service:BaggageTest)
     -> telemetry.sdk.name: Str(opentelemetry)
ScopeSpans #0
ScopeSpans SchemaURL: 
InstrumentationScope HTTPTraceTestInstrumentationName HTTPTraceTestInstrumentationVersion
Span #0
    Trace ID       : 7e16fec54027961698e6e3d2ebb05062
    Parent ID      : 
    ID             : 78a4b19ec3a1d048
    Name           : someSpan
    Kind           : Client
    Start time     : 2023-10-12 09:15:17.990396928 +0000 UTC
    End time       : 2023-10-12 09:15:17.99045888 +0000 UTC
    Status code    : Unset
    Status message : 
Attributes:
     -> someKey: Str(someValue)
    {"kind": "exporter", "data_type": "traces", "name": "logging"}

Can someone help me on how to do it?

0

There are 0 best solutions below