跳到主要内容

OpenTelemetry

OPL 数据空间支持通过 OpenTelemetry(OTel)协议导出分布式追踪和指标。这让你可以把它接入 Grafana LGTM(Loki、Grafana、Tempo、Mimir)、Jaeger、Tempo、Prometheus 等现代可观测性系统,实时观察请求、数据库 / Redis 查询、响应时延等信息。

额外依赖

如果你是通过源码或 pip 运行 OPL 数据空间,而不是官方 Docker 镜像,OpenTelemetry 依赖不一定默认安装。你可能需要手动安装:

pip install opentelemetry-api opentelemetry-sdk opentelemetry-exporter-otlp

🚀 用 Docker Compose 快速启动

最快的体验方式,是直接使用预配置好的 Compose 文件:

docker compose -f docker-compose.otel.yaml up -d

docker-compose.otel.yaml 会启动以下组件:

服务端口说明
grafana3000(UI)、4317(OTLP/gRPC)、4318(HTTP)Grafana LGTM 一体化栈
open-webui8088(宿主)→ 8080(容器)开启 OTEL 的 OPL 数据空间

启动后可以访问 http://localhost:3000
登录:admin / admin

⚙️ 环境变量

可通过这些环境变量控制 OpenTelemetry:

变量默认值说明
ENABLE_OTELCompose 中为 true总开关
ENABLE_OTEL_TRACESCompose 中为 true是否导出 trace
ENABLE_OTEL_METRICSCompose 中为 true是否导出 FastAPI HTTP metrics
OTEL_EXPORTER_OTLP_ENDPOINTCompose 中为 http://grafana:4317OTLP 收集端点
OTEL_EXPORTER_OTLP_INSECURECompose 中为 true是否禁用 TLS
OTEL_SERVICE_NAMEopen-webuitrace / metrics 中的服务名
OTEL_METRICS_EXPORT_INTERVAL_MILLIS10000指标导出周期(毫秒)
OTEL_BASIC_AUTH_USERNAME / OTEL_BASIC_AUTH_PASSWORD如果收集器要求 Basic Auth,可在这里设置
提示

可以在 .env 或 Compose 文件中覆盖这些默认值。

open-webui:
  environment:
    - ENABLE_OTEL=true
    - ENABLE_OTEL_TRACES=true
    - ENABLE_OTEL_METRICS=true
    - OTEL_EXPORTER_OTLP_INSECURE=true
    - OTEL_EXPORTER_OTLP_ENDPOINT=http://grafana:4317
    - OTEL_SERVICE_NAME=open-webui

📊 会采集什么?

分布式追踪

OPL 数据空间后端会自动为这些组件打点:

  • FastAPI 路由
  • SQLAlchemy 数据库查询
  • Redis
  • requestshttpxaiohttp 等外部调用

每个 span 通常会包含以下信息:

  • db.instancedb.statementredis.args
  • http.urlhttp.methodhttp.status_code
  • 异常时的 error.messageerror.kind

指标

默认会导出以下 HTTP 指标:

指标类型单位标签
http.server.requestsCounter1http.methodhttp.routehttp.status_code
http.server.durationHistogramms与上面相同

指标默认每 10 秒通过 OTLP 发送一次,周期可用 OTEL_METRICS_EXPORT_INTERVAL_MILLIS 调整。你可以在 Grafana 中通过 Prometheus / Mimir 做可视化。

🔧 接外部 Collector

如果你要把 OPL 数据空间接到外部 OTel Collector:

docker run -d --name open-webui \
  -p 8088:8080 \
  -e ENABLE_OTEL=true \
  -e ENABLE_OTEL_TRACES=true \
  -e ENABLE_OTEL_METRICS=true \
  -e OTEL_EXPORTER_OTLP_ENDPOINT=http://your-collector:4317 \
  -e OTEL_EXPORTER_OTLP_INSECURE=true \
  -e OTEL_SERVICE_NAME=open-webui \
  -v open-webui:/app/backend/data \
  ghcr.io/open-webui/open-webui:main

🚨 排障

Grafana 里看不到 trace / metrics?

  • 确认 ENABLE_OTELENABLE_OTEL_TRACESENABLE_OTEL_METRICS 都是 true
  • 检查 OTEL_EXPORTER_OTLP_ENDPOINT 是否正确
  • 查看 OPL 数据空间日志:docker logs open-webui
  • 确认 Collector 的 4317 端口可达

Collector 需要认证?

  • 设置 OTEL_BASIC_AUTH_USERNAMEOTEL_BASIC_AUTH_PASSWORD
  • 如果你启用了 TLS,请相应调整或移除 OTEL_EXPORTER_OTLP_INSECURE