Zipkin 2.8
Zipkin 2.8 migrates to Spring Boot v2 and adds a binary data format (proto3). Do not use a version lower than 2.8.3, as we found some issues post-release and resolved them.
This release is mostly infrastructure. All the help by our community are super appreciated as often such work is hard and thankless. Let's stop that here.. Thank you specifically @zeagord and @shakuzen for working on these upgrades, testing in production and knocking out dents along the way.
Spring Boot and Micrometer update
Zipkin internally has been updated to Spring Boot v2 which implies Micrometer for metrics. While features of our service didn't change, this is an important upgrade and has impact to Prometheus configuration.
Prometheus
We now internally use Micrometer for metrics on Zipkin server. Some of the prometheus metrics have changed to adhere to standards there. Our grafana setup is adjusted on your behalf, but here are some updates if rolling your own:
- Counter metrics now properly have
_total
for sums- Ex
zipkin_collector_bytes_total
, notzipkin_collector_bytes
- Ex
- Collector metrics no longer have embedded fields for transport type
- Ex
zipkin_collector_bytes
has a tagtransport
instead of a naming convention
- Ex
- Http metrics now have normalized names
- Ex
http_server_requests_seconds_count
, nothttp_requests_total
- Ex
- Http metrics have route-based uri tags
- Ex instead of
path
which has variables like/api/v2/trace/abcd
,uri
with a template like/ap1/v2/trace/{traceId}
- Ex instead of
Note: the metrics impact is exactly the same prior to the spring boot v2 update. You can update first to Zipkin 2.7.5 to test metrics independently to the other updates.
Endpoint changes
If you were using Spring's "actuator" endpoints, they are now under the path /actuator as described in Spring Boot documentation. However, we've reverse mapped a /metrics and /health endpoint compatible with the previous setup.
Binary Format (protobuf3)
We've had many requests for an alternative to our old thrift format for binary encoding of trace data. Some had interest in the smaller size (typical span data is half the size as uncompressed json). Others had interest in compatibility guarantees. Last year when we created Zipkin v2, we anticipated demand for this, and settled on Protocol Buffers v3 as the format of choice. Due to a surge of demand, we've added this to Zipkin 2.8
Impact to configuration
If using a library that supports this, it is as easy as an encoding choice. For example, switching to Encoding.PROTO3
in your configuration.
NOTE Servers must be upgraded first!
Impact to collectors
Applications will send spans in messages and so our collectors now detect a byte signature of the ListOfSpans type and act accordingly. In http, this is assumed when the content-type application/x-protobuf
is used on the /api/v2/spans endpoint. There is no expected impact beyond this except for efficiency gains.
Impact to hand-coders
For those of you coding your own, you can choose to use normal protoc, or our standard zipkin2 library. Our bundled SpanBytesEncoder.PROTO3
has no external dependencies. While this added some size, our jar is still less than 200K.