OpentelemetryHoneycombSampler behaviour (opentelemetry_honeycomb_sampler v0.1.0)
Sample with Honeycomb!
This package provides a handy interface for sampling which is similar to how stock otel samplers work, but with all the messy details abstracted away. Simply pattern match on spans and set a sample rate.
This package also makes sure that SampleRate is set on the spans as required by Honeycomb. Honeycomb multiplies your span counts by this SampleRate to arrive at a reasonable estimate of the true number of spans. This is also being set on child spans, so those will also be estimated properly by Honeycomb (unlike, I believe, in many other HC samplers).
Getting started
Install the package:
# mix.exs
def deps do
[
{:opentelemetry_honeycomb_sampler, "~> 0.1.0"}
]
end
Create a sampler module:
# my_sampler.ex
defmodule MySampler do
@behaviour OpentelemetryHoneycombSampler
@impl OpentelemetryHoneycombSampler
def description(_config), do: "MySampler"
@impl OpentelemetryHoneycombSampler
def setup(_config), do: []
@impl OpentelemetryHoneycombSampler
def sample_rate(
_ctx,
_trace_id,
_links,
_span_name,
_span_kind,
_span_attrs,
_sampler_config
) do
# 1 # all events will be sent
# 2 # 50% of events will be sent
# 3 # 33% of events will be sent
# 4 # 25% of events will be sent
1
end
end
Add OpentelemetryHoneycombSampler to your config/config.exs
or similar:
# config/config.exs
config :opentelemetry,
:sampler,
{OpentelemetryHoneycombSampler, %{root: {MySampler, _my_config = %{}}}}
And that's all there is to it!
A note about SampleRate
Make sure there is a catch-all function head at the very bottom of your file that returns the general sample rate that you would like to use.
Honeycomb's sample rates are expressed as a positive integer N (1, 2, 3, 1000, etc). Their sample rate means "1 in N events will be sampled". In other words, if you return 10
from should_sample/7
, then one in ten, or 10% of your events, will eventually be sent to Honeycomb.
A sample rate of 1, therefore, results in all of your events being sent to Honeycomb. This is as if you did not configure sampling at all.
Installation
The package can be installed by adding opentelemetry_honeycomb_sampler
to your list of dependencies in mix.exs
:
The docs can be found at https://hexdocs.pm/opentelemetry_honeycomb_sampler.
Thanks
Developed partially under contract at Fairing.co.
Summary
Callbacks
description(sampler_config)
@callback description(:otel_sampler.sampler_config()) :: :otel_sampler.description()
sample_rate(t, trace_id, t, span_name, span_kind, attributes_map, sampler_config)
@callback sample_rate( :otel_ctx.t(), :opentelemetry.trace_id(), :otel_links.t(), :opentelemetry.span_name(), :opentelemetry.span_kind(), :opentelemetry.attributes_map(), :otel_sampler.sampler_config() ) :: pos_integer()
setup sampler_opts
@callback setup(:otel_sampler.sampler_opts()) :: :otel_sampler.sampler_config()