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?
After more reading and investigating the OpenTelemetry SDK's logic, I think the answer is:
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).tracestate
, any other key-value pair with the same key must be dropped (see the w3c spec).