diff --git a/backend/open_webui/env.py b/backend/open_webui/env.py index 6b1c9e461e..83625031ea 100644 --- a/backend/open_webui/env.py +++ b/backend/open_webui/env.py @@ -695,6 +695,7 @@ AUDIT_EXCLUDED_PATHS = [path.lstrip("/") for path in AUDIT_EXCLUDED_PATHS] #################################### ENABLE_OTEL = os.environ.get("ENABLE_OTEL", "False").lower() == "true" +ENABLE_OTEL_TRACES = os.environ.get("ENABLE_OTEL_TRACES", "False").lower() == "true" ENABLE_OTEL_METRICS = os.environ.get("ENABLE_OTEL_METRICS", "False").lower() == "true" ENABLE_OTEL_LOGS = os.environ.get("ENABLE_OTEL_LOGS", "False").lower() == "true" diff --git a/backend/open_webui/utils/telemetry/setup.py b/backend/open_webui/utils/telemetry/setup.py index cd1f45ea6a..36294b4e56 100644 --- a/backend/open_webui/utils/telemetry/setup.py +++ b/backend/open_webui/utils/telemetry/setup.py @@ -17,6 +17,7 @@ from open_webui.env import ( OTEL_SERVICE_NAME, OTEL_EXPORTER_OTLP_ENDPOINT, OTEL_EXPORTER_OTLP_INSECURE, + ENABLE_OTEL_TRACES, ENABLE_OTEL_METRICS, OTEL_BASIC_AUTH_USERNAME, OTEL_BASIC_AUTH_PASSWORD, @@ -27,29 +28,30 @@ from open_webui.env import ( def setup(app: FastAPI, db_engine: Engine): # set up trace resource = Resource.create(attributes={SERVICE_NAME: OTEL_SERVICE_NAME}) - trace.set_tracer_provider(TracerProvider(resource=resource)) + if ENABLE_OTEL_TRACES: + trace.set_tracer_provider(TracerProvider(resource=resource)) - # Add basic auth header only if both username and password are not empty - headers = [] - if OTEL_BASIC_AUTH_USERNAME and OTEL_BASIC_AUTH_PASSWORD: - auth_string = f"{OTEL_BASIC_AUTH_USERNAME}:{OTEL_BASIC_AUTH_PASSWORD}" - auth_header = b64encode(auth_string.encode()).decode() - headers = [("authorization", f"Basic {auth_header}")] + # Add basic auth header only if both username and password are not empty + headers = [] + if OTEL_BASIC_AUTH_USERNAME and OTEL_BASIC_AUTH_PASSWORD: + auth_string = f"{OTEL_BASIC_AUTH_USERNAME}:{OTEL_BASIC_AUTH_PASSWORD}" + auth_header = b64encode(auth_string.encode()).decode() + headers = [("authorization", f"Basic {auth_header}")] - # otlp export - if OTEL_OTLP_SPAN_EXPORTER == "http": - exporter = HttpOTLPSpanExporter( - endpoint=OTEL_EXPORTER_OTLP_ENDPOINT, - headers=headers, - ) - else: - exporter = OTLPSpanExporter( - endpoint=OTEL_EXPORTER_OTLP_ENDPOINT, - insecure=OTEL_EXPORTER_OTLP_INSECURE, - headers=headers, - ) - trace.get_tracer_provider().add_span_processor(BatchSpanProcessor(exporter)) - Instrumentor(app=app, db_engine=db_engine).instrument() + # otlp export + if OTEL_OTLP_SPAN_EXPORTER == "http": + exporter = HttpOTLPSpanExporter( + endpoint=OTEL_EXPORTER_OTLP_ENDPOINT, + headers=headers, + ) + else: + exporter = OTLPSpanExporter( + endpoint=OTEL_EXPORTER_OTLP_ENDPOINT, + insecure=OTEL_EXPORTER_OTLP_INSECURE, + headers=headers, + ) + trace.get_tracer_provider().add_span_processor(BatchSpanProcessor(exporter)) + Instrumentor(app=app, db_engine=db_engine).instrument() # set up metrics only if enabled if ENABLE_OTEL_METRICS: