Skip to content

Commit afbc9f2

Browse files
authored
Add distributed_tracing.sampler.*root.* config support (#1586)
* Add root config * [MegaLinter] Apply linters fixes --------- Co-authored-by: hmstepanek <30059933+hmstepanek@users.noreply.github.com>
1 parent 6009474 commit afbc9f2

File tree

6 files changed

+361
-83
lines changed

6 files changed

+361
-83
lines changed

newrelic/api/transaction.py

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1022,12 +1022,25 @@ def sampling_algo_compute_sampled_and_priority(self, priority, sampled, sampler_
10221022
return priority, sampled
10231023

10241024
def _compute_sampled_and_priority(
1025-
self, priority, sampled, full_granularity, remote_parent_sampled_setting, remote_parent_not_sampled_setting
1025+
self,
1026+
priority,
1027+
sampled,
1028+
full_granularity,
1029+
root_setting,
1030+
remote_parent_sampled_setting,
1031+
remote_parent_not_sampled_setting,
10261032
):
10271033
if self._remote_parent_sampled is None:
10281034
section = 0
1029-
config = "default" # Use sampling algo.
1030-
_logger.debug("Sampling decision made based on no remote parent sampling decision present.")
1035+
setting_path = (
1036+
f"distributed_tracing.sampler.{'full_granularity' if full_granularity else 'partial_granularity'}.root"
1037+
)
1038+
config = root_setting
1039+
_logger.debug(
1040+
"Sampling decision made based on no remote parent sampling decision present and %s=%s.",
1041+
setting_path,
1042+
config,
1043+
)
10311044
elif self._remote_parent_sampled:
10321045
section = 1
10331046
setting_path = f"distributed_tracing.sampler.{'full_granularity' if full_granularity else 'partial_granularity'}.remote_parent_sampled"
@@ -1084,6 +1097,7 @@ def _make_sampling_decision(self):
10841097
priority,
10851098
sampled,
10861099
full_granularity=True,
1100+
root_setting=self.settings.distributed_tracing.sampler.full_granularity._root,
10871101
remote_parent_sampled_setting=self.settings.distributed_tracing.sampler.full_granularity._remote_parent_sampled,
10881102
remote_parent_not_sampled_setting=self.settings.distributed_tracing.sampler.full_granularity._remote_parent_not_sampled,
10891103
)
@@ -1101,6 +1115,7 @@ def _make_sampling_decision(self):
11011115
priority,
11021116
sampled,
11031117
full_granularity=False,
1118+
root_setting=self.settings.distributed_tracing.sampler.partial_granularity._root,
11041119
remote_parent_sampled_setting=self.settings.distributed_tracing.sampler.partial_granularity._remote_parent_sampled,
11051120
remote_parent_not_sampled_setting=self.settings.distributed_tracing.sampler.partial_granularity._remote_parent_not_sampled,
11061121
)

newrelic/config.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -534,6 +534,10 @@ def _process_configuration(section):
534534
_process_setting(section, "distributed_tracing.enabled", "getboolean", None)
535535
_process_setting(section, "distributed_tracing.exclude_newrelic_header", "getboolean", None)
536536
_process_setting(section, "distributed_tracing.sampler.adaptive_sampling_target", "getint", None)
537+
_process_dt_hidden_setting(section, "distributed_tracing.sampler.full_granularity.root", "get")
538+
_process_dt_sampler_setting(
539+
section, "distributed_tracing.sampler.full_granularity.root.adaptive.sampling_target", "getint"
540+
)
537541
_process_dt_setting(
538542
section,
539543
"distributed_tracing.sampler.full_granularity.remote_parent_sampled",
@@ -557,6 +561,10 @@ def _process_configuration(section):
557561
_process_setting(section, "distributed_tracing.sampler.full_granularity.enabled", "getboolean", None)
558562
_process_setting(section, "distributed_tracing.sampler.partial_granularity.enabled", "getboolean", None)
559563
_process_setting(section, "distributed_tracing.sampler.partial_granularity.type", "get", None)
564+
_process_dt_hidden_setting(section, "distributed_tracing.sampler.partial_granularity.root", "get")
565+
_process_dt_sampler_setting(
566+
section, "distributed_tracing.sampler.partial_granularity.root.adaptive.sampling_target", "getint"
567+
)
560568
_process_dt_hidden_setting(section, "distributed_tracing.sampler.partial_granularity.remote_parent_sampled", "get")
561569
_process_dt_sampler_setting(
562570
section,

newrelic/core/config.py

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -338,10 +338,19 @@ class DistributedTracingSamplerSettings(Settings):
338338

339339

340340
class DistributedTracingSamplerFullGranularitySettings(Settings):
341+
_root = "default"
341342
_remote_parent_sampled = "default"
342343
_remote_parent_not_sampled = "default"
343344

344345

346+
class DistributedTracingSamplerFullGranularityRootSettings:
347+
pass
348+
349+
350+
class DistributedTracingSamplerFullGranularityRootAdaptiveSettings:
351+
pass
352+
353+
345354
class DistributedTracingSamplerFullGranularityRemoteParentSampledSettings:
346355
pass
347356

@@ -359,10 +368,19 @@ class DistributedTracingSamplerFullGranularityRemoteParentNotSampledAdaptiveSett
359368

360369

361370
class DistributedTracingSamplerPartialGranularitySettings(Settings):
371+
_root = "default"
362372
_remote_parent_sampled = "default"
363373
_remote_parent_not_sampled = "default"
364374

365375

376+
class DistributedTracingSamplerPartialGranularityRootSettings:
377+
pass
378+
379+
380+
class DistributedTracingSamplerPartialGranularityRootAdaptiveSettings:
381+
pass
382+
383+
366384
class DistributedTracingSamplerPartialGranularityRemoteParentSampledSettings:
367385
pass
368386

@@ -550,6 +568,10 @@ class EventHarvestConfigHarvestLimitSettings(Settings):
550568
_settings.distributed_tracing = DistributedTracingSettings()
551569
_settings.distributed_tracing.sampler = DistributedTracingSamplerSettings()
552570
_settings.distributed_tracing.sampler.full_granularity = DistributedTracingSamplerFullGranularitySettings()
571+
_settings.distributed_tracing.sampler.full_granularity.root = DistributedTracingSamplerFullGranularityRootSettings()
572+
_settings.distributed_tracing.sampler.full_granularity.root.adaptive = (
573+
DistributedTracingSamplerFullGranularityRootAdaptiveSettings()
574+
)
553575
_settings.distributed_tracing.sampler.full_granularity.remote_parent_sampled = (
554576
DistributedTracingSamplerFullGranularityRemoteParentSampledSettings()
555577
)
@@ -563,6 +585,12 @@ class EventHarvestConfigHarvestLimitSettings(Settings):
563585
DistributedTracingSamplerFullGranularityRemoteParentNotSampledAdaptiveSettings()
564586
)
565587
_settings.distributed_tracing.sampler.partial_granularity = DistributedTracingSamplerPartialGranularitySettings()
588+
_settings.distributed_tracing.sampler.partial_granularity.root = (
589+
DistributedTracingSamplerPartialGranularityRootSettings()
590+
)
591+
_settings.distributed_tracing.sampler.partial_granularity.root.adaptive = (
592+
DistributedTracingSamplerPartialGranularityRootAdaptiveSettings()
593+
)
566594
_settings.distributed_tracing.sampler.partial_granularity.remote_parent_sampled = (
567595
DistributedTracingSamplerPartialGranularityRemoteParentSampledSettings()
568596
)
@@ -918,6 +946,14 @@ def default_otlp_host(host):
918946
_settings.distributed_tracing.sampler.full_granularity.enabled = _environ_as_bool(
919947
"NEW_RELIC_DISTRIBUTED_TRACING_SAMPLER_FULL_GRANULARITY_ENABLED", default=True
920948
)
949+
_settings.distributed_tracing.sampler.full_granularity._root = (
950+
"adaptive"
951+
if os.environ.get("NEW_RELIC_DISTRIBUTED_TRACING_SAMPLER_FULL_GRANULARITY_ROOT_ADAPTIVE_SAMPLING_TARGET", None)
952+
else None
953+
) or os.environ.get("NEW_RELIC_DISTRIBUTED_TRACING_SAMPLER_FULL_GRANULARITY_ROOT", "default")
954+
_settings.distributed_tracing.sampler.full_granularity.root.adaptive.sampling_target = _environ_as_int(
955+
"NEW_RELIC_DISTRIBUTED_TRACING_SAMPLER_FULL_GRANULARITY_ROOT_ADAPTIVE_SAMPLING_TARGET", None
956+
)
921957
_settings.distributed_tracing.sampler.full_granularity._remote_parent_sampled = (
922958
(
923959
"adaptive"
@@ -957,6 +993,14 @@ def default_otlp_host(host):
957993
_settings.distributed_tracing.sampler.partial_granularity.type = os.environ.get(
958994
"NEW_RELIC_DISTRIBUTED_TRACING_SAMPLER_PARTIAL_GRANULARITY_TYPE", "essential"
959995
)
996+
_settings.distributed_tracing.sampler.partial_granularity._root = (
997+
"adaptive"
998+
if os.environ.get("NEW_RELIC_DISTRIBUTED_TRACING_SAMPLER_PARTIAL_GRANULARITY_ROOT_ADAPTIVE_SAMPLING_TARGET", None)
999+
else None
1000+
) or os.environ.get("NEW_RELIC_DISTRIBUTED_TRACING_SAMPLER_PARTIAL_GRANULARITY_ROOT", "default")
1001+
_settings.distributed_tracing.sampler.partial_granularity.root.adaptive.sampling_target = _environ_as_int(
1002+
"NEW_RELIC_DISTRIBUTED_TRACING_SAMPLER_PARTIAL_GRANULARITY_ROOT_ADAPTIVE_SAMPLING_TARGET", None
1003+
)
9601004
_settings.distributed_tracing.sampler.partial_granularity._remote_parent_sampled = (
9611005
"adaptive"
9621006
if os.environ.get(

newrelic/core/samplers/sampler_proxy.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,11 @@ def __init__(self, settings):
2323
adaptive_sampler = AdaptiveSampler(settings.sampling_target, sampling_target_period)
2424
self._samplers = {"global": adaptive_sampler}
2525
# Add adaptive sampler instances for each config section if configured.
26+
self.add_adaptive_sampler(
27+
(True, 0),
28+
settings.distributed_tracing.sampler.full_granularity.root.adaptive.sampling_target,
29+
sampling_target_period,
30+
)
2631
self.add_adaptive_sampler(
2732
(True, 1),
2833
settings.distributed_tracing.sampler.full_granularity.remote_parent_sampled.adaptive.sampling_target,
@@ -33,6 +38,11 @@ def __init__(self, settings):
3338
settings.distributed_tracing.sampler.full_granularity.remote_parent_not_sampled.adaptive.sampling_target,
3439
sampling_target_period,
3540
)
41+
self.add_adaptive_sampler(
42+
(False, 0),
43+
settings.distributed_tracing.sampler.partial_granularity.root.adaptive.sampling_target,
44+
sampling_target_period,
45+
)
3646
self.add_adaptive_sampler(
3747
(False, 1),
3848
settings.distributed_tracing.sampler.partial_granularity.remote_parent_sampled.adaptive.sampling_target,

0 commit comments

Comments
 (0)