logs.py 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. import logging
  2. from base64 import b64encode
  3. from opentelemetry.sdk._logs import (
  4. LoggingHandler,
  5. LoggerProvider,
  6. )
  7. from opentelemetry.exporter.otlp.proto.grpc._log_exporter import OTLPLogExporter
  8. from opentelemetry.exporter.otlp.proto.http._log_exporter import (
  9. OTLPLogExporter as HttpOTLPLogExporter,
  10. )
  11. from opentelemetry.sdk._logs.export import BatchLogRecordProcessor
  12. from opentelemetry._logs import set_logger_provider
  13. from opentelemetry.sdk.resources import SERVICE_NAME, Resource
  14. from open_webui.env import (
  15. OTEL_SERVICE_NAME,
  16. OTEL_LOGS_EXPORTER_OTLP_ENDPOINT,
  17. OTEL_LOGS_EXPORTER_OTLP_INSECURE,
  18. OTEL_LOGS_BASIC_AUTH_USERNAME,
  19. OTEL_LOGS_BASIC_AUTH_PASSWORD,
  20. OTEL_LOGS_OTLP_SPAN_EXPORTER,
  21. )
  22. def setup_logging():
  23. headers = []
  24. if OTEL_LOGS_BASIC_AUTH_USERNAME and OTEL_LOGS_BASIC_AUTH_PASSWORD:
  25. auth_string = f"{OTEL_LOGS_BASIC_AUTH_USERNAME}:{OTEL_LOGS_BASIC_AUTH_PASSWORD}"
  26. auth_header = b64encode(auth_string.encode()).decode()
  27. headers = [("authorization", f"Basic {auth_header}")]
  28. resource = Resource.create(attributes={SERVICE_NAME: OTEL_SERVICE_NAME})
  29. if OTEL_LOGS_OTLP_SPAN_EXPORTER == "http":
  30. exporter = HttpOTLPLogExporter(
  31. endpoint=OTEL_LOGS_EXPORTER_OTLP_ENDPOINT,
  32. headers=headers,
  33. )
  34. else:
  35. exporter = OTLPLogExporter(
  36. endpoint=OTEL_LOGS_EXPORTER_OTLP_ENDPOINT,
  37. insecure=OTEL_LOGS_EXPORTER_OTLP_INSECURE,
  38. headers=headers,
  39. )
  40. logger_provider = LoggerProvider(resource=resource)
  41. set_logger_provider(logger_provider)
  42. logger_provider.add_log_record_processor(BatchLogRecordProcessor(exporter))
  43. otel_handler = LoggingHandler(logger_provider=logger_provider)
  44. return otel_handler
  45. otel_handler = setup_logging()