可观测性、埋点与限流
可观测性、埋点与限流
类型化埋点
可选的 analytics 模块通过 src/services/telemetry 提供带版本的事件契约,
内置 noop、logger、posthog、ga4 和 umami 适配器。浏览器事件只会在
用户同意分析后发送;服务端业务事件沿用同一契约,供应商不可用时降级到日志或
noop,不会阻塞业务请求。
默认上下文包含受长度限制的匿名 ID、可选登录用户 ID、会话和请求 ID、语言、首次/最近 来源及 UTM 字段。不会包含密码、Cookie、Authorization、邮箱、提示词、模型回复或上传 内容。事件字典和指标公式见运营说明。
日志
Server、Docker 和 Vercel 使用 src/lib/logger 的结构化日志。配置
AXIOM_TOKEN 与 AXIOM_DATASET 后可发送到 Axiom;未配置时保留本地输出。
Cloudflare 生成项目会换成 Worker 安全的 console logger,并移除 Pino 与文件写入 依赖。支付、webhook 和任务日志应携带 request id 或外部事件 id,禁止记录密钥、 Cookie、Authorization header 和完整用户内容。
Sentry
选择 Sentry 时,使用:
NEXT_PUBLIC_SENTRY_DSN="https://..."
SENTRY_AUTH_TOKEN="sntrys_..."
DSN 用于运行时上报,Auth Token 只供构建或发布上传 sourcemap。Cloudflare Free 组合为了包体和运行时兼容会使用 console 监控替代实现。Sentry 负责错误监控, 与上面的产品事件适配器相互独立。
限流适配器
| 选择 | 配置 | 用途 |
|---|---|---|
noop | 无 | 本地或可信环境,不提供防滥用 |
upstash | REST URL、REST Token | Server、Docker、Vercel |
cloudflare-rate-limit | 七个 Rate Limiting Binding | Cloudflare Workers |
Cloudflare 组合按 global、auth、ai、payment、upload、strict、telemetry 分开绑定。
生成的默认阈值是起点,上线前按实际流量和接口成本调整。
健康检查
/api/health 检查配置与数据库连通性,只返回状态和安全诊断,不返回变量值。
pnpm deploy:check -- https://your-domain.example/api/health
HTTP 200 且 status 为 healthy 表示基础运行条件就绪。支付、邮件、存储、AI 和
任务仍需分别做真实冒烟验证。
隐私与失败行为
第一方匿名 ID 最多在 Cookie 或本地存储中保留一年,用户可以清理。用户可以在 Cookie 设置中撤回分析同意。供应商错误会先脱敏再写日志,不会让注册、支付、积分或核心产品 请求失败。
上线检查
- 所有公开 mutation 路由有合适限流。
- 日志和错误事件经过脱敏。
- Sentry 和 Axiom 的采样、保留期限、告警已配置。
/api/health受监控,但不会向公网泄露内部连接细节。- Worker 日志中没有
node:fs、SonicBoom或 Pino 初始化错误。