Ingestion API
鉴权
- 头部:
X-Timestamp(秒)、X-Nonce(随机串)、X-Signature(Base64(HMAC-SHA256(secret,${ts}\n${nonce}\n${sha256(body)}))) - 异常码:401/403(签名)、429(限流)、400(格式错误)
POST /api/ingest/events
- 请求体:事件数组,每条至少包含
event、ts,推荐加uid、game_id、env
json
[
{
"event": "session.start",
"ts": "1731700000000",
"game_id": "demo",
"env": "dev",
"user_id": "u1",
"session_id": "s1"
}
]注意:ts(毫秒)与 game_id/env 是顶层字符串字段(校验器按字符串读取, 数字形态会报 missing ts);业务扩展字段放顶层或 attrs 均可。
- 返回:
{"ok":true}或错误详情
POST /api/ingest/payments
- 请求体:支付事件数组(字段同上,业务字段根据需要扩展)
OTel Collector(服务端)
- 推荐直接接入 OTLP(HTTP/gRPC),采集 traces/metrics/logs
- 参考: ./opentelemetry-integration.md
Server 端分析 API(/api/v1/analytics/*)
鉴权:同其他 Server REST 端点(Bearer JWT);游戏范围通过查询参数 gameId/env 过滤(前端由全局 scope 自动注入)。响应遵循统一契约:成功直接返回业务 JSON,错误返回 {error, message, details}。
数据仓库(ClickHouse 聚合表,链路 A/C 出口)
GET /api/v1/analytics/warehouse/dau
- 参数:
gameId、env(可选)、days(默认 14,最大 90) - 返回:
{"points":[{"date":"2026-08-24","gameId":"demo","env":"prod","dau":120,"newUsers":12}]} - 未配置
CLICKHOUSE_DSN时返回 503{"error":"service_unavailable","message":"分析仓库未启用"}
GET /api/v1/analytics/warehouse/online
- 参数:
gameId、env(可选)、minutes(默认 60,最大 1440) - 返回:
{"points":[{"minute":"2026-08-24T06:00:00Z","online":7}]}(分钟级 HLL 在线,SUM 归并)
GET /api/v1/analytics/warehouse/revenue
- 参数:
gameId、env(可选)、days(默认 14,最大 90) - 返回:
{"points":[{"date":"2026-08-24","revenueCents":9900,"refundsCents":500,"failed":2}]}
函数调用分析(audit_records 聚合)
GET /api/v1/analytics/invocations/summary
- 参数:
gameId、env、hours(默认 24,最大 720) - 返回:
{"total":13,"failed":3,"successRate":0.769,"avgDurationMs":2.5,"p95DurationMs":8,"topFunctions":[{"functionId":"player.list","total":8,"failed":3,"avgDurationMs":2.1}]}
GET /api/v1/analytics/invocations/trend
- 参数:
gameId、env、interval(hour默认/day) - 返回:
{"points":[{"bucket":"2026-08-23","total":9,"failed":2}]}
GET /api/v1/analytics/invocations
- 参数:
gameId、env、functionId、outcome(success/failure)、page、pageSize(≤100) - 返回:
{"items":[{"timestamp":"...","functionId":"player.list","actor":"admin","outcome":"success","durationMs":2,"traceId":"..."}],"total":8,"page":1,"pageSize":20}
概览与实时(链路 B)
- GET
/api/v1/analytics/overview— KPI 概览(DAU/MAU/收入/ARPU 等) - GET
/api/v1/analytics/realtime— 实时大屏(SSE,text/event-stream) - GET
/api/v1/analytics/realtime/series— 实时曲线序列 - POST
/api/v1/analytics/ingest— Server 侧事件写入(内部) - GET/PUT
/api/v1/analytics/filters— 采样控制(读取/保存过滤器)
行为分析(链路 B)
- GET
/api/v1/analytics/behavior/— 行为事件聚合 - GET
/api/v1/analytics/behavior/events— 事件明细(分页) - GET
/api/v1/analytics/behavior/paths— Top N 路径 - POST
/api/v1/analytics/behavior/funnel— 漏斗分析 - GET
/api/v1/analytics/behavior/adoption— 功能采用率 - GET
/api/v1/analytics/behavior/adoption/breakdown— 采用率分维度下钻
支付分析(链路 B)
- GET
/api/v1/analytics/payments/— 支付汇总 - GET
/api/v1/analytics/payments/summary— 按日汇总(收入/交易数/用户数) - GET
/api/v1/analytics/payments/product-trend— 商品收入趋势 - GET
/api/v1/analytics/payments/transactions— 交易明细(分页) - POST
/api/v1/analytics/payments/ingest— 支付事件写入(内部)
留存与关卡(链路 B)
- GET
/api/v1/analytics/retention— 留存(cohort) - GET
/api/v1/analytics/levels— 关卡漏斗/通过率 - GET
/api/v1/analytics/levels/episodes— 章节指标 - GET
/api/v1/analytics/levels/maps— 地图热力/死亡点
