PostHog 是什么?
PostHog 是目前 GitHub 上最热门的开源产品分析与 AI 可观测性平台(⭐ 超 1.9 万 Star)。不同于 Google Analytics 等闭源工具,PostHog 将产品分析、用户行为追踪、A/B 实验、功能开关和错误追踪整合到一个统一的开源平台中,数据完全自主可控。
为什么开发者选择 PostHog?
| 对比维度 | Google Analytics | Mixpanel | PostHog |
|---|---|---|---|
| 开源/自托管 | ❌ | ❌ | ✅ MIT License |
| 数据所有权 | 归 Google | 归 Mixpanel | 归你自己 |
| Session Replay | ❌ | ✅ 付费 | ✅ 内置 |
| Feature Flags | ❌ | ❌ | ✅ 内置 |
| A/B 实验 | ❌ | ✅ 付费 | ✅ 内置 |
| AI 可观测性 | ❌ | ❌ | ✅ 追踪 LLM 调用 |
| 免费额度 | 无限(但有采样) | 100 万事件/月 | 100 万事件/月 |
| 定价 | 企业版贵 | 按用量收费 | 超额后按用量 |
PostHog 的核心定位是帮助产品团队和开发者理解用户行为,驱动产品决策。它的独特卖点在于:
- All-in-One 平台:一个工具覆盖产品分析、Web 分析、Session Replay、功能开关、实验、错误追踪、日志、问卷
- AI 可观测性:追踪 LLM 调用的延迟、成本、生成内容,这在 2026 年是差异化功能
- MCP 集成:通过 MCP 协议接入 Claude Code、Cursor 等 AI 编码工具,直接在编辑器中查数据
- Self-driving 模式:自动检测 rage clicks、报错、失败查询,生成分析报告和 PR
PostHog vs 其他方案的架构差异
┌─────────────────────────────────────────────────┐
│ PostHog │
├──────────┬──────────┬──────────┬────────────────┤
│ 产品分析 │ 会话回放 │ 功能开关 │ AI 可观测性 │
│ (Events) │ (Replay) │ (Flags) │ (LLM Traces) │
├──────────┴──────────┴──────────┴────────────────┤
│ 统一的 ClickHouse 数据引擎 │
├─────────────────────────────────────────────────┐
│ 前端 SDK | 后端 SDK | API | MCP │
└─────────────────────────────────────────────────┘
自部署 PostHog
方案一:PostHog Cloud(推荐)
最快上手方式,无需任何运维:
- PostHog Cloud US — 海外用户
- PostHog Cloud EU — 需要数据合规的欧洲用户
免费额度每月包含:100 万事件、5000 次录制、100 万次 Flag 请求、10 万异常。
方案二:Docker 一键部署(自托管)
如果你想完全掌控数据,PostHog 提供了极简的 Hobby 部署方案。
前置条件: - Linux 服务器 - 至少 4GB 内存 - Docker + Docker Compose
一行命令部署:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/posthog/posthog/HEAD/bin/deploy-hobby)"
部署完成后,访问 http://localhost:8000 即可看到 PostHog 的管理界面。
方案三:Docker Compose 手动部署
如果你需要更精细的控制:
# docker-compose.yml
version: '3.8'
services:
posthog:
image: posthog/posthog:latest
ports:
- "8000:8000"
environment:
- DATABASE_URL=postgres://posthog:posthog@db:5432/posthog
- REDIS_URL=redis://redis:6379/
depends_on:
- db
- redis
db:
image: postgres:15
environment:
POSTGRES_PASSWORD: posthog
volumes:
- pgdata:/var/lib/postgresql/data
redis:
image: redis:7
volumes:
pgdata:
# 启动服务
docker-compose up -d
# 查看日志
docker-compose logs -f posthog
⚠️ 注意:开源自部署版本建议处理量 ≤ 10 万事件/月。超过后推荐迁移到 PostHog Cloud。
快速上手:接入你的第一个应用
前端 JavaScript SDK 接入
安装 SDK:
npm install posthog-js
在你的应用入口初始化:
import posthog from 'posthog-js';
posthog.init('YOUR_POSTHOG_API_KEY', {
api_host: 'https://us.posthog.com', // 自托管改为 http://your-server:8000
autocapture: true, // 自动捕获所有点击、页面浏览等事件
});
// 手动发送自定义事件
posthog.capture('user_signed_up', {
method: 'email',
plan: 'free',
});
// 设置用户身份(登录时调用)
posthog.identify('user-unique-id-123', {
email: 'developer@example.com',
name: '张三',
});
autocapture: true 意味着你不需要埋任何代码——所有按钮点击、链接点击、表单提交都会自动记录。
后端 Python SDK 接入
对于后端事件(如支付成功、订单创建):
pip install posthog
from posthog import Posthog
# 初始化(建议用环境变量存储 API 密钥)
posthog = Posthog(
project_api_key='YOUR_PROJECT_API_KEY',
host='https://us.posthog.com'
)
# 捕获事件
posthog.capture(
distinct_id='user-unique-id-123',
event='payment_completed',
properties={
'amount': 99.00,
'currency': 'USD',
'payment_method': 'stripe',
}
)
# 设置用户属性
posthog.identify(
distinct_id='user-unique-id-123',
properties={
'email': 'developer@example.com',
'plan': 'pro',
'company': 'TechCorp',
}
)
# 关闭客户端(应用退出时)
posthog.shutdown()
Next.js 全栈项目接入
npm install posthog-js posthog-node
// components/PostHogProvider.tsx
import { PostHogProvider as PHProvider } from 'posthog-js/react';
import { useEffect, useState } from 'react';
import posthog from 'posthog-js';
export function PostHogProvider({ children }: { children: React.ReactNode }) {
const [clientReady, setClientReady] = useState(false);
useEffect(() => {
posthog.init(process.env.NEXT_PUBLIC_POSTHOG_KEY!, {
api_host: process.env.NEXT_PUBLIC_POSTHOG_HOST || 'https://us.posthog.com',
person_profiles: 'identified_only',
});
setClientReady(true);
}, []);
if (!clientReady) return null;
return <PHProvider client={posthog}>{children}</PHProvider>;
}
// app/layout.tsx
import { PostHogProvider } from '@/components/PostHogProvider';
export default function RootLayout({ children }) {
return (
<html lang="zh">
<body>
<PostHogProvider>{children}</PostHogProvider>
</body>
</html>
);
}
// app/page.tsx
'use client';
import { usePostHog } from 'posthog-js/react';
export default function HomePage() {
const posthog = usePostHog();
return (
<button onClick={() => {
posthog.capture('cta_clicked', {
cta_text: '免费试用',
page: 'homepage',
});
}}>
开始免费试用
</button>
);
}
核心功能实战
1. 产品分析:理解用户行为
接入数据后,PostHog 会自动生成趋势图、漏斗分析和留存曲线。
漏斗分析示例:注册 → 激活 → 付费
-- PostHog 支持 SQL 直接查询(ClickHouse)
SELECT
event,
COUNT(DISTINCT distinct_id) as users
FROM events
WHERE event IN ('user_signed_up', 'feature_activated', 'payment_completed')
AND timestamp > now() - INTERVAL 30 DAY
GROUP BY event
ORDER BY timestamp
在 PostHog UI 中:
1. 进入 Product Analytics → Funnels
2. 添加步骤:user_signed_up → feature_activated → payment_completed
3. 查看每步转化率
留存分析:
1. 进入 Product Analytics → Retention
2. 选择首事件(如 user_signed_up)和回访事件(如 pageview)
3. 查看 D1/D7/D30 留存曲线
2. Session Replay:看用户真实操作
Session Replay 让你看到用户的真实操作录像,包括鼠标移动、滚动、点击。
配置方法:
posthog.init('YOUR_API_KEY', {
api_host: 'https://us.posthog.com',
session_recording: {
maskAllInputs: false, // 不遮蔽输入内容(隐私敏感场景设为 true)
recordCrossOriginIframes: true,
},
});
排查 Rage Clicks(愤怒点击):
// 当用户连续快速点击同一元素 5 次以上,触发 rage click 事件
posthog.onFeatureFlags(() => {
posthog.capture('rageclick', {
element: document.activeElement.tagName,
page: window.location.pathname,
});
});
在 PostHog Dashboard 中,你可以: 1. 筛选所有包含 rage click 的 Session 2. 直接观看录像,找到导致用户愤怒的 UI 问题 3. 一键创建 Issue 并指派给开发团队
3. Feature Flags:安全灰度发布
Feature Flags 让你在不部署代码的情况下控制功能开关:
// 检查某个功能是否对用户开放
posthog.onFeatureFlags(() => {
const newDashboard = posthog.getFeatureFlag('new-dashboard');
if (newDashboard) {
// 显示新版仪表盘
renderNewDashboard();
} else {
// 保持旧版
renderOldDashboard();
}
});
创建实验性发布:
// 按用户属性定向
posthog.capture('feature_viewed', {
$feature_flag: 'beta-search',
$feature_flag_response: true,
});
在 PostHog 后台:
1. 进入 Feature Flags → Create Flag
2. 设置名称 beta-search
3. 选择发布策略:
- 全量发布(100% 用户)
- 百分比发布(如 10% 用户)
- 定向发布(按邮箱域名、用户组)
4. 保存后,SDK 自动生效,无需重新部署
4. A/B 实验:数据驱动决策
A/B 实验让你用统计学验证功能改动的效果。
// 实验代码
posthog.onFeatureFlags(() => {
const experiment = posthog.getFeatureFlag('landing-page-test');
if (experiment === 'variant-a') {
showVariantA();
} else if (experiment === 'variant-b') {
showVariantB();
}
// 记录实验曝光
posthog.capture('experiment_exposure', {
$feature_flag: 'landing-page-test',
variant: experiment,
});
});
在 PostHog 中创建实验:
1. 进入 Experiments → Create Experiment
2. 选择对应的 Feature Flag
3. 设置目标指标(如 payment_completed 事件)
4. 设定显著性水平(通常 95%)
5. 运行实验,等待统计显著结果
PostHog 会自动计算 p 值、置信区间和胜出概率。
5. 错误追踪:自动捕获前端异常
import posthog from 'posthog-js';
posthog.init('YOUR_API_KEY', {
api_host: 'https://us.posthog.com',
capture_performance: true,
});
// 自动捕获 uncaught errors
window.addEventListener('error', (event) => {
posthog.capture('frontend_error', {
error_message: event.message,
error_url: event.filename,
error_line: event.lineno,
error_col: event.colno,
stack: event.error?.stack,
});
});
// 捕获 unhandled promise rejections
window.addEventListener('unhandledrejection', (event) => {
posthog.capture('promise_rejection', {
error_message: event.reason?.message || String(event.reason),
});
});
在 PostHog Error Tracking 页面,你可以: - 查看错误频率趋势 - 关联到受影响的 Session 录像 - 设置告警规则(如单日错误数 > 100 时通知 Slack)
6. AI 可观测性:追踪 LLM 调用
这是 PostHog 2026 年的特色功能,专为 AI 应用开发者设计。
用 Python SDK 追踪 OpenAI 调用:
pip install posthog openai
from posthog import Posthog
import openai
posthog = Posthog('YOUR_API_KEY', host='https://us.posthog.com')
def generate_with_tracking(user_id: str, prompt: str):
import time
start = time.time()
response = openai.ChatCompletion.create(
model="gpt-4",
messages=[{"role": "user", "content": prompt}]
)
latency = time.time() - start
tokens_used = response.usage.total_tokens
# 追踪 LLM 调用
posthog.capture(
distinct_id=user_id,
event='llm_call_completed',
properties={
'model': 'gpt-4',
'prompt_length': len(prompt),
'response_length': len(response.choices[0].message.content),
'tokens_used': tokens_used,
'latency_ms': latency * 1000,
'success': True,
}
)
return response
用 LangChain 追踪:
from langchain.callbacks import PostHogCallbackHandler
handler = PostHogCallbackHandler(
api_key='YOUR_API_KEY',
host='https://us.posthog.com',
distinct_id='user-123',
)
# 在 chain 中使用
chain = LLMChain(llm=llm, prompt=prompt, callbacks=[handler])
result = chain.run("你好,请介绍一下 PostHog")
在 PostHog Dashboard 中你可以看到: - 每次 LLM 调用的延迟分布 - Token 消耗和成本统计 - 失败请求的错误原因 - 按用户分组的调用模式
MCP 集成:在编辑器中查数据
PostHog 支持 MCP 协议,你可以直接在 Claude Code、Cursor 等工具中查询产品数据。
配置 MCP(Claude Code):
// .mcp.json
{
"mcpServers": {
"posthog": {
"command": "npx",
"args": ["-y", "@posthog/mcp"],
"env": {
"POSTHOG_API_KEY": "phc_your_api_key",
"POSTHOG_PERSONAL_API_KEY": "phx_your_personal_key",
"POSTHOG_PROJECT_ID": "12345",
"POSTHOG_API_HOST": "https://us.posthog.com"
}
}
}
}
配置完成后,在 Claude Code 中可以直接对话:
> 过去 7 天有多少用户注册?
> 显示 /dashboard 页面的转化漏斗
> 昨天 rage click 最多的页面是哪个?
常见问题
PostHog 免费版够用吗?
对于大多数独立开发者和中小团队:每月 100 万事件 + 5000 次录制完全够用。按一般 SaaS 网站,100 万事件 ≈ 5-10 万 MAU。
自托管和 Cloud 有什么区别?
| Cloud | 自托管 | |
|---|---|---|
| 运维 | 无需 | 需要 Docker + DB 管理 |
| 数据位置 | PostHog 服务器 | 你自己的服务器 |
| 功能完整性 | 全部功能 | 部分企业功能不可用 |
| 适用规模 | 任何规模 | ≤ 10 万事件/月 |
| 价格 | 免费额度 + 按量 | 服务器成本 |
PostHog 性能开销大吗?
JavaScript SDK 是异步加载的,不会影响页面渲染性能。后端 SDK 使用队列批量发送,对业务逻辑无影响。
支持隐私合规(GDPR/PIPL)吗?
支持。PostHog EU 实例满足 GDPR 要求。中国市场可以通过 maskAllInputs 和自定义数据过滤规则适配 PIPL。
总结
PostHog 是目前最全面的开源产品分析平台,一个工具替代了 Google Analytics + Hotjar + LaunchDarkly + Optimizely + Sentry 的组合。对于开发者和产品团队来说,数据自主可控 + All-in-One 体验是最大的价值。
关键资源: - PostHog 官网 - GitHub 仓库 ⭐ 19,000+ - 文档中心 - 部署指南 - 公司手册(开源)
如果你觉得这篇文章有帮助,欢迎分享给更多开发者!