Propagate Zipkin distributed tracing spans, and report spans to a Zipkin server.
Configuration Reference
This plugin is not compatible with DB-less mode.
Enable the plugin on a service
Admin API
Kubernetes
Declarative (YAML)
Kong Manager
For example, configure this plugin on a service by
making the following request:
curl -X POST http://{HOST}:8001/services/{SERVICE}/plugins \
--data "name=zipkin" \
--data "config.http_endpoint=http://your.zipkin.collector:9411/api/v2/spans" \
--data "config.sample_ratio=0.001" \
--data "config.include_credential=true" \
--data "config.traceid_byte_count=16" \
--data "config.header_type=preserve" \
--data "config.default_header_type=b3"
SERVICE
is the id
or name
of the service that this plugin
configuration will target.
First, create a KongPlugin
resource:
apiVersion: configuration.konghq.com/v1
kind: KongPlugin
metadata:
name: <zipkin-example>
config:
http_endpoint: http://your.zipkin.collector:9411/api/v2/spans
sample_ratio: 0.001
include_credential: true
traceid_byte_count: 16
header_type: preserve
default_header_type: b3
plugin: zipkin
Next, apply the KongPlugin resource to a
Service by annotating the
Service as follows:
apiVersion: v1
kind: Service
metadata:
name: {SERVICE}
labels:
app: {SERVICE}
annotations:
konghq.com/plugins: <zipkin-example>
spec:
ports:
- port: 80
targetPort: 80
protocol: TCP
name: {SERVICE}
selector:
app: {SERVICE}
{SERVICE}
is the id
or name
of the service that this plugin
configuration will target.
Note: The KongPlugin resource only needs to be defined once
and can be applied to any service, consumer, or route in the namespace. If you
want the plugin to be available cluster-wide, create the resource as a
KongClusterPlugin
instead of KongPlugin
.
For example, configure this plugin on a service by
adding this section to your declarative configuration file:
plugins:
- name: zipkin
service: {SERVICE}
config:
http_endpoint: http://your.zipkin.collector:9411/api/v2/spans
sample_ratio: 0.001
include_credential: true
traceid_byte_count: 16
header_type: preserve
default_header_type: b3
SERVICE
is the id
or name
of the service that this plugin
configuration will target.
Configure this plugin on a service:
- In Kong Manager, select the workspace.
- From the Dashboard, scroll down to Services and click View for the
service row.
- Scroll down to plugins and click Add Plugin.
-
Find and select the Zipkin plugin.
Note: If the plugin is greyed out, then it is not available
for your product tier. See
Kong Gateway tiers.
- If the option is available, select Scoped.
- Add the service name and ID to the Service field if it
is not already prefilled.
-
Enter the following parameters, updating the default or sample values as needed:
- Config.Include Credential: select checkbox
- Config.Traceid Byte Count:
16
- Config.Header Type:
preserve
- Config.Default Header Type:
b3
- Click Create.
Enable the plugin on a route
Admin API
Kubernetes
Declarative (YAML)
Kong Manager
For example, configure this plugin on a route with:
$ curl -X POST http://{HOST}:8001/routes/{ROUTE}/plugins \
--data "name=zipkin" \
--data "config.http_endpoint=http://your.zipkin.collector:9411/api/v2/spans" \
--data "config.sample_ratio=0.001" \
--data "config.include_credential=true" \
--data "config.traceid_byte_count=16" \
--data "config.header_type=preserve" \
--data "config.default_header_type=b3"
ROUTE
is the id
or name
of the route that this plugin configuration
will target.
First, create a KongPlugin
resource:
apiVersion: configuration.konghq.com/v1
kind: KongPlugin
metadata:
name: <zipkin-example>
config:
http_endpoint: http://your.zipkin.collector:9411/api/v2/spans
sample_ratio: 0.001
include_credential: true
traceid_byte_count: 16
header_type: preserve
default_header_type: b3
plugin: zipkin
Then, apply it to an ingress (Route or Routes)
by annotating the ingress as follows:
apiVersion: networking/v1beta1
kind: Ingress
metadata:
name: {ROUTE}
annotations:
kubernetes.io/ingress.class: kong
konghq.com/plugins: <zipkin-example>
spec:
rules:
- host: examplehostname.com
http:
paths:
- path: /bar
backend:
serviceName: echo
servicePort: 80
ROUTE
is the id
or name
of the route that this plugin configuration
will target.
Note: The KongPlugin resource only needs to be defined once
and can be applied to any service, consumer, or route in the namespace. If you
want the plugin to be available cluster-wide, create the resource as a
KongClusterPlugin
instead of KongPlugin
.
For example, configure this plugin on a route by
adding this section to your declarative configuration file:
plugins:
- name: zipkin
route: <route>
config:
http_endpoint: http://your.zipkin.collector:9411/api/v2/spans
sample_ratio: 0.001
include_credential: true
traceid_byte_count: 16
header_type: preserve
default_header_type: b3
ROUTE
is the id
or name
of the route that this plugin configuration
will target.
Configure this plugin on a route:
- In Kong Manager, select the workspace.
- From the Dashboard, select Routes in the left navigation.
- Click View for the route row.
- Scroll down to plugins and click Add Plugin.
-
Find and select the Zipkin plugin.
Note: If the plugin is greyed out, then it is not available
for your product tier. See
Kong Gateway tiers.
- If the option is available, select Scoped.
- Add the Route ID if it is not already prefilled.
-
Enter the following parameters, updating the default
or sample values as needed:
- Config.Include Credential: select checkbox
- Config.Traceid Byte Count:
16
- Config.Header Type:
preserve
- Config.Default Header Type:
b3
- Click Create.
Enabling the plugin on a consumer
Admin API
Kubernetes
Declarative (YAML)
Kong Manager
For example, configure this plugin on a consumer with:
$ curl -X POST http://{HOST}:8001/consumers/{CONSUMER}/plugins \
--data "name=zipkin" \
--data "config.http_endpoint=http://your.zipkin.collector:9411/api/v2/spans" \
--data "config.sample_ratio=0.001" \
--data "config.include_credential=true" \
--data "config.traceid_byte_count=16" \
--data "config.header_type=preserve" \
--data "config.default_header_type=b3"
CONSUMER
is the id
or username
of the consumer that this plugin
configuration will target.
You can combine consumer.id
, service.id
, or route.id
in the same request, to further narrow the scope of the plugin.
First, create a KongPlugin
resource:
apiVersion: configuration.konghq.com/v1
kind: KongPlugin
metadata:
name: <zipkin-example>
config:
http_endpoint: http://your.zipkin.collector:9411/api/v2/spans
sample_ratio: 0.001
include_credential: true
traceid_byte_count: 16
header_type: preserve
default_header_type: b3
plugin: zipkin
Then, apply it to a consumer by
annotating the KongConsumer resource as follows:
apiVersion: configuration.konghq.com/v1
kind: KongConsumer
metadata:
name: {CONSUMER}
annotations:
konghq.com/plugins: <zipkin-example>
kubernetes.io/ingress.class: kong
CONSUMER
is the id
or username
of the consumer that this plugin
configuration will target.
Note: The KongPlugin resource only needs to be defined once
and can be applied to any Service, Consumer, or Route in the namespace. If you
want the plugin to be available cluster-wide, create the resource as a
KongClusterPlugin
instead of KongPlugin
.
For example, configure this plugin on a consumer by
adding this section to your declarative configuration file:
plugins:
- name: zipkin
consumer: {CONSUMER}
config:
http_endpoint: http://your.zipkin.collector:9411/api/v2/spans
sample_ratio: 0.001
include_credential: true
traceid_byte_count: 16
header_type: preserve
default_header_type: b3
CONSUMER
is the id
or username
of the consumer that this plugin
configuration will target.
Configure this plugin on a consumer:
- In Kong Manager, select the workspace.
- From the Dashboard, scroll down to Consumers and click View for the consumer row.
- Select the Plugins tab.
- Click Add Plugin.
-
Find and select the Zipkin plugin.
Note: If the plugin is greyed out, then it is not available
for your product tier. See
Kong Gateway tiers.
- If the option is available, select Global.
-
Enter the following parameters, updating the default or sample values as needed:
- Config.Include Credential: select checkbox
- Config.Traceid Byte Count:
16
- Config.Header Type:
preserve
- Config.Default Header Type:
b3
- Click Create.
Enable the plugin globally
A plugin which is not associated to any service, route, or consumer is
considered global, and will be run on every request. Read the
Plugin Reference and the Plugin Precedence
sections for more information.
Admin API
Kubernetes
Declarative (YAML)
Kong Manager
For example, configure this plugin globally with:
$ curl -X POST http://{HOST}:8001/plugins/ \
--data "name=zipkin" \
--data "config.http_endpoint=http://your.zipkin.collector:9411/api/v2/spans" \
--data "config.sample_ratio=0.001" \
--data "config.include_credential=true" \
--data "config.traceid_byte_count=16" \
--data "config.header_type=preserve" \
--data "config.default_header_type=b3"
Create a KongClusterPlugin
resource and label it as global:
apiVersion: configuration.konghq.com/v1
kind: KongClusterPlugin
metadata:
name: <global-zipkin>
annotations:
kubernetes.io/ingress.class: kong
labels:
global: \"true\"
config:
http_endpoint: http://your.zipkin.collector:9411/api/v2/spans
sample_ratio: 0.001
include_credential: true
traceid_byte_count: 16
header_type: preserve
default_header_type: b3
plugin: zipkin
For example, configure this plugin using the plugins:
entry in the declarative
configuration file:
plugins:
- name: zipkin
config:
http_endpoint: http://your.zipkin.collector:9411/api/v2/spans
sample_ratio: 0.001
include_credential: true
traceid_byte_count: 16
header_type: preserve
default_header_type: b3
Configure this plugin globally:
- In Kong Manager, select the workspace.
- From the Dashboard, select Plugins in the left navigation.
- Click New Plugin.
-
Find and select the Zipkin plugin.
Note: If the plugin is greyed out, then it is not available
for your product tier. See
Kong Gateway tiers.
- If the option is available, set the plugin scope to Global.
-
Enter the following parameters, updating the
default/sample values as needed:
- Config.Include Credential: select checkbox
- Config.Traceid Byte Count:
16
- Config.Header Type:
preserve
- Config.Default Header Type:
b3
- Click Create.
Parameters
Here's a list of all the parameters which can be used in this plugin's configuration:
Form Parameter |
Description |
name
required
Type: string |
The name of the plugin, in this case zipkin . |
service.id
Type: string |
The ID of the Service the plugin targets. |
route.id
Type: string |
The ID of the Route the plugin targets. |
consumer.id
Type: string |
The ID of the Consumer the plugin targets. |
enabled
required
Type: boolean
Default value: true |
Whether this plugin will be applied. |
config.http_endpoint
optional
Default value:
|
The full HTTP(S) endpoint to which Zipkin spans should be sent by Kong.
If not specified, the Zipkin plugin will only act as a tracing header
generator/transmitter.
|
config.sample_ratio
optional
Default value: 0.001
|
How often to sample requests that do not contain trace ids.
Set to 0 to turn sampling off, or to 1 to sample all requests.
|
config.include_credential
required
Default value: true
|
Should the credential of the currently authenticated consumer be included in metadata sent to the Zipkin server?
|
config.traceid_byte_count
required
Default value: 16
|
The length in bytes of each request’s Trace ID.
|
config.header_type
required
Default value: preserve
|
All HTTP requests going through the plugin will be tagged with a tracing HTTP request.
This property codifies what kind of tracing header the plugin expects on incoming requests.
Possible values are b3 , b3-single , w3c , or preserve . The b3 option means that
the plugin expects Zipkin’s B3 multiple headers
on incoming requests, and will add them to the transmitted requests if they are missing from it.
The b3-single option expects or adds Zipkin’s B3 single-header tracing headers.
The w3c option expects or adds W3C’s traceparent tracing header. The preserve option
does not expect any format, and will transmit whatever header is recognized or present,
defaulting to b3 if none is found. In case of mismatch between the expected and incoming
tracing headers (for example, when header_type is set to b3 but a w3c-style tracing header is
found in the incoming request), then the plugin will add both kinds of tracing headers
to the request and generate a mismatch warning in the logs.
|
config.default_header_type
required
Default value: b3
|
Allows specifying the type of header to be added to requests with no pre-existing tracing headers
and when config.header_type is set to "preserve" .
When header_type is set to any other value, default_header_type is ignored.
|
config.static_tags
optional
Default value: []
|
The tags specified on this property will be added to the generated request traces. For example:
[ { "name": "color", "value": "red" } ] .
|
How it Works
When enabled, this plugin traces requests in a way compatible with zipkin.
The code is structured around an opentracing core using the opentracing-lua library to collect timing data of a request in each of Kong’s phases.
The plugin uses opentracing-lua compatible extractor, injector, and reporters to implement Zipkin’s protocols.
Reporter
An opentracing “reporter” is how tracing data is reported to another system.
This plugin records tracing data for a given request, and sends it as a batch to a Zipkin server using the Zipkin v2 API. Note that zipkin version 1.31 or higher is required.
The http_endpoint
configuration variable must contain the full uri including scheme, host, port and path sections (i.e. your uri likely ends in /api/v2/spans
).
See also
For more information, read the Kong blog post.