Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Extend Jaeger sampler documentation. #159

Open
VitaliiHrozynskyi opened this issue Aug 30, 2021 · 0 comments
Open

Extend Jaeger sampler documentation. #159

VitaliiHrozynskyi opened this issue Aug 30, 2021 · 0 comments

Comments

@VitaliiHrozynskyi
Copy link

VitaliiHrozynskyi commented Aug 30, 2021

Is your feature request related to a problem? Please describe.
There is no clear documentation on how to configure the Jaeger sampler. Currently sampling.options refers to https://www.jaegertracing.io/docs/1.14/sampling/#client-sampling-configuration which is describing Jaeger config outside of Moleculer scope.

When using configuration object to instantiate the tracer, the type of sampling can be selected via sampler.type and sampler.param properties. Jaeger libraries support the following samplers:

Constant (sampler.type=const) sampler always makes the same decision for all traces. It either samples all traces (sampler.param=1) or none of them (sampler.param=0).
Probabilistic (sampler.type=probabilistic) sampler makes a random sampling decision with the probability of sampling equal to the value of sampler.param property. For example, with sampler.param=0.1 approximately 1 in 10 traces will be sampled.
Rate Limiting (sampler.type=ratelimiting) sampler uses a leaky bucket rate limiter to ensure that traces are sampled with a certain constant rate. For example, when sampler.param=2.0 it will sample requests with the rate of 2 traces per second.
Remote (sampler.type=remote, which is also the default) sampler consults Jaeger agent for the appropriate sampling strategy to use in the current service. This allows controlling the sampling strategies in the services from a central configuration in Jaeger backend, or even dynamically (see Adaptive Sampling).

And here is what we have in our code:

getSampler(serviceName) {
  if (isFunction(this.opts.sampler)) return this.opts.sampler;

  if (this.opts.sampler.type == "RateLimiting")
    return new Jaeger.RateLimitingSampler(
      this.opts.sampler.options.maxTracesPerSecond,
      this.opts.sampler.options.initBalance
    );

  if (this.opts.sampler.type == "Probabilistic")
    return new Jaeger.ProbabilisticSampler(this.opts.sampler.options.samplingRate);

  if (this.opts.sampler.type == "GuaranteedThroughput")
    return new GuaranteedThroughputSampler(
      this.opts.sampler.options.lowerBound,
      this.opts.sampler.options.samplingRate
    );

  if (this.opts.sampler.type == "RemoteControlled")
    return new RemoteControlledSampler(serviceName, this.opts.sampler.options);

  return new Jaeger.ConstSampler(
    this.opts.sampler.options && this.opts.sampler.options.decision != null
      ? this.opts.sampler.options.decision
      : 1
  );
}

Describe the solution you'd like
Describe a full list of possible sample params in docs.

Describe alternatives you've considered

Additional context

@icebob icebob transferred this issue from moleculerjs/moleculer Aug 30, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant