33are experimental and not suitable for production use. They may be changed or
44removed at any time without prior notice.
55"""
6-
6+ import sentry_sdk
77from sentry_sdk .integrations import DidNotEnable , Integration
88from sentry_sdk .integrations .opentelemetry .propagator import SentryPropagator
99from sentry_sdk .integrations .opentelemetry .span_processor import SentrySpanProcessor
1313 from opentelemetry import trace
1414 from opentelemetry .propagate import set_global_textmap
1515 from opentelemetry .sdk .trace import TracerProvider
16+ from opentelemetry .sdk .trace .export import BatchSpanProcessor
1617except ImportError :
1718 raise DidNotEnable ("opentelemetry not installed" )
1819
20+ try :
21+ from opentelemetry .exporter .otlp .proto .http .trace_exporter import OTLPSpanExporter
22+ except ImportError :
23+ OTLPSpanExporter = None
24+
25+
1926try :
2027 from opentelemetry .instrumentation .django import DjangoInstrumentor # type: ignore[import-not-found]
2128except ImportError :
3037class OpenTelemetryIntegration (Integration ):
3138 identifier = "opentelemetry"
3239
40+ def __init__ (self , enable_span_processor = True , enable_otlp_exporter = False , enable_propagator = True ):
41+ # type: (bool, bool, bool) -> None
42+ self .enable_span_processor = enable_span_processor
43+ self .enable_otlp_exporter = enable_otlp_exporter
44+ self .enable_propagator = enable_propagator
45+
46+ if self .enable_otlp_exporter and OTLPSpanExporter is None :
47+ logger .warning ("[Otel] OTLPSpanExporter not installed." )
48+ self .enable_otlp_exporter = False
49+
50+ if self .enable_span_processor and self .enable_otlp_exporter :
51+ logger .warning ("[Otel] Disabling span processor because otlp exporter is set." )
52+ self .enable_span_processor = False
53+
3354 @staticmethod
3455 def setup_once ():
3556 # type: () -> None
@@ -46,10 +67,26 @@ def setup_once():
4667
4768def _setup_sentry_tracing ():
4869 # type: () -> None
70+ integration = sentry_sdk .get_client ().get_integration (OpenTelemetryIntegration )
71+ if integration is None :
72+ return
73+
74+ # TODO provider oblivious
4975 provider = TracerProvider ()
50- provider .add_span_processor (SentrySpanProcessor ())
76+
77+ if integration .enable_otlp_exporter :
78+ otlp_exporter = OTLPSpanExporter (
79+ # endpoint="___OTLP_TRACES_URL___",
80+ # headers={"x-sentry-auth": "sentry sentry_key=___PUBLIC_KEY___"},
81+ )
82+ otlp_span_processor = BatchSpanProcessor (otlp_exporter )
83+ provider .add_span_processor (otlp_span_processor )
84+ elif integration .enable_span_processor :
85+ provider .add_span_processor (SentrySpanProcessor ())
5186 trace .set_tracer_provider (provider )
52- set_global_textmap (SentryPropagator ())
87+
88+ if integration .enable_propagator :
89+ set_global_textmap (SentryPropagator ())
5390
5491
5592def _setup_instrumentors ():
0 commit comments