3.3 KiB
3.3 KiB
手机验证码发送链路可观测性补强
日期:2026-04-23
1. 文档目的
这份文档用于冻结 Rust api-server + module-auth + platform-auth 在手机号验证码发送链路上的新增日志口径,解决当前排查成本过高的问题:
- 前端点击“获取验证码”后,只能看到
/api/auth/phone/send-code返回了500。 - 服务端虽然已有部分失败日志,但关键上下文不完整,仍需要人工反推是哪一层失败。
- 阿里云真实返回
UNKNOWN、check frequency failed这类错误时,缺少足够字段判断是本地冷却、上游频控、配置异常还是响应解析问题。
2. 本次补强范围
本次只补强短信发送链路日志,不改前端 UI,不扩散到无关模块:
server-rs/crates/api-serverserver-rs/crates/module-authserver-rs/crates/platform-auth
3. 日志补强目标
新增日志后,排查一次 send-code 失败时,单看日志应能回答:
- 请求是否真的进入
api-server - 当前使用的是
mock还是aliyun - 手机号和场景是否已经通过服务端规范化
- 失败发生在本地冷却检查前、阿里云请求发出前、阿里云返回后,还是快照写入阶段
- 阿里云返回的 HTTP 状态、
Code、Message、RequestId是否可见
4. 新增日志位置
4.1 api-server
在 POST /api/auth/phone/send-code handler 内新增发送前日志,至少输出:
request_idoperationsceneproviderphone_input_masked
失败日志继续保留,但补充:
providerphone_input_masked
4.2 module-auth
在 PhoneAuthService::send_code 内新增:
- 规范化手机号后、调用 provider 前的调试日志
- 本地冷却命中时的日志
- provider 成功后、写入本地验证码快照前的日志
字段至少包含:
scenephone_e164_maskedphone_national_maskedprovidercooldown_secondsexpires_in_secondsprovider_request_idprovider_out_id
4.3 platform-auth
在阿里云 provider 内新增:
- 发起
SendSmsVerifyCode前的日志 - 收到阿里云 HTTP 响应后的日志
- 错误分类前的日志
字段至少包含:
provider=aliyunscenephone_maskedendpointhttp_statusprovider_codeprovider_messageprovider_request_idprovider_out_id
5. 约束
为了避免日志变成新的风险源,本次必须满足:
- 不打印完整手机号
- 不打印验证码明文
- 不打印
AccessKeySecret - 不打印完整签名串
- 只打印排查发送链路需要的最小字段
6. 验收标准
补强后再次请求 /api/auth/phone/send-code,无论成功还是失败,都应满足:
api-server能看到请求进入日志module-auth能看到 provider 调用前的规范化结果platform-auth能看到阿里云返回的状态和关键字段- 如果失败,日志里可以直接区分:
- 本地冷却
- 阿里云配置缺失
- 阿里云上游失败
- 阿里云频控或业务拒绝