in app/observability.py [0:0]
def setup_otel_exporter(app_name: str, endpoint: str):
if settings.running_unittests == 1:
# If we're running unittests, skip setting up exporter and provider so
# it's using the default no-op things
return
logger.info(
"Starting opentelemetry exporter %s", endpoint, extra={"endpoint": endpoint}
)
# Service name is required for most backends
resource = Resource.create(attributes={SERVICE_NAME: app_name})
span_exporter, metric_exporter = get_exporter(endpoint)
tracerProvider = TracerProvider(resource=resource)
processor = BatchSpanProcessor(span_exporter)
tracerProvider.add_span_processor(processor)
trace.set_tracer_provider(tracerProvider)
reader = PeriodicExportingMetricReader(metric_exporter)
meterProvider = MeterProvider(resource=resource, metric_readers=[reader])
metrics.set_meter_provider(meterProvider)