feat/enh: ENABLE_OTEL_TRACES granular otel support

This commit is contained in:
Timothy Jaeryang Baek 2025-08-20 23:03:12 +04:00
parent 19e82ace23
commit 919d65f36f
2 changed files with 24 additions and 21 deletions

View file

@ -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 = 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_METRICS = os.environ.get("ENABLE_OTEL_METRICS", "False").lower() == "true"
ENABLE_OTEL_LOGS = os.environ.get("ENABLE_OTEL_LOGS", "False").lower() == "true" ENABLE_OTEL_LOGS = os.environ.get("ENABLE_OTEL_LOGS", "False").lower() == "true"

View file

@ -17,6 +17,7 @@ from open_webui.env import (
OTEL_SERVICE_NAME, OTEL_SERVICE_NAME,
OTEL_EXPORTER_OTLP_ENDPOINT, OTEL_EXPORTER_OTLP_ENDPOINT,
OTEL_EXPORTER_OTLP_INSECURE, OTEL_EXPORTER_OTLP_INSECURE,
ENABLE_OTEL_TRACES,
ENABLE_OTEL_METRICS, ENABLE_OTEL_METRICS,
OTEL_BASIC_AUTH_USERNAME, OTEL_BASIC_AUTH_USERNAME,
OTEL_BASIC_AUTH_PASSWORD, OTEL_BASIC_AUTH_PASSWORD,
@ -27,29 +28,30 @@ from open_webui.env import (
def setup(app: FastAPI, db_engine: Engine): def setup(app: FastAPI, db_engine: Engine):
# set up trace # set up trace
resource = Resource.create(attributes={SERVICE_NAME: OTEL_SERVICE_NAME}) 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 # Add basic auth header only if both username and password are not empty
headers = [] headers = []
if OTEL_BASIC_AUTH_USERNAME and OTEL_BASIC_AUTH_PASSWORD: if OTEL_BASIC_AUTH_USERNAME and OTEL_BASIC_AUTH_PASSWORD:
auth_string = f"{OTEL_BASIC_AUTH_USERNAME}:{OTEL_BASIC_AUTH_PASSWORD}" auth_string = f"{OTEL_BASIC_AUTH_USERNAME}:{OTEL_BASIC_AUTH_PASSWORD}"
auth_header = b64encode(auth_string.encode()).decode() auth_header = b64encode(auth_string.encode()).decode()
headers = [("authorization", f"Basic {auth_header}")] headers = [("authorization", f"Basic {auth_header}")]
# otlp export # otlp export
if OTEL_OTLP_SPAN_EXPORTER == "http": if OTEL_OTLP_SPAN_EXPORTER == "http":
exporter = HttpOTLPSpanExporter( exporter = HttpOTLPSpanExporter(
endpoint=OTEL_EXPORTER_OTLP_ENDPOINT, endpoint=OTEL_EXPORTER_OTLP_ENDPOINT,
headers=headers, headers=headers,
) )
else: else:
exporter = OTLPSpanExporter( exporter = OTLPSpanExporter(
endpoint=OTEL_EXPORTER_OTLP_ENDPOINT, endpoint=OTEL_EXPORTER_OTLP_ENDPOINT,
insecure=OTEL_EXPORTER_OTLP_INSECURE, insecure=OTEL_EXPORTER_OTLP_INSECURE,
headers=headers, headers=headers,
) )
trace.get_tracer_provider().add_span_processor(BatchSpanProcessor(exporter)) trace.get_tracer_provider().add_span_processor(BatchSpanProcessor(exporter))
Instrumentor(app=app, db_engine=db_engine).instrument() Instrumentor(app=app, db_engine=db_engine).instrument()
# set up metrics only if enabled # set up metrics only if enabled
if ENABLE_OTEL_METRICS: if ENABLE_OTEL_METRICS: