= Vertx Zipkin Tracing

Vert.x integrates with Zipkin thanks to the Zipkin Brave client.

Vert.x uses the ZipKin HTTP sender based using a Vert.x HTTP Client reporting
spans to `http://localhost:9411/api/v2/spans` in JSON format.

[source,$lang]
----
{@link examples.ZipkinTracingExamples#ex1}
----

The service name is the mandatory Zipkin service name. If you don't set it, then `a-service` will be used instead.

You can configure the sender to use a specific URL

[source,$lang]
----
{@link examples.ZipkinTracingExamples#ex2}
----

The default sender uses a single HTTP connection in plain text with compressed bodies.

You can override the configuration of the HTTP sender with custom `HttpClientOptions`.

[source,$lang]
----
{@link examples.ZipkinTracingExamples#ex3}
----

Finally you can set a custom ZipKin `Tracing` allowing for greater control
over the configuration.

[source,$lang]
----
{@link examples.ZipkinTracingExamples#ex4}
----

== Tracing policy

The tracing policy defines the behavior of a component when tracing is enabled:

- {@link io.vertx.core.tracing.TracingPolicy#PROPAGATE}: the component reports a span in the active trace
- {@link io.vertx.core.tracing.TracingPolicy#ALWAYS}: the component reports a span in the active trace or creates a new active trace
- {@link io.vertx.core.tracing.TracingPolicy#IGNORE}: the component will not be involved in any trace.

The tracing policy is usually configured in the component options.

== HTTP tracing

The Vert.x HTTP server and client reports span around HTTP requests:

- `operationName`: the HTTP method
- tags
- `http.method`: the HTTP method
- `http.url`: the request URL
- `http.status_code`: the HTTP status code

The default HTTP server tracing policy is `ALWAYS`, you can configure the policy with {@link io.vertx.core.http.HttpServerOptions#setTracingPolicy}

[source,$lang]
----
{@link examples.ZipkinTracingExamples#ex5}
----

The default HTTP client tracing policy is `PROPAGATE`, you can configure the policy with {@link io.vertx.core.http.HttpClientOptions#setTracingPolicy}

[source,$lang]
----
{@link examples.ZipkinTracingExamples#ex6}
----

== EventBus tracing

The Vert.x EventBus reports spans around message exchanges.

The default sending policy is `PROPAGATE`, you can configure the policy with {@link io.vertx.core.eventbus.DeliveryOptions#setTracingPolicy}.

[source,$lang]
----
{@link examples.ZipkinTracingExamples#ex7}
----
