diff --git a/sentry_sdk/client.py b/sentry_sdk/client.py index 24824e0050..219f69b404 100644 --- a/sentry_sdk/client.py +++ b/sentry_sdk/client.py @@ -27,6 +27,7 @@ get_before_send_log, get_before_send_metric, has_logs_enabled, + has_metrics_enabled, ) from sentry_sdk.serializer import serialize from sentry_sdk.tracing import trace @@ -374,7 +375,9 @@ def _capture_envelope(envelope): self.log_batcher = LogBatcher(capture_func=_capture_envelope) - self.metrics_batcher = MetricsBatcher(capture_func=_capture_envelope) + self.metrics_batcher = None + if has_metrics_enabled(self.options): + self.metrics_batcher = MetricsBatcher(capture_func=_capture_envelope) max_request_body_size = ("always", "never", "small", "medium") if self.options["max_request_body_size"] not in max_request_body_size: @@ -975,7 +978,7 @@ def _capture_log(self, log): def _capture_metric(self, metric): # type: (Optional[Metric]) -> None - if metric is None: + if not has_metrics_enabled(self.options) or metric is None: return current_scope = sentry_sdk.get_current_scope() diff --git a/sentry_sdk/consts.py b/sentry_sdk/consts.py index 33900acd50..a5975afb23 100644 --- a/sentry_sdk/consts.py +++ b/sentry_sdk/consts.py @@ -1005,6 +1005,7 @@ def __init__( enable_logs=False, # type: bool before_send_log=None, # type: Optional[Callable[[Log, Hint], Optional[Log]]] trace_ignore_status_codes=frozenset(), # type: AbstractSet[int] + enable_metrics=True, # type: bool ): # type: (...) -> None """Initialize the Sentry SDK with the given parameters. All parameters described here can be used in a call to `sentry_sdk.init()`. diff --git a/sentry_sdk/utils.py b/sentry_sdk/utils.py index 93c35cee8a..02e31ef375 100644 --- a/sentry_sdk/utils.py +++ b/sentry_sdk/utils.py @@ -2047,6 +2047,14 @@ def get_before_send_log(options): ) +def has_metrics_enabled(options): + # type: (Optional[dict[str, Any]]) -> bool + if options is None: + return False + + return bool(options.get("enable_metrics", True)) + + def get_before_send_metric(options): # type: (Optional[dict[str, Any]]) -> Optional[Callable[[Metric, Hint], Optional[Metric]]] if options is None: diff --git a/tests/test_metrics.py b/tests/test_metrics.py index 8026e17bb6..29b139c184 100644 --- a/tests/test_metrics.py +++ b/tests/test_metrics.py @@ -33,6 +33,18 @@ def envelopes_to_metrics(envelopes): return res +def test_metrics_disabled(sentry_init, capture_envelopes): + sentry_init(enable_metrics=False) + + envelopes = capture_envelopes() + + sentry_sdk.metrics.count("test.counter", 1) + sentry_sdk.metrics.gauge("test.gauge", 42) + sentry_sdk.metrics.distribution("test.distribution", 200) + + assert len(envelopes) == 0 + + def test_metrics_basics(sentry_init, capture_envelopes): sentry_init() envelopes = capture_envelopes()