def setup_otel_exporter()

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)