This is documentation for the next version of K6. For the latest stable release, go to the latest version.
HTTP instrumentation for Tempo
Note
The source code for this library can be found in the grafana/jslib.k6.io GitHub repository.
The http-instrumentation-tempo
module allows you to instrument HTTP requests so that they emit traces as the test runs. Use it to include a tracing context in HTTP requests, which can then be used by a tracing backend such as Grafana Tempo.
Migration from k6/experimental/tracing
This jslib is a drop in replacement, so all you need to migrate to it is to replace 'k6/experimental/tracing'
import with 'https://jslib.k6.io/http-instrumentation-tempo/1.0.0/index.js'
About trace contexts
A trace context is a set of standardized HTTP headers added to a request that lets a tracing system correlate it with other requests as they navigate through a system. The trace context specifications, such as the supported W3C Trace Context and Jaeger Trace Context, define specific header names and an encoding format for the header values.
A trace context generally consists of, at least, a trace_id
, a span_id
, and a sampled
flag. The trace_id
is a unique identifier for the trace, the span_id
is a unique identifier for the request, and the sampled
flag is a boolean that indicates whether the request should be traced. For instance, the W3C Trace Context defines the Traceparent
header, whose value contains a trace_id
, a span_id
and a sampled
flag, encoded as a dash (-
) separated list of hexadecimal values. When a trace context header is attached to an HTTP request, we refer to it as being propagated to the downstream service.
API
Class/Function | Description |
---|---|
instrumentHTTP | Instruments the k6 http module with tracing capabilities. |
Client | A configurable client that exposes instrumented HTTP operations and allows selectively instrumenting requests with tracing. |
Example
This example demonstrates how to use the tracing API to instrument every HTTP request made in a script with tracing information.
import { check } from 'k6';
import tempo from 'https://jslib.k6.io/http-instrumentation-tempo/1.0.0/index.js';
import http from 'k6/http';
// instrumentHTTP will ensure that all requests made by the http module
// from this point forward will have a trace context attached.
//
// The first argument is a configuration object that
// can be used to configure the tracer.
tempo.instrumentHTTP({
// possible values: "w3c", "jaeger"
propagator: 'w3c',
});
export default () => {
// the instrumentHTTP call in the init context replaced
// the http module with a version that will automatically
// attach a trace context to every request.
//
// Because the instrumentHTTP call was configured with the
// w3c trace propagator, this request will as a result have
// a `traceparent` header attached.
const res = http.get('http://httpbin.org/get', {
headers: {
'X-Example-Header': 'instrumented/get',
},
});
};