可观测性、埋点与限流

可观测性、埋点与限流

类型化埋点

可选的 analytics 模块通过 src/services/telemetry 提供带版本的事件契约, 内置 nooploggerposthogga4umami 适配器。浏览器事件只会在 用户同意分析后发送;服务端业务事件沿用同一契约,供应商不可用时降级到日志或 noop,不会阻塞业务请求。

默认上下文包含受长度限制的匿名 ID、可选登录用户 ID、会话和请求 ID、语言、首次/最近 来源及 UTM 字段。不会包含密码、Cookie、Authorization、邮箱、提示词、模型回复或上传 内容。事件字典和指标公式见运营说明

日志

Server、Docker 和 Vercel 使用 src/lib/logger 的结构化日志。配置 AXIOM_TOKENAXIOM_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本地或可信环境,不提供防滥用
upstashREST URL、REST TokenServer、Docker、Vercel
cloudflare-rate-limit七个 Rate Limiting BindingCloudflare Workers

Cloudflare 组合按 globalauthaipaymentuploadstricttelemetry 分开绑定。 生成的默认阈值是起点,上线前按实际流量和接口成本调整。

健康检查

/api/health 检查配置与数据库连通性,只返回状态和安全诊断,不返回变量值。

pnpm deploy:check -- https://your-domain.example/api/health

HTTP 200 且 statushealthy 表示基础运行条件就绪。支付、邮件、存储、AI 和 任务仍需分别做真实冒烟验证。

隐私与失败行为

第一方匿名 ID 最多在 Cookie 或本地存储中保留一年,用户可以清理。用户可以在 Cookie 设置中撤回分析同意。供应商错误会先脱敏再写日志,不会让注册、支付、积分或核心产品 请求失败。

上线检查

  • 所有公开 mutation 路由有合适限流。
  • 日志和错误事件经过脱敏。
  • Sentry 和 Axiom 的采样、保留期限、告警已配置。
  • /api/health 受监控,但不会向公网泄露内部连接细节。
  • Worker 日志中没有 node:fsSonicBoom 或 Pino 初始化错误。

本页目录