Skip to content

Commit efe0021

Browse files
committed
Part of otel integration wip
1 parent 094c7f5 commit efe0021

File tree

3 files changed

+42
-4
lines changed

3 files changed

+42
-4
lines changed

sentry_sdk/integrations/opentelemetry/integration.py

Lines changed: 40 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
are experimental and not suitable for production use. They may be changed or
44
removed at any time without prior notice.
55
"""
6-
6+
import sentry_sdk
77
from sentry_sdk.integrations import DidNotEnable, Integration
88
from sentry_sdk.integrations.opentelemetry.propagator import SentryPropagator
99
from sentry_sdk.integrations.opentelemetry.span_processor import SentrySpanProcessor
@@ -13,9 +13,16 @@
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
1617
except 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+
1926
try:
2027
from opentelemetry.instrumentation.django import DjangoInstrumentor # type: ignore[import-not-found]
2128
except ImportError:
@@ -30,6 +37,20 @@
3037
class 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

4768
def _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

5592
def _setup_instrumentors():

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ def get_file_text(file_name):
7171
"mcp": ["mcp>=1.15.0"],
7272
"openai": ["openai>=1.0.0", "tiktoken>=0.3.0"],
7373
"openfeature": ["openfeature-sdk>=0.7.1"],
74-
"opentelemetry": ["opentelemetry-distro>=0.35b0"],
74+
"opentelemetry": ["opentelemetry-distro>=0.35b0", "opentelemetry-exporter-otlp-proto-http>=1.0.0"],
7575
"opentelemetry-experimental": ["opentelemetry-distro"],
7676
"pure-eval": ["pure_eval", "executing", "asttokens"],
7777
"pydantic_ai": ["pydantic-ai>=1.0.0"],

tox.ini

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -344,6 +344,7 @@ deps =
344344

345345
# OpenTelemetry (OTel)
346346
opentelemetry: opentelemetry-distro
347+
opentelemetry: opentelemetry-exporter-otlp-proto-http
347348

348349
# OpenTelemetry Experimental (POTel)
349350
potel: -e .[opentelemetry-experimental]

0 commit comments

Comments
 (0)