Pārlūkot izejas kodu

feat/enh: `ENABLE_OTEL_TRACES` granular otel support

Timothy Jaeryang Baek 1 mēnesi atpakaļ
vecāks
revīzija
919d65f36f
2 mainītis faili ar 24 papildinājumiem un 21 dzēšanām
  1. 1 0
      backend/open_webui/env.py
  2. 23 21
      backend/open_webui/utils/telemetry/setup.py

+ 1 - 0
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"
 

+ 23 - 21
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: