Search code examples
httphttp-trace

How does the tracing spec define a "vendor"?


In this specification, the concept of a vendor is introduced (own hightlighting):

The traceparent request header represents the incoming request in a tracing system in a common format, understood by all vendors. Here’s an example of a traceparent header. traceparent: 00-0af7651916cd43dd8448eb211c80319c-b7ad6b7169203331-01. The tracestate request header includes the parent in a potentially vendor-specific format: tracestate: congo=t61rcWkgMzE. For example, say a client and server in a system use different tracing vendors: Congo and Rojo. A client traced in the Congo system adds the following headers to an outbound HTTP request.

But what's a vendor exactly? Is it the name of a service (e.g. data-retriever), an identifier for an instance of this service (e.g. data-retriever-instance123, or something completely different, like our company's namespace, e.g. awesomeretrievalsolutions24, rendering all keys in the tracestate's key-value pairs the same when I don't utilize third party services? Or opentelemetry (given we use that one), also rendering all keys the same?


Solution

  • After more reading and investigating the OpenTelemetry SDK's logic, I think the answer is:

    • The vendor is the entity which understands how to read/write/interprete a tracestate. So, a vendor defines the encoding of its tracestate. When using OpenTelemetry, the vendor is - according to its documentation - "ot". p and r in the value are an example of vendor-specific (i.e. OpenTelemetry-specific) implementation/encoding of information (here: sampling data).
    • When adding a new key-value pair to (left-most position) the tracestate, any other key-value pair with the same key must be dropped (see the w3c spec).