posthog-analytics
在调查用户行为、分析指标、检查功能标志状态或调试用户问题时,通过查询PostHog生产数据来使用。
何时激活
当以下任一条件为真时激活此技能:
- 用户询问分析、指标或用户行为
- 需要检查用户的功能标志状态
- 调试用户为何遇到特定问题
- 调查转化漏斗或用户旅程
- 查询特定用户或群组的事件
- 检查仪表板或洞察数据
- 调查LLM/AI生成成本或性能
开始时宣布
“我正在使用posthog-analytics技能来安全查询PostHog数据。”
安全:加载凭证
关键:永远不要在命令或输出中回显、记录或显示API密钥。
# 安全加载凭证 - 始终使用此模式
set -a && source /Users/dsifry/Developer/goodtogo/.env && set +a
永远不要这样做:
# 错误 - 在命令历史中暴露密钥
curl -H "Authorization: Bearer phx_abc123..."
# 错误 - 在输出中暴露密钥
echo "Key: $POSTHOG_READ_ONLY_KEY"
项目
| 项目ID | 名称 | 用途 |
|---|---|---|
| 104002 | 生产环境 | 真实用户数据与分析 |
| 118588 | 本地开发 | 测试/开发事件 |
所有生产查询默认使用104002。
快速参考:事件类别
入职与试用事件
| 事件 | 描述 |
|---|---|
onboarding_field_started |
用户开始在字段中键入 |
onboarding_field_completed |
用户完成了一个字段 |
onboarding_step_transition |
用户移动到下一步 |
onboarding_completed |
完整入职完成 |
onboarding_checkpoint_reached |
关键里程碑达到 |
onboarding_phase_completed |
第1/2/3阶段完成 |
onboarding_dropout_risk_detected |
用户有放弃风险 |
trial_started |
试用期开始 |
trial_expired |
试用结束未转化 |
trial_converted_to_paid |
用户升级到付费 |
trial_activation_score_calculated |
激活分数计算 |
trial_churn_risk_detected |
高流失风险识别 |
草稿与联系人事件
| 事件 | 描述 |
|---|---|
drafts_created |
电子邮件草稿生成 |
drafts_creation_failed |
草稿生成失败 |
contact_updated |
联系人记录修改 |
contact_deleted |
联系人软删除 |
contact_scoring_failed |
评分管道错误 |
linkedin_processing_failed |
LinkedIn数据获取失败 |
活动事件
| 事件 | 描述 |
|---|---|
campaign_created |
新活动创建 |
campaign_deactivated |
活动关闭 |
账单与订阅
| 事件 | 描述 |
|---|---|
user_cancel_subscription |
用户取消 |
subscription_state_updated |
订阅状态改变 |
trial_conversion_step |
转化漏斗步骤 |
系统与错误
| 事件 | 描述 |
|---|---|
javascript_error_occurred |
客户端错误 |
unhandled_promise_rejection |
Promise错误 |
react_query_error |
数据获取错误 |
job_unblocked |
后台作业恢复 |
stale_blocked_jobs_recovered |
旧阻塞作业清理 |
circuit_open |
电路断路器打开 |
ai_fallback |
AI回退触发 |
LLM/AI事件
| 事件 | 描述 |
|---|---|
$ai_generation |
PostHog标准LLM生成事件 |
LLM事件属性:
$ai_trace_id- 唯一追踪标识符$ai_model- 使用的模型 (gpt-5-nano, claude-3-7-sonnet)$ai_provider- 提供商 (openai, anthropic)$ai_input_tokens- 输入令牌计数$ai_output_tokens- 输出令牌计数$ai_total_tokens- 总令牌使用量$ai_latency- 响应时间(秒)$ai_service- 发起调用的服务 (例如, “FocusedDraftGenerationService”)$ai_input- 完整提示 (系统 + 用户)$ai_output- 完整响应
活动模型(过去7天快照):
gpt-4o-mini-2024-07-18- ~22.9k次调用 (批量操作)gpt-5-nano- ~25次调用, ~86k令牌gpt-5-nano-2025-08-07- ~13次调用claude-3-7-sonnet-20250219- ~1次调用
仪表板(生产环境)
| ID | 名称 | 用途 |
|---|---|---|
| 621660 | 转化(简化版) | 转化漏斗概览 |
| 604003 | 功能采用漏斗 | 功能使用跟踪 |
| 603999 | 入职健康 | 入职指标与流失 |
| 616469 | 入职(简化版) | 快速入职概览 |
| 604000 | 试用与转化分析 | 试用转付费漏斗 |
| 621843 | 留存(简化版) | 用户留存指标 |
| 616440 | 营销(简化版) | 营销分析 |
| 374200 | AARRR – 海盗指标 | 获取/激活/留存 |
| 388357 | trial-duration 使用 | 试用时长标志使用 |
| 313683 | onboarding-flow 使用 | 入职流程标志使用 |
快速仪表板访问
# 在浏览器中打开仪表板(替换ID)
open "https://us.posthog.com/project/104002/dashboard/604000"
功能标志(实时)
| 标志键 | 激活 | 用途 |
|---|---|---|
trial-duration |
✅ | 控制试用时长(返回天数) |
payment-integration |
✅ | 启用/禁用支付功能 |
onboarding-flow |
✅ | 控制入职流程 |
campaign-creation-tour |
❌ | 显示活动创建导览 |
代码库也引用:
two-stage-drafts- 启用两阶段草稿生成two-stage-shadow-mode- 两阶段推出的影子模式
常见查询模式
验证身份验证
set -a && source /Users/dsifry/Developer/goodtogo/.env && set +a
curl -s "https://us.posthog.com/api/users/@me/" \
-H "Authorization: Bearer $POSTHOG_READ_ONLY_KEY" \
-H "Content-Type: application/json" | jq '{email: .email, org: .organization.name}'
列出仪表板
set -a && source /Users/dsifry/Developer/goodtogo/.env && set +a
curl -s "https://us.posthog.com/api/projects/104002/dashboards/" \
-H "Authorization: Bearer $POSTHOG_READ_ONLY_KEY" | \
jq -r '.results[] | "\(.id): \(.name)"'
检查功能标志
set -a && source /Users/dsifry/Developer/goodtogo/.env && set +a
curl -s "https://us.posthog.com/api/projects/104002/feature_flags/" \
-H "Authorization: Bearer $POSTHOG_READ_ONLY_KEY" | \
jq -r '.results[] | "\(.key): active=\(.active)"'
获取用户的功能标志状态
set -a && source /Users/dsifry/Developer/goodtogo/.env && set +a
USER_ID="user-distinct-id-here"
curl -s -X POST "https://us.posthog.com/api/projects/104002/feature_flags/local_evaluation/" \
-H "Authorization: Bearer $POSTHOG_READ_ONLY_KEY" \
-H "Content-Type: application/json" \
-d "{\"distinct_id\": \"${USER_ID}\"}" | jq '.'
LLM分析查询
AI生成成本(过去7天)
set -a && source /Users/dsifry/Developer/goodtogo/.env && set +a
curl -s -X POST "https://us.posthog.com/api/projects/104002/query/" \
-H "Authorization: Bearer $POSTHOG_READ_ONLY_KEY" \
-H "Content-Type: application/json" \
-d '{
"query": {
"kind": "HogQLQuery",
"query": "SELECT properties.$ai_model as model, count() as calls, sum(properties.$ai_total_tokens) as total_tokens, avg(properties.$ai_latency) as avg_latency_sec FROM events WHERE event = '\"'\"'$ai_generation'\"'\"' AND timestamp > now() - INTERVAL 7 DAY GROUP BY model ORDER BY total_tokens DESC"
}
}' | jq '.results'
按服务的AI调用
set -a && source /Users/dsifry/Developer/goodtogo/.env && set +a
curl -s -X POST "https://us.posthog.com/api/projects/104002/query/" \
-H "Authorization: Bearer $POSTHOG_READ_ONLY_KEY" \
-H "Content-Type: application/json" \
-d '{
"query": {
"kind": "HogQLQuery",
"query": "SELECT properties.$ai_service as service, count() as calls, sum(properties.$ai_total_tokens) as tokens FROM events WHERE event = '\"'\"'$ai_generation'\"'\"' AND timestamp > now() - INTERVAL 7 DAY GROUP BY service ORDER BY tokens DESC"
}
}' | jq '.results'
慢AI调用(>5秒)
set -a && source /Users/dsifry/Developer/goodtogo/.env && set +a
curl -s -X POST "https://us.posthog.com/api/projects/104002/query/" \
-H "Authorization: Bearer $POSTHOG_READ_ONLY_KEY" \
-H "Content-Type: application/json" \
-d '{
"query": {
"kind": "HogQLQuery",
"query": "SELECT timestamp, properties.$ai_model as model, properties.$ai_service as service, properties.$ai_latency as latency_sec FROM events WHERE event = '\"'\"'$ai_generation'\"'\"' AND properties.$ai_latency > 5 AND timestamp > now() - INTERVAL 24 HOUR ORDER BY latency_sec DESC LIMIT 20"
}
}' | jq '.results'
用户调查查询
用户的最近事件(通过邮箱)
set -a && source /Users/dsifry/Developer/goodtogo/.env && set +a
EMAIL="user@example.com"
curl -s "https://us.posthog.com/api/projects/104002/persons/?email=${EMAIL}" \
-H "Authorization: Bearer $POSTHOG_READ_ONLY_KEY" | \
jq '.results[0] | {distinct_ids, properties}'
用户旅程(最近50个事件)
set -a && source /Users/dsifry/Developer/goodtogo/.env && set +a
USER_ID="user-distinct-id-here"
curl -s -X POST "https://us.posthog.com/api/projects/104002/query/" \
-H "Authorization: Bearer $POSTHOG_READ_ONLY_KEY" \
-H "Content-Type: application/json" \
-d "{
\"query\": {
\"kind\": \"HogQLQuery\",
\"query\": \"SELECT timestamp, event, properties FROM events WHERE distinct_id = '${USER_ID}' ORDER BY timestamp DESC LIMIT 50\"
}
}" | jq '.results'
试用用户概览
set -a && source /Users/dsifry/Developer/goodtogo/.env && set +a
curl -s -X POST "https://us.posthog.com/api/projects/104002/query/" \
-H "Authorization: Bearer $POSTHOG_READ_ONLY_KEY" \
-H "Content-Type: application/json" \
-d '{
"query": {
"kind": "HogQLQuery",
"query": "SELECT toDate(timestamp) as day, count() as trials_started FROM events WHERE event = '\"'\"'trial_started'\"'\"' AND timestamp > now() - INTERVAL 30 DAY GROUP BY day ORDER BY day DESC"
}
}' | jq '.results'
入职分析
入职完成率
set -a && source /Users/dsifry/Developer/goodtogo/.env && set +a
curl -s -X POST "https://us.posthog.com/api/projects/104002/query/" \
-H "Authorization: Bearer $POSTHOG_READ_ONLY_KEY" \
-H "Content-Type: application/json" \
-d '{
"query": {
"kind": "HogQLQuery",
"query": "SELECT count(DISTINCT if(event = '\"'\"'onboarding_field_started'\"'\"', distinct_id, NULL)) as started, count(DISTINCT if(event = '\"'\"'onboarding_completed'\"'\"', distinct_id, NULL)) as completed FROM events WHERE timestamp > now() - INTERVAL 30 DAY"
}
}' | jq '.results'
流失风险检测
set -a && source /Users/dsifry/Developer/goodtogo/.env && set +a
curl -s -X POST "https://us.posthog.com/api/projects/104002/query/" \
-H "Authorization: Bearer $POSTHOG_READ_ONLY_KEY" \
-H "Content-Type: application/json" \
-d '{
"query": {
"kind": "HogQLQuery",
"query": "SELECT distinct_id, timestamp, properties FROM events WHERE event = '\"'\"'onboarding_dropout_risk_detected'\"'\"' AND timestamp > now() - INTERVAL 7 DAY ORDER BY timestamp DESC LIMIT 20"
}
}' | jq '.results'
每日指标查询
每日活跃用户(过去30天)
set -a && source /Users/dsifry/Developer/goodtogo/.env && set +a
curl -s -X POST "https://us.posthog.com/api/projects/104002/query/" \
-H "Authorization: Bearer $POSTHOG_READ_ONLY_KEY" \
-H "Content-Type: application/json" \
-d '{
"query": {
"kind": "HogQLQuery",
"query": "SELECT toDate(timestamp) as day, count(DISTINCT distinct_id) as users FROM events WHERE timestamp > now() - INTERVAL 30 DAY GROUP BY day ORDER BY day DESC"
}
}' | jq -r '.results[] | "\(.[0]): \(.[1]) users"'
事件类型计数(过去7天)
set -a && source /Users/dsifry/Developer/goodtogo/.env && set +a
curl -s -X POST "https://us.posthog.com/api/projects/104002/query/" \
-H "Authorization: Bearer $POSTHOG_READ_ONLY_KEY" \
-H "Content-Type: application/json" \
-d '{
"query": {
"kind": "HogQLQuery",
"query": "SELECT event, count() as count FROM events WHERE timestamp > now() - INTERVAL 7 DAY GROUP BY event ORDER BY count DESC LIMIT 30"
}
}' | jq -r '.results[] | "\(.[1]): \(.[0])"'
错误率(过去24小时)
set -a && source /Users/dsifry/Developer/goodtogo/.env && set +a
curl -s -X POST "https://us.posthog.com/api/projects/104002/query/" \
-H "Authorization: Bearer $POSTHOG_READ_ONLY_KEY" \
-H "Content-Type: application/json" \
-d '{
"query": {
"kind": "HogQLQuery",
"query": "SELECT event, count() as count FROM events WHERE event IN ('\"'\"'javascript_error_occurred'\"'\"', '\"'\"'unhandled_promise_rejection'\"'\"', '\"'\"'react_query_error'\"'\"', '\"'\"'drafts_creation_failed'\"'\"', '\"'\"'contact_scoring_failed'\"'\"') AND timestamp > now() - INTERVAL 24 HOUR GROUP BY event ORDER BY count DESC"
}
}' | jq '.results'
API功能
| 端点 | 描述 | 示例用途 |
|---|---|---|
/api/projects/ |
列出项目 | 验证访问 |
/api/projects/{id}/dashboards/ |
仪表板 | 查看保存的仪表板 |
/api/projects/{id}/insights/ |
保存的洞察 | 检索分析 |
/api/projects/{id}/feature_flags/ |
功能标志 | 检查标志状态 |
/api/projects/{id}/events/ |
原始事件 | 调试用户动作 |
/api/projects/{id}/persons/ |
用户档案 | 查找用户 |
/api/projects/{id}/cohorts/ |
用户群组 | 细分分析 |
/api/projects/{id}/query/ |
HogQL查询 | 自定义分析 |
/api/users/@me/ |
当前用户 | 验证身份 |
HogQL快速参考
| 表 | 内容 |
|---|---|
events |
所有捕获的事件 |
persons |
用户档案 |
groups |
群组分析 |
常见 events 字段:
event- 事件名称distinct_id- 用户标识符timestamp- 发生时间properties- 事件属性的JSON对象person_id- 链接到persons表
访问属性:
-- 点号表示法用于简单访问
properties.$ai_model
-- 括号表示法用于特殊字符
properties['$ai_model']
故障排除
Shell变量加载问题
如果 set -a && source .env 不工作(变量在curl中显示为空),直接提取密钥:
# 直接从.env文件提取密钥
KEY=$(grep "^POSTHOG_READ_ONLY_KEY=" /Users/dsifry/Developer/goodtogo/.env | cut -d'=' -f2)
# 在curl中使用
curl -s "https://us.posthog.com/api/projects/104002/dashboards/" \
-H "Authorization: Bearer ${KEY}" | jq '.'
身份验证不工作
如果您得到 "Authentication credentials were not provided":
- 检查密钥是否存在于.env:
grep POSTHOG_READ_ONLY_KEY /Users/dsifry/Developer/goodtogo/.env - 验证密钥前缀是
phx_(个人API密钥) - 如果密钥过期/无效,生成新的个人API密钥:
- 前往 PostHog用户API密钥
- 创建具有项目104002读取权限的新密钥
- 使用
POSTHOG_READ_ONLY_KEY=phx_...更新.env
错误项目
- 104002 = 生产环境(真实用户) - 使用此
- 118588 = 本地开发(仅测试数据)
输出格式化
# 使用jq进行JSON解析
... | jq '.results'
# 使用表格格式列表
... | jq -r '.results[] | "\(.id)\t\(.name)"' | column -t
# 限制大数据集的输出
... | jq '.results[:10]'
验证清单
在完成任何分析查询之前:
- [ ] 凭证安全加载(命令中无密钥)
- [ ] 使用正确的项目ID(生产用104002)
- [ ] 输出格式化和可读
- [ ] 敏感用户数据适当处理