integration.py 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. """
  2. IMPORTANT: The contents of this file are part of a proof of concept and as such
  3. are experimental and not suitable for production use. They may be changed or
  4. removed at any time without prior notice.
  5. """
  6. from sentry_sdk.integrations import DidNotEnable, Integration
  7. from sentry_sdk.integrations.opentelemetry.propagator import SentryPropagator
  8. from sentry_sdk.integrations.opentelemetry.span_processor import SentrySpanProcessor
  9. from sentry_sdk.utils import logger
  10. try:
  11. from opentelemetry import trace
  12. from opentelemetry.propagate import set_global_textmap
  13. from opentelemetry.sdk.trace import TracerProvider
  14. except ImportError:
  15. raise DidNotEnable("opentelemetry not installed")
  16. try:
  17. from opentelemetry.instrumentation.django import DjangoInstrumentor # type: ignore[import-not-found]
  18. except ImportError:
  19. DjangoInstrumentor = None
  20. CONFIGURABLE_INSTRUMENTATIONS = {
  21. DjangoInstrumentor: {"is_sql_commentor_enabled": True},
  22. }
  23. class OpenTelemetryIntegration(Integration):
  24. identifier = "opentelemetry"
  25. @staticmethod
  26. def setup_once():
  27. # type: () -> None
  28. logger.warning(
  29. "[OTel] Initializing highly experimental OpenTelemetry support. "
  30. "Use at your own risk."
  31. )
  32. _setup_sentry_tracing()
  33. # _setup_instrumentors()
  34. logger.debug("[OTel] Finished setting up OpenTelemetry integration")
  35. def _setup_sentry_tracing():
  36. # type: () -> None
  37. provider = TracerProvider()
  38. provider.add_span_processor(SentrySpanProcessor())
  39. trace.set_tracer_provider(provider)
  40. set_global_textmap(SentryPropagator())
  41. def _setup_instrumentors():
  42. # type: () -> None
  43. for instrumentor, kwargs in CONFIGURABLE_INSTRUMENTATIONS.items():
  44. instrumentor().instrument(**kwargs)