Files
2026-07-13 13:22:34 +08:00

49 lines
1.5 KiB
Python

import contextvars
from opentelemetry.sdk.trace.sampling import (
Sampler,
SamplingResult,
TraceIdRatioBased,
)
# Context variable to override the sampling ratio for a specific trace.
# When set, the sampler uses this ratio instead of the default.
_SAMPLING_RATIO_OVERRIDE = contextvars.ContextVar("sampling_ratio_override", default=None)
class _MlflowSampler(Sampler):
"""
A custom OTel sampler that delegates to TraceIdRatioBased but allows
per-trace overrides via a ContextVar.
When _SAMPLING_RATIO_OVERRIDE is set, uses that ratio instead of the default.
Otherwise, falls back to the default ratio (from MLFLOW_TRACE_SAMPLING_RATIO).
"""
def __init__(self, default_ratio: float = 1.0):
self._default_ratio = default_ratio
self._default_sampler = TraceIdRatioBased(default_ratio)
def should_sample(
self,
parent_context,
trace_id,
name,
kind=None,
attributes=None,
links=None,
trace_state=None,
) -> SamplingResult:
override = _SAMPLING_RATIO_OVERRIDE.get()
if override is not None:
sampler = TraceIdRatioBased(override)
return sampler.should_sample(
parent_context, trace_id, name, kind, attributes, links, trace_state
)
return self._default_sampler.should_sample(
parent_context, trace_id, name, kind, attributes, links, trace_state
)
def get_description(self) -> str:
return f"MlflowSampler(default_ratio={self._default_ratio})"