GitHub Explorer

一个开源栈替代六个 SaaS:PostHog 用 HogQL 把整条产品工具链整合到一起

GitHub: https://github.com/PostHog/posthog

一句话总结

PostHog 是开源的「产品 OS」——用一个栈整合产品分析 + Web 分析 + 会话回放 + 错误追踪 + feature flags + 实验 + surveys + 数据仓库 + CDP + AI 助手,替代过去要拼装的 Amplitude + Segment + LaunchDarkly + Sentry + Hotjar。技术底座是 ClickHouse 列存 + 自研 HogQL(fork 自 ClickHouse 的 ANTLR 语法,编译时强制注入租户隔离与字段权限),数据面用 Rust 扛海量事件摄取、Python 做控制面、Temporal 编排数据工作流,70+ 垂直产品切片共用同一份 person/event 模型。PostHog Inc(YC W2020、$75M 独角兽、透明 handbook 标杆)。426 万行四语言巨型 monorepo、35K star、MIT(+ee 企业版)、6 年、按用量计费。核心张力:功能全的代价是运维重——完整自托管已弃用,真正能跑全栈的实质是 PostHog Cloud 自己。

值得关注的理由

  1. 皇冠明珠 HogQL:在用户/AI 与海量事件库之间插一层「编译期注入安全」的 SQL 方言:posthog/hogql/grammar/ 直接 fork 自 ClickHouse 官方 ANTLR 语法(只留 SELECT),经 parse→resolve→print 编译成目标 SQL。安全全在编译期做死:① printer/clickhouse.py 的 team_id_guard_for_table 打印每张表访问时自动注入 and(team_id=<ctx>, ...),缺 team_id 直接禁用全量 SELECT(多租户隔离比运行时 RLS 更早暴露错误);② 字段级权限用 JSONDropKeys(...) 把受限属性从 JSON blob 抹掉,即便 SELECT properties 也拿不到;③ escape_sql.py 全程参数化转义 + 禁 %;④ 函数白名单;⑤ 同一 AST 多后端 printer(clickhouse/postgres/duckdb)。「在用户与底层 DB 之间插一层编译期注入租户/权限过滤的方言」是任何多租户分析平台都该抄的模式,也让「人和 AI 都能安全地对海量事件写 SQL」成为护城河。
  2. 几个高吞吐数据系统的硬核范式:① Rust capture 的「策略在管线、机制在 sink」——所有路由决策(overflow 重路由/DLQ/自定义 topic)集中在 pipeline 层,sink 只做「消息→topic+partition」的纯机制;热点溢出重路由(governor 限流器检测热 token,给单事件打 overflow_reason,热流量重路由到 overflow topic 而非拖垮主分区,Kafka 分区倾斜的经典解法),Kafka 不可用回落 S3;② ClickHouse「数据库内摄取链」——Kafka 引擎表 → 物化视图 → Distributed → 分片 ReplacingMergeTree,ORDER BY (team_id, date, ...) 让多租户过滤命中前缀,Property Groups 把高基数 JSON properties 物化进 Map(String,String) 列 + bloom 索引(printer 自动重写属性访问命中物化列);③ Hog + HogVM——复用 HogQL 语法扩出命令式语言、编译到带版本字节码在受控 VM 跑(沙箱安全的用户可编程 CDP 转换)。
  3. 一个「all-in-one 整合 + 开源数据自有 + 透明文化」的标杆样本:同一 person/event 模型贯穿 70+ 产品切片(products/ 每个产品自带 backend+frontend+mcp+skills),跨产品数据天然打通;开源可自托管消解「数据发给第三方」的隐私焦虑;公司 handbook 全公开。AI 上 Max 是 LangGraph 模式化 agent(工具经 HogQL 安全访问数据)+ 对外 MCP 让外部 agent 调 PostHog。但要客观:自托管复杂度极高(完整自托管 2023 起已弃用、无 K8s,仅余 hobby Docker Compose,ClickHouse+Kafka+ZK+PG+Redis+MinIO 空载 ~2.1GB),巨型 monorepo 复杂度(426 万行四语言,模块化仍是 forward-looking 目标),AI 急扩兼容债(MCP schema anyOf/oneOf 破坏 Anthropic 客户端 #61359)。

项目展示

PostHog

「all-in-one platform for building successful products」——一个开源栈装下分析/回放/flags/实验/错误/CDP/数仓/AI 助手。官网 posthog.com,公司运营全公开手册 posthog.com/handbook,文档 posthog.com/docs。

项目画像

维度数据
GitHubhttps://github.com/PostHog/posthog(官网 posthog.com)
Star / Fork34,908 / 2,833(190,254+ 团队在用,98% 客户免费——慷慨免费层做获客漏斗)
代码规模tokei 计 426 万行(甄别后约 350-370 万手写)、21885 文件;Python 41.4%(控制面/HogQL)+ TS/TSX 35%(React 前端)+ Rust 6.2%(摄取数据面)+ Go 0.5%(实时)+ JSON 10.6%(fixtures/schema);注释比 0.075(前端/生成代码拉低,核心 Python/Rust 实际更高)
项目年龄约 6 年(2020-01-23 建库,今日活跃,磁盘 5.2GB 巨型 monorepo)
开发阶段密集开发 · 高活跃(精确 52w commit 数因 gh stats 端点 EOF 未取到;贡献者规模佐证:8 人 900-3000+ commit 均衡)
贡献模式PostHog Inc 公司全职团队(~100+ 工程师)+ 社区(pauldambra 3089 / Twixes 2426 / mariusandra 2278 / timgl 1439=联创 Tim Glaser / EDsCODE / Gilbert09,无单人垄断)
热度定位标杆开源商业项目(YC W2020,$75M 独角兽,Peak XV/GV/YC 投,天使含 GitHub/Docker/Sentry 创始人)
版本主应用持续部署(PostHog Cloud)+ 组件化 tag(posthog-cli/v0.7.21)
LicenseMIT(PostHog Inc)+ ee/ 企业版自定义许可
质量评级代码/文档(handbook)/测试/CI「优」· 错误处理「良」· 自托管易用性「弱(结构性短板)」

作者视角:为什么存在这个项目

创始人/作者背景

PostHog Inc(YC W2020),联创 James Hawkins(co-CEO)+ Tim Glaser(联创/CTO,仍是 Top 贡献者 timgl 1439 commit)。起源:两人原在 YC 做另一个产品,因「想知道自己软件哪些功能被用、却被迫把用户数据发给第三方」而沮丧 → 转做开源、数据自有的产品分析 → 写代码 4 周后即在 Hacker News 发 MVP(2020)。融资路径顶级:早期 $12M(GV + YC 领投,天使含 GitHub CTO Jason Warner、Docker 创始人 Solomon Hykes、Sentry 创始人 David Cramer),后续 $75M(Peak XV 领投)成独角兽。透明文化标杆:全公开 handbook(商业模式/定价哲学/「wide company with small teams」组织/价值观),是开源公司运营范本。

问题判断

现代产品团队需要一整条「理解用户」的工具链(分析/CDP/灰度/错误/回放/实验/问卷/数仓),传统做法是点工具拼装——每个 SaaS 单独埋点、单独计费、数据散落各家云、口径互不打通。更深的痛点是隐私:传统分析 SaaS 要求把用户行为数据发给第三方,对受监管行业/欧盟用户是合规焦虑。现有方案不够:① 点工具间数据割裂(同一 person 在分析/回放/flag/错误里是四份身份);② 闭源 + 数据托管在供应商手里;③ 按席位/MTU 计费规模化后昂贵。

解法哲学(all-in-one 整合 + 开源数据自有)

两条主轴:① 整合——把所有产品收进同一 person/event 模型(products/ 共享 posthog/hogql/database/schema/persons.py),让「同一个用户」在所有产品里是同一份数据;② 数据自有——开源 + 可自托管,数据留在用户自己的 ClickHouse。技术赌注:用 ClickHouse 列存做事件分析底座,自研 HogQL 把「SQL」这门工程师早已掌握的语言迁移成产品分析的查询界面——「不发明新查询范式,而是把 ClickHouse SQL 收敛成安全、带产品抽象的方言」。

战略意图

开源(MIT + ee 企业版)+ PostHog Cloud 托管 + 按用量计费(分析 1M 事件/月免费后 $0.00005/事件、回放 5000 条/月免费后 $0.005/条;无席位费是区别于按席位竞品的核心卖点)。技术上是 product OS——70+ 垂直产品共用一套数据/查询/AI 底座;AI 上 Max(hogai)+ 对外 MCP 把「让 AI 安全查产品数据」做成新入口。开源是采用漏斗与信任放大器,商业靠 Cloud 收口。

核心价值提炼

创新之处

  1. HogQL——编译期注入多租户与字段权限的 SQL 方言(新颖度 4/5,实用性 5/5,可迁移性 4/5):fork ClickHouse ANTLR 语法,打印时强制注入 team_id 过滤、JSONDropKeys 抹除受限属性、函数白名单、参数化转义,同一 AST 多后端 print。适用任何让外部用户/AI 直接对多租户海量数据写 SQL 的平台。
  2. Property Groups——高基数 JSON 自动物化为 Map 列 + bloom 索引(新颖度 4/5,实用性 5/5):按 key 把 JSON properties 物化成 Map(String,String),printer 自动重写属性访问命中物化列,回落 JSONExtract。适用 ClickHouse 上的高基数半结构化属性分析。
  3. 热点溢出重路由(overflow stamping)(新颖度 4/5,实用性 4/5):governor 检测热 token,给单事件打 overflow_reason,sink 据此重路由到 overflow topic,避免 Kafka 分区倾斜拖垮主链。适用高吞吐摄取里少数大客户/热 key 的隔离。
  4. products/ 垂直切片 + facade/frozen-dataclass 契约 + tach/Turbo 选择性测试(新颖度 3/5,实用性 5/5,可迁移性 4/5):单体内按产品切片,frozen dataclass 做跨产品唯一接口,import-linter 强边界,按契约选择性测试。适用膨胀中的大型单体保自治与 CI 速度。
  5. Hog + HogVM——共享 parser 的沙箱字节码脚本语言(新颖度 4/5,实用性 3/5):复用 HogQL 语法扩出命令式语言,编译到带版本字节码在受控 VM 跑(也可编译到 JS),驱动 CDP 转换。适用需用户可编程又要安全沙箱的数据管线。
  6. 模式化 AI agent + 平台级 MCP(内调外暴露双向)(新颖度 4/5,实用性 4/5):LangGraph agent 按意图切模式/工具集,工具经 HogQL 安全访问数据,整个平台经 MCP 暴露给外部 agent、Max 又能反向 call_mcp_server。适用数据产品的 AI 化与 agent 互操作。

可复用的模式与技巧

  • 编译期租户/权限护栏(team_id guard + JSONDropKeys):在 query 编译/打印阶段强制注入隔离过滤与字段裁剪——多租户 + 用户可写查询的系统,比运行时 RLS 更早暴露错误。
  • 策略在管线、机制在 sink:路由决策集中在 pipeline,sink 只做「消息→topic+partition」纯机制——高吞吐写出层的可测试性设计。
  • 数据库内摄取链(Kafka 引擎表→MV→Distributed→分片 MergeTree):用 DB 原生能力承接流式写入并解耦写/查——ClickHouse 事件/日志/指标管线。
  • 租户列前置排序键 + JSON→Map 列 + bloom 索引:ORDER BY (team_id, date, ...) 让多租户过滤命中前缀——多租户列存建模。
  • 单体内模块化三件套(facade + frozen-dataclass contracts + import-linter + 选择性测试):用契约文件界定重测范围——大型 Python/Django 单体。
  • AI 经安全查询层访问数据:agent 工具调 HogQL 而非裸 DB,护栏一处实现、人/AI 共用——AI + 自有数据产品。

关键设计决策

最值得记录的是 HogQL 把「安全」做到编译期——这是 PostHog 让人和 AI 都能对海量多租户事件自由写 SQL 的命门。决策:不让用户直接写 ClickHouse SQL,而是 fork 其 ANTLR 语法做方言,经 parse→resolve→print 编译。问题:直连 ClickHouse 有三重风险——SQL 注入、跨租户越权(一个 team 查到别 team 数据)、字段级权限泄漏。方案落在 printer 阶段:team_id_guard_for_table 在打印每张表访问时自动注入 and(team_id=<ctx.team_id>, ...),context.team_id 缺失直接 InternalHogQLError 禁用全量 SELECT;restricted_properties 会跳过物化列捷径并用 JSONDropKeys 把受限属性从 JSON 抹掉;escape_sql.py 全程参数化转义、禁 %(占位符宏冲突);只有 ALL_EXPOSED_FUNCTION_NAMES 白名单函数能用;同一 AST 还能经 printer/{clickhouse,postgres,duckdb}.py 编译到三种引擎(事件查 ClickHouse、数仓查 Postgres/DuckDB)。Trade-off 很重:自维护一套 SQL 编译器(grammar 要同步 ClickHouse 上游、生成的 parser 入库、Rust/npm 双产物)成本极高;但换来「让人和 AI 都能安全地对海量事件写 SQL」这一核心护城河——比运行时 row-level security 更可控、错误更早暴露,且护栏一处实现、人与 AI(Max 的 execute_sql 工具走同一 HogQL)共用。

数据面注记:高吞吐路径(rust/capture,axum + rdkafka)刻意与 Python 控制面分离——多层限流叠加(并发/全局/计费配额/overflow/Redis/token 黑名单),「策略在管线、机制在 sink」让路由可测试,热点溢出重路由解决 Kafka 分区倾斜。「Python 编排 + Rust 数据面」是扛海量事件的关键分工。

竞品格局与定位

PostHog 是「整合多个点工具」打法,按覆盖产品域逐一对照:

域竞品与 PostHog 关系
产品分析Amplitude / Mixpanel闭源 SaaS、按 MTU 计费、不含回放/flags/错误;PostHog 把分析只当 products/ 一个切片,开源可自托管 + HogQL SQL 级自由。劣势:对方开箱体验/托管稳定性更成熟
CDPSegment数据路由中枢但不自带分析/回放/数仓,数据仍流向第三方;PostHog 的 CDP(Hog 转换 + cyclotron 队列)内生于同一 person/event 模型。劣势:Segment 目的地生态更广
Flags/实验LaunchDarkly企业级特性开关,集成/API 要付费;PostHog 同等功能免费
错误追踪Sentry同样 all-in-one 化(开源 + Cloud + 按量),路径相似;PostHog 错误追踪(rust/cymbal)只是 70+ 产品之一,正面竞争在错误/可观测交叠区
会话回放Hotjar / FullStory闭源、不含分析/flags;PostHog 免费层覆盖
轻量 Web 分析Plausible / Matomo仅 Web 分析,无整合栈

差异化护城河

① all-in-one 整合(同一 person/event 模型贯穿 70+ 产品,跨产品数据天然打通);② 开源 + 数据自有(消解隐私/合规焦虑);③ HogQL/ClickHouse 分析底座(SQL 级自由 + 列存性能 + 编译期安全)。三者叠加,单一竞品都难同时复制。

竞争风险

  • 自托管复杂度(结构性短板):完整自托管 2023 起已弃用(无 K8s),仅余 hobby Docker Compose(ClickHouse+Kafka+ZK+PG+Redis+MinIO,空载 ~2.1GB,约 100k events/月量级),真正能跑全栈的实质只有 PostHog Cloud 自己——「功能全 = 运维重」。
  • 巨型 monorepo 复杂度:426 万行、四语言(Python+Rust+TS+Go)、70+ 产品 + 40 crate,认知与构建负担巨大;架构模块化仍是 forward-looking 目标,未全量落地。
  • AI 急速扩张的兼容成本:MCP schema anyOf/oneOf 破坏 Anthropic 客户端(#61359)、AI 可观测摄取(#61811)等「跑得太快、协议层兼容没跟上」的债。

生态定位

工程驱动、注重数据自有团队的「产品 OS」;商业靠 Cloud + 按量计费收口,开源是采用漏斗与信任放大器而非自托管主路径。验证了「单领域起家 → all-in-one 整合 → 开源+Cloud 商业化」的范式(与 Sentry 同路)。

套利机会分析

  • 信息差:PostHog 是标杆级开源商业项目,「一个开源栈替代六个 SaaS」整合叙事 + YC 独角兽 + 透明 handbook 传播力强;中文圈对「HogQL 编译期租户安全」「Property Groups JSON→Map 优化」「热点溢出重路由」「products 垂直切片 monorepo」「AI 经 HogQL 安全访问数据」的工程拆解稀缺。
  • 技术借鉴:编译期租户/权限护栏、策略在管线/机制在 sink、数据库内摄取链、租户列前置排序键 + Property Groups、单体模块化三件套、AI 经安全查询层访问数据——这些远超产品分析本身,可迁移到任何多租户分析/高吞吐摄取/大型单体/AI 数据产品。
  • 生态位:「点工具疲劳 + 数据上云隐私焦虑」时代的整合者;与点工具(Amplitude/Segment/LaunchDarkly/Hotjar)错位、与 Sentry 同路竞争。
  • 趋势判断:踩在「all-in-one 整合 + 开源数据自有 + AI 化」趋势上;长期看「自托管复杂度能否降低(目前实质只有 Cloud)+ 巨型 monorepo 模块化能否落地 + AI 协议兼容能否跟上扩张」决定其上限。

风险与不足

  • 自托管运维重:完整自托管已弃用,全栈实质只有 PostHog Cloud 能跑——开源「数据自有」承诺与「自托管难」现实之间有张力。
  • 巨型 monorepo 复杂度:426 万行四语言,模块化仍是目标非现状,认知/构建负担大。
  • AI 急扩兼容债:MCP schema 协议兼容(#61359)等回归。
  • HogQL 编译器维护成本:grammar 同步 ClickHouse 上游 + 生成 parser 入库 + Rust/npm 双产物,长期负担重。
  • 注释比 0.075:整体偏低(前端/生成代码拉低,核心 Python/Rust 实际更高,但仍需注意)。

行动建议

  • 如果你要用它:适合工程驱动、注重数据自有、要 SQL 级自由查询、想「一个栈装下产品工具链」的团队——强烈建议用 PostHog Cloud(按用量计费、慷慨免费层),自托管仅 hobby Docker Compose 且仅适合小流量/试用(完整自托管已弃用、运维重)。慎重评估 ClickHouse/Kafka 运维能力再考虑自托管全栈。
  • 如果你要学它:直奔 posthog/hogql/(grammar/HogQLParser.g4 + printer/clickhouse.py 的 team_id_guard/JSONDropKeys + escape_sql.py,HogQL 编译期安全皇冠明珠)+ posthog/models/event/sql.py + posthog/clickhouse/property_groups.py(ClickHouse 摄取链 + JSON→Map 优化)+ rust/capture/(限流分层 + 热点溢出重路由)+ products/architecture.md(垂直切片)+ ee/hogai/(Max AI 模式化 agent)。这是「多租户安全 SQL 编译器 + 高吞吐摄取 + 大型 monorepo 模块化 + AI 数据安全」的开源教材。
  • 如果你要 fork / 借鉴它:编译期租户/权限护栏、策略在管线/机制在 sink、ClickHouse 数据库内摄取链、单体模块化三件套、AI 经 HogQL 访问数据是可直接迁移的设计。MIT 友好(注意 ee/ 企业版许可);HogQL 那套「在用户与 DB 间插一层编译期安全方言」尤其值得任何多租户分析平台研读。

知识入口

资源链接
DeepWikihttps://deepwiki.com/PostHog/posthog(三层架构 + 数据管线最系统的速读入口)
官方文档https://posthog.com/docs(产品矩阵 + HogQL + 自托管说明)
公司 handbookhttps://posthog.com/handbook(公开运营手册,含工程/商业/组织/定价哲学,本身即学习对象)
起源故事https://posthog.com/blog/before-yc(YC 前史 + 4 周发布 MVP)
MCP@posthog/mcp(让外部 AI agent 调 PostHog,111 个 tool 文件)
商业/托管https://posthog.com(PostHog Cloud,按用量计费,无席位费)

相关报告