Client Library Features
The table below provides a feature matrix for the existing client libraries. Cells marked with ?
indicate that it’s not known if the given client supports the given feature and additional research & documentation update is required.
Data format and transport for reporting spans to Jaeger backend | ||||||
---|---|---|---|---|---|---|
Feature | Go | Java | Node.js | Python | C++ | C# |
Report jaeger.thrift over UDP | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
Report jaeger.thrift over HTTP | ❌ | ✅ | ❌ | ❌ | ❔ | ✅ |
Report Zipkin Thrift over HTTP | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
Inter-process propagation wire format (headers) | ||||||
Feature | Go | Java | Node.js | Python | C++ | C# |
Uber’s original headers | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
Zipkin’s B3 headers | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ |
W3C Trace Context headers | coming | coming | coming | coming | coming | coming |
Support inbound jaeger-debug-id header | when there is no trace | when there is no trace | ❔ | ❔ | ❔ | when there is no trace |
Accept baggage from jaeger-baggage headers | when there is no trace | ❌ | ❔ | ❔ | ❔ | ❌ |
Support for 128bit Trace ID | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
Metrics | ||||||
Feature | Go | Java | Node.js | Python | C++ | C# |
Support standard tracer metrics (number of spans started, finished, reported, etc.) | ✅ | ✅ | ✅ | ✅ | ❔ | ✅ |
Support standard RPC metrics | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
Metrics in Prometheus format | ✅ | ✅ | ❌ | ✅ | ❔ | ❔ |
Tracer configuration | ||||||
Feature | Go | Java | Node.js | Python | C++ | C# |
Support declarative tracer configuration | ✅ | ✅ | ✅ | ✅ | ❔ | ✅ |
Allow configuring tracer tags, aka process tags | ✅ | ✅ | ✅ | ✅ | ❔ | ✅ |
Allow remote configuration of samplers | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
Remotely configurable adaptive sampler | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
Remotely configurable baggage restrictions | ✅ | coming | coming | coming | ❌ | coming |
Tracer configuration via environment variables | ||||||
Feature | Go | Java | Node.js | Python | C++ | C# |
JAEGERSERVICE_NAME defines service name that will be associated with the emitted spans. | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ |
JAEGER_TAGS defines a comma-separated list of static tags, aka “tracer tags”, e.g. hostname=foobar,my.app.version=1.2.3 . These tags are added as the Process tags to each span. | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ |
JAEGER_DISABLED (_not recommended) when set to true, instructs the Configuration to return a no-op tracer. Neither trace/span IDs nor baggage will be propagated with a no-op tracer. Instead of disabling the tracer completely, use const sampler with 0 param, which will minimize the overhead but keep the propagation going. | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ |
JAEGER_AGENT_HOST defines hostname for reporting spans over UDP/Thrift. To avoid packet loss, the agent is expected to run on the same machine as the application. This var is useful when there are multiple networking namespaces on the host. | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ |
JAEGER_AGENT_PORT defines port for reporting spans over UDP/Thrift. | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ |
JAEGER_ENDPOINT defines the URL for reporting spans via HTTP/Thrift. This setting allows for a deployment mode where spans are submitted directly to the collector. | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ |
JAEGER_AUTH_TOKEN defines an optional auth token when reporting over HTTP. | ❌ | ✅ | ❌ | ❌ | ❌ | ✅ |
JAEGER_USER can be used for basic authentication when reporting over HTTP. | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ |
JAEGER_PASSWORD can be used for basic authentication when using reporting over HTTP. | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ |
JAEGER_REPORTER_LOG_SPANS instructs the Reporter to log finished span IDs. The reporter may need to be given a Logger for this option to take effect. | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ |
JAEGER_REPORTER_MAX_QUEUE_SIZE defines the max size of the in-memory buffer used to keep spans before they are sent out. | ✅ | ✅ | ❌ | ❌ | ❌ | ✅ |
JAEGER_REPORTER_FLUSH_INTERVAL defines how frequently the report flushes span batches. Reporter can also flush the batch if the batch size reaches the maximum UDP packet size (~64Kb). | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ |
JAEGER_SAMPLER_TYPE defines the type of sampler to use, e.g. probabilistic , or const (see Sampling). | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ |
JAEGER_SAMPLER_PARAM provides configuration value to the sampler, e.g. probability=0.001 (see Sampling). | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ |
JAEGER_SAMPLER_MANAGER_HOST_PORT defines the address of HTTP server that services client configuration, such as sampling strategies, baggage restrictions, throttling config, etc. The variable name is a legacy misnomer from the time when the server only provided the sampling strategies. At the moment only jaeger-agent implements this REST API. | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ |
JAEGER_SAMPLER_REFRESH_INTERVAL defines how often the sampler polls the config server for updates to the samling strategies. | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ |
JAEGER_SAMPLER_MAX_OPERATIONS instructs the adaptive sampler to limit how many distinct operation names the sampler will track, to avoid unbound memory usage. | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
JAEGER_PROPAGATION defines the propagation format used by the tracer. Supported values are jaeger (defined here) and b3 (defined here). | ❌ | ✅ | ❌ | ❌ | ❌ | ✅ |
JAEGER_TRACEID_128BIT if true, instructs the tracer to generate 128bit trace IDs instead of the default 64bit. In the future 128bit will become the default. | ❌ | ✅ | ❌ | ✅ | ❌ | ✅ |
JAEGER_RPC_METRICS when true, enables additional generation of RPC metrics from the tracing instrumentation. This is an experimental feature in the Go client. See also https://github.com/opentracing-contrib/java-metrics. | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |