Skip to content

Commit 5052850

Browse files
committed
Add support for disabling stack trace collection
1 parent 1a05aba commit 5052850

4 files changed

Lines changed: 39 additions & 0 deletions

File tree

src/instana/tracer.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
from instana.propagators.text_propagator import TextPropagator
3131
from instana.recorder import StanRecorder
3232
from instana.sampling import InstanaSampler, Sampler
33+
from instana.singletons import agent
3334
from instana.span.kind import EXIT_SPANS
3435
from instana.span.span import InstanaSpan, get_current_span
3536
from instana.span_context import SpanContext
@@ -179,6 +180,10 @@ def _add_stack(self, span: InstanaSpan, limit: Optional[int] = 30) -> None:
179180
Adds a backtrace to <span>. The default length limit for
180181
stack traces is 30 frames. A hard limit of 40 frames is enforced.
181182
"""
183+
# Skip stack trace collection if it's disabled
184+
if agent.options.is_span_disabled(category="stack"):
185+
return
186+
182187
try:
183188
sanitized_stack = []
184189
if limit > 40:

src/instana/util/config.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
"databases",
1515
"messaging",
1616
"protocols", # http, grpc, etc.
17+
"stack", # stack trace collection
1718
]
1819

1920
# Mapping of span type calls (framework, library name, instrumentation name) to categories

tests/test_span_disabling.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ def test_is_span_disabled_default(self):
1919
options = BaseOptions()
2020
assert not options.is_span_disabled(category="logging")
2121
assert not options.is_span_disabled(category="databases")
22+
assert not options.is_span_disabled(category="stack")
2223
assert not options.is_span_disabled(span_type="redis")
2324

2425
def test_disable_category(self):
@@ -55,6 +56,7 @@ def test_env_var_disable_all(self, value, monkeypatch):
5556
assert options.is_span_disabled(category="databases") is True
5657
assert options.is_span_disabled(category="messaging") is True
5758
assert options.is_span_disabled(category="protocols") is True
59+
assert options.is_span_disabled(category="stack") is True
5860

5961
def test_env_var_disable_specific(self, monkeypatch):
6062
monkeypatch.setenv("INSTANA_TRACING_DISABLE", "logging, redis")
@@ -75,5 +77,17 @@ def test_yaml_config(self):
7577
assert options.is_span_disabled(span_type="mysql")
7678
assert not options.is_span_disabled(span_type="redis")
7779

80+
def test_disable_stack_category(self):
81+
options = BaseOptions()
82+
options.disabled_spans = ["stack"]
83+
assert options.is_span_disabled(category="stack")
84+
assert not options.is_span_disabled(category="logging")
85+
86+
def test_env_var_disable_stack(self, monkeypatch):
87+
monkeypatch.setenv("INSTANA_TRACING_DISABLE", "stack")
88+
options = BaseOptions()
89+
assert options.is_span_disabled(category="stack") is True
90+
assert options.is_span_disabled(category="logging") is False
91+
7892

7993
# Made with Bob

tests/test_tracer.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -185,6 +185,25 @@ def test_tracer_add_stack_high_limit(
185185
assert "m" in stack_0.keys()
186186

187187

188+
def test_tracer_add_stack_disabled(
189+
span: InstanaSpan, tracer_provider: InstanaTracerProvider, mocker
190+
) -> None:
191+
tracer = InstanaTracer(
192+
tracer_provider.sampler,
193+
tracer_provider._span_processor,
194+
tracer_provider._exporter,
195+
tracer_provider._propagators,
196+
)
197+
198+
# Mock agent.options.is_span_disabled to return True for "stack" category
199+
mocker.patch("instana.singletons.agent.options.is_span_disabled", return_value=True)
200+
201+
tracer._add_stack(span, 30)
202+
203+
# Verify that no stack trace was added to the span
204+
assert span.stack is None
205+
206+
188207
def test_tracer_add_stack_low_limit(
189208
span: InstanaSpan, tracer_provider: InstanaTracerProvider
190209
) -> None:

0 commit comments

Comments
 (0)