Langfuse 技术架构深度解析:从一个 Postgres 到 ClickHouse+Redis 的可观测性平台演进
> 来源: https://github.com/langfuse/langfuse
> 架构手册: https://langfuse.com/handbook/product-engineering/architecture
> v3 架构演进博客: https://langfuse.com/blog/2024-12-langfuse-v3-infrastructure-evolution
> 自托管文档: https://langfuse.com/self-hosting
> ClickHouse 合作博客: https://clickhouse.com/blog/langfuse-and-clickhouse-a-new-data-stack-for-modern-llm-applications
> 研究时间: 2026-03-17
📌 一句话总结
Langfuse 是目前最成熟的开源 LLM 可观测性平台(23K+ Stars,YC W23),从 2023 年的 Next.js + Postgres 单体架构,演进到 v3 的 ClickHouse + PostgreSQL + Redis + S3 四组件分布式架构。自托管 docker compose up 三分钟启动,生产部署支持 K8s Helm 和 AWS/Azure/GCP Terraform 模板。被 ClickHouse 收购后成为其 LLM 可观测性标杆。
🏗️ 架构全景
v1 → v3 演进
v1 (2023 YC W23) v2 (2024 中期) v3 (2024.12 发布)
┌──────────┐ ┌──────────────┐ ┌──────────────────────┐
│ Next.js │ │ Next.js Web │ │ Web (Next.js) │
│ + │ → │ + │ → │ Worker (Express) │
│ Postgres │ │ Redis Queue │ │ PostgreSQL (OLTP) │
└──────────┘ │ + Postgres │ │ ClickHouse (OLAP) │
└──────────────┘ │ Redis (Queue+Cache) │
│ S3/MinIO (Blob) │
└──────────────────────┘
v3 架构详解
┌─────────────────────────────────────────────────────────┐
│ VPC │
│ │
│ ┌─────────────┐ ┌──────────────┐ │
│ │ Web Server │────→│ Redis │ │
│ │ (Next.js) │ │ (Queue+Cache)│ │
│ │ UI + API │ └──────┬───────┘ │
│ └──────┬───────┘ │ │
│ │ ┌─────▼──────┐ │
│ │ │ Worker │ │
│ │ │ (Express) │ │
│ │ └──────┬──────┘ │
│ │ │ │
│ ┌──────▼───────┐ ┌────────▼────────┐ ┌────────────┐ │
│ │ PostgreSQL │ │ ClickHouse │ │ S3 / MinIO │ │
│ │ (OLTP) │ │ (OLAP) │ │ (Blob) │ │
│ │ 用户/组织/项目 │ │ Traces/Scores │ │ 原始事件 │ │
│ │ API Key/Prompt │ │ 仪表盘/分析 │ │ 多模态附件 │ │
│ │ 数据集/评估 │ │ │ │ │ │
│ └───────────────┘ └─────────────────┘ └────────────┘ │
│ │
│ ┌──────────────────────────────────────────────────┐ │
│ │ LLM API / Gateway (可选) │ │
│ │ 用于 Playground、LLM-as-a-Judge 等功能 │ │
│ └──────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────┘
四大存储组件职责
| 组件 | 类型 | 存储内容 | 为什么选它 |
|---|---|---|---|
| **PostgreSQL** | OLTP | 用户、组织、项目、API Key、Prompt、数据集、评估设置 | 事务型数据,强一致性 |
| **ClickHouse** | OLAP | Traces、Observations、Scores | 列式存储,分析查询极快,Apache 开源 |
| **Redis/Valkey** | Queue + Cache | BullMQ 事件队列 + API Key/Prompt 缓存 | 低延迟,自托管友好(比 Kafka 轻量) |
| **S3/MinIO** | Blob | 原始摄入事件、多模态附件(图片/音频/视频) | 事件持久化 + 大文件存储 |
两个应用容器
| 容器 | 框架 | 职责 |
|---|---|---|
| **langfuse/langfuse** (Web) | Next.js | UI 界面 + 所有 API(摄入、查询、管理) |
| **langfuse/worker** (Worker) | Express | 异步事件处理、token 化、成本计算、LLM-as-a-Judge、数据导出 |
🔧 关键技术设计
1. 排队摄入管线(解决高峰流量)
v1 的致命问题:高峰期摄入 API 延迟飙到 50 秒,因为每条事件同步写 Postgres。
v3 的解决方案:
SDK batch 发送
↓
Web API(轻量验证:认证 + 格式检查)
↓
事件写入 S3(持久化,确保不丢)
↓
S3 引用放入 Redis 队列(BullMQ)
↓
Worker 异步消费:token 化 → 成本计算 → 写入 ClickHouse
关键:Redis 队列里只传 S3 引用,不传实际数据。这样即使 ClickHouse 临时不可用,事件也不会丢失(全在 S3 里)。
2. ClickHouse ReplacingMergeTree(解决 OLAP 更新问题)
SDK 会对同一个 Trace ID 多次发送更新。在 Postgres 里 UPDATE 很快,但在 ClickHouse 里 UPDATE 极其昂贵。
解决方案:
- 把 UPDATE 转为 INSERT(新行)
- 使用
ReplacingMergeTree引擎,后台自动去重 - 90% 的更新在 10 秒内到达 → 用 Redis 缓存当前状态,避免从 ClickHouse 读取不一致数据
新事件到达
↓
从 Redis 读取当前状态(10 秒内缓存)
↓
合并更新 → INSERT 新行到 ClickHouse
↓
ClickHouse 后台 merge 去重
3. Redis 三重角色
| 角色 | 用途 | 效果 |
|---|---|---|
| **事件队列** | BullMQ 消息队列 | 解耦摄入与处理,削峰填谷 |
| **API Key 缓存** | 内存缓存所有 API Key | 每次 API 调用不查数据库,未授权请求极低资源拒绝 |
| **Prompt 缓存** | Read-through cache | 热门 Prompt 不查 Postgres,p95 延迟从 7 秒降到毫秒级 |
4. 可恢复性设计
所有摄入事件先写 S3,再处理。即使 ClickHouse 宕机,事件也安全保存在 S3 中,恢复后自动补处理。这个设计保证了零数据丢失。
📦 安装方法
方法一:Docker Compose(最简单,适合试用和小规模)
# 1. 克隆仓库
git clone https://github.com/langfuse/langfuse.git
cd langfuse
# 2. 修改 docker-compose.yml 中的密钥(标记为 # CHANGEME 的行)
# 3. 启动
docker compose up
# 4. 等待 2-3 分钟,看到 "Ready" 后访问 http://localhost:3000
最低要求(VM 部署):
- 4 核 CPU + 16 GB 内存(如 AWS t3.xlarge)
- 100 GB 磁盘
- 对外端口:3000(Web UI)、9090(MinIO)
方法二:Kubernetes Helm(生产推荐)
# 添加 Helm repo
helm repo add langfuse https://langfuse.github.io/langfuse-helm
helm repo update
# 安装
helm install langfuse langfuse/langfuse \
--namespace langfuse \
--create-namespace \
-f values.yaml
支持:
- 水平扩展(Web/Worker 独立伸缩)
- 高可用
- 自动备份
- 滚动升级 + 后台迁移(升级不停服)
方法三:Terraform 模板
| 云平台 | 文档 |
|---|---|
| **AWS** | https://langfuse.com/self-hosting/deployment/aws |
| **Azure** | https://langfuse.com/self-hosting/deployment/azure |
| **GCP** | https://langfuse.com/self-hosting/deployment/gcp |
一键部署完整基础设施:ECS/EKS + Aurora PostgreSQL + ElastiCache Redis + ClickHouse + S3。
方法四:Langfuse Cloud(零运维)
直接注册 https://cloud.langfuse.com,免费 Hobby 套餐即可开始。
💰 定价
| 方案 | 月费 | 含量 | 数据保留 | 用户数 | 适用场景 |
|---|---|---|---|---|---|
| **Hobby** | 免费 | 50K units | 30 天 | 2 | 个人试用 |
| **Core** | $29 | 100K units | 90 天 | 无限 | 小团队生产 |
| **Pro** | $199 | 100K units | 3 年 | 无限 | 需要合规(SOC2/ISO27001) |
| **Enterprise** | $2,499+ | 100K units | 3 年 | 无限 | 大型组织,专属 SLA |
| **自托管** | 免费 | 无限 | 无限 | 无限 | 完全掌控 |
超出套餐:$8 / 100K units(所有付费方案)
> "Unit" = 1 个 Trace、Observation 或 Score
自托管 vs Cloud 成本对比
假设月处理 100 万 units:
- Cloud Pro: $199 + $72 超出 = $271/月
- 自托管(t3.xlarge): ~$150/月(EC2 + RDS + ElastiCache + S3)
自托管在大规模时更便宜,但需要运维投入。小规模直接用 Cloud 更省事。
🔌 集成生态
SDK & 框架
| 集成 | 语言 | 方式 |
|---|---|---|
| **Langfuse SDK** | Python, JS/TS | 手动埋点 |
| **OpenAI** | Python, JS/TS | Drop-in 替换 SDK |
| **LangChain** | Python, JS/TS | Callback Handler |
| **LlamaIndex** | Python | Callback |
| **Vercel AI SDK** | JS/TS | 原生集成 |
| **LiteLLM** | Python | 代理模式 |
| **OpenTelemetry** | 通用 | OTLP 标准 |
| **Haystack** | Python | Content Tracing |
| **Mastra** | JS/TS | Multi-Agent 框架 |
OpenClaw 集成
Langfuse 官方有 OpenClaw 集成文档。最简单的接入方式:
1. OpenRouter Broadcast:零代码修改,在 OpenRouter 配置里加一个 Langfuse callback URL
2. LiteLLM Proxy:如果用 LiteLLM 做模型路由,自带 Langfuse 集成
🤔 深度分析
为什么选 ClickHouse 而不是其他 OLAP?
| 方案 | 优势 | 劣势 |
|---|---|---|
| **ClickHouse** ✅ | Apache 开源、列式高性能、自托管友好 | 更新昂贵(需要 ReplacingMergeTree workaround) |
| DuckDB | 嵌入式、零运维 | 不支持多节点、不适合高并发摄入 |
| Apache Druid | 实时摄入强 | 部署复杂、非 Apache 友好许可 |
| TimescaleDB | 时序优化、Postgres 扩展 | 分析查询不如列式数据库 |
Langfuse 选 ClickHouse 的决定性因素:开源许可 + 可自托管 + 列式分析性能。后来被 ClickHouse 收购更证明了这个选择。
架构的三个聪明之处
1. S3 First:所有事件先落 S3,再异步处理。这意味着即使整个处理管线宕机,数据也不会丢。这是大规模可观测性系统的标准做法(Datadog、Honeycomb 也这么干)。
2. Redis 而非 Kafka:对于需要自托管的开源项目,Redis 的运维成本远低于 Kafka。BullMQ 提供了足够的队列能力。代价是不如 Kafka 能处理极端吞吐,但对绝大多数用户够了。
3. 双数据库分离:Postgres 管事务(写多读少、强一致)、ClickHouse 管分析(写多读多、最终一致)。两者各司其职,互不干扰。
潜在问题
- ⚠️ 自托管复杂度上升:v1 只需 Postgres,v3 需要 4 个存储组件。虽然 docker-compose 封装了,但生产环境运维复杂度显著增加。
- ⚠️ ClickHouse 更新延迟:ReplacingMergeTree 的去重是后台异步的,短时间内可能读到重复数据。
- ⚠️ License Key 功能分层:部分功能(SSO、Organization Creators、UI 定制、Instance Management API)需要企业许可证。
💡 与我们的关联
1. 我们的 OpenClaw 可以直接接入
之前研究过,最简路径是 OpenRouter Broadcast——零代码改动,在 OpenRouter 后台加个 Langfuse callback 就行。所有 Agent 的 LLM 调用自动出现在 Langfuse 仪表盘。
2. 我们的服务器能跑
我们的 VPS 是 1vCPU/2GB(偏小),但 docker-compose 最低推荐 4 核 16GB。两个方案:
- 用 Cloud 免费版:50K units/月,30 天保留,够我们试用
- 在 ub2 上自托管:i9-13900K + 63GB RAM,完全够跑生产级 Langfuse
3. 反馈闭环
之前研究 auxten(ClickMem 作者)提到的 "Agent 查 Langfuse → 找 bad case → 自动优化" 模式。有了 Langfuse 的 Trace 数据,我们可以:
- 找出 Agent 失败率最高的任务类型
- 分析 token 消耗模式
- 评估不同模型的成本效益
- 发现 Prompt 需要改进的地方
❓ 常见问题
Q1: Langfuse 的 "Unit" 是什么?
Langfuse 的计费单位 unit = 1 个可计费事件,包括三种:
| Unit 类型 | 含义 | 举例 |
|---|---|---|
| **Trace** | 一次完整的用户请求链路 | 用户发了一条消息 → 1 个 trace |
| **Observation** | Trace 内的单个操作节点 | 一次 LLM 调用、一次工具调用、一次检索 |
| **Score** | 对 Trace/Observation 的评分 | 用户反馈👍、LLM-as-a-Judge 评分 |
实际消耗举例:
- 简单聊天机器人(1 次 LLM 调用):2 units/请求(1 trace + 1 observation)
- 多步骤 Agent(web_search + web_fetch + write + deploy):10-20 units/请求(1 trace + 多个 observation)
- 加上 LLM-as-a-Judge 自动评分:每个评分再 +1 unit
所以 Hobby 的 50K units/月:
- 简单应用 ≈ 25,000 次请求
- 多步骤 Agent ≈ 3,000-5,000 次请求
Q2: 有更简单运维的开源替代品吗?
有。主流开源 LLM 可观测性平台运维复杂度对比:
| 平台 | Stars | 存储组件 | 运维复杂度 |
|---|---|---|---|
| **Langfuse** | 23K+ | PG + ClickHouse + Redis + S3 | ⭐⭐⭐⭐ 复杂 |
| **Opik** (Comet) | 6K+ | MySQL + ClickHouse + Redis + Zookeeper | ⭐⭐⭐⭐ 同样复杂 |
| **Helicone** | 4K+ | PG + ClickHouse + S3 | ⭐⭐⭐ 中等 |
| **Phoenix** (Arize) | 15K+ | **仅 PostgreSQL** | ⭐ **最简单** |
| **OpenLLMetry** (Traceloop) | 3K+ | 接标准 OTLP 后端 | ⭐ 轻量 |
最简单的替代品:Phoenix(Arize)
# 安装(一行命令)
pip install arize-phoenix
# 启动(一行命令)
phoenix serve
# 打开 http://localhost:6006
Phoenix 的优势:
- 只依赖 PostgreSQL(甚至可以用 SQLite 试用)
- 没有 ClickHouse、没有 Redis、没有 S3
- 原生支持 OpenTelemetry 标准
- Apache 2.0 开源
- 支持 OpenAI / LangChain / LlamaIndex / LiteLLM 集成
- 内置 LLM 评估(hallucination、QA、toxicity)
Phoenix 的代价:
- ⚠️ 不适合极高吞吐(没有异步队列 + ClickHouse OLAP)
- ⚠️ 没有内置 Prompt 管理
- ⚠️ 没有团队协作功能
建议:个人/小团队先用 Phoenix(pip install 秒装),量大了再迁移到 Langfuse。
📊 评分
| 维度 | 评分(/10) |
|---|---|
| 技术架构 | 9.0 — 四组件分离、S3-first 持久化、ReplacingMergeTree 创新方案 |
| 安装体验 | 8.5 — docker-compose 三分钟起步,但生产 4 组件运维复杂 |
| 开源程度 | 8.5 — 核心全开源(MIT),部分企业功能需 License Key |
| 文档质量 | 9.5 — 架构博客、Handbook、部署文档极其详细透明 |
| 与我们的关联 | 8.0 — OpenRouter 零代码接入,ub2 可自托管 |
| **综合** | **8.8** |
报告由深度研究助手自动生成 | 2026-03-17
来源: https://github.com/langfuse/langfuse