Tapper: a Zipkin client for Elixir

I’ve now released the Zipkin tracing client, “Tapper”, that we’ve developed here at the FT.

There are three modules:

  • Tapper - an OTP server that tracks and reports traces.
  • Tapper Plug - Plug modules that interpret B3 HTTP headers, perform trace sampling and support downstream propagation.
  • Tapper Absinthe Plug - a very small integration so you can propagate traces into Absinthe resolvers.

Guess what stack we’re using at the FT! :slight_smile:

All three modules are released under a MIT licence (in common with other public repos at the FT), and are available on Hex (linked from Github), with, what I hope is pretty decent documentation!

Let me know what you think. Enjoy!

5 Likes

This looks very cool! You could totally leverage Absinthe middleware btw so that you don’t need to have the span logic in the resolver itself. Let me look at what it does more and then I’ll post what using middleware would look like.

Thanks, Ben; that might be a bit nicer.

FYI 0.3.0 released:

  • Use DeferredConfig for univeral application of {:system, ENV_VAR} style indirections in config.
  • Add Tapper.Ctx contextual API.
  • Change Logger.metadata key from tapper_id to trace_id and ensure it is just the hexidecimal encoding of the trace id. Document it.
  • Optimisations; see benchmarking.
2 Likes