feat(ops): 每日数据库备份 + 资金异常巡检告警 + 后台操作审计

- 新增 system_alerts/admin_audit_logs 表与 (status,created_at) 索引;启动即巡检、每 5 分钟扫描提现卡单/支付与订单不一致/待接单超时

- 后台新增「系统告警与操作审计」页(告警处理 + 审计列表),并接入消息铃铛待办

- 余额调整/封禁/删除/大神审核/提现打款/告警处理等敏感操作写入审计日志(含 IP)

- 新增 server/scripts/backup-db.sh 并已在生产配置每日 03:30 cron(校验+保留 14 天)

- 清理空的 order_messages 表;115 套件/750 用例全绿;线上实测告警接口/审计落库/备份均通过
这个提交包含在:
xcbyy
2026-10-22 09:54:10 +08:00
父节点 d941a16d28
当前提交 65ddc7301a
共有 10 个文件被更改,包括 562 次插入 和 0 次删除

查看文件

@@ -0,0 +1,56 @@
# 运维备份、系统告警与操作审计
## 一、每日数据库备份
- 脚本:`/www/backup/peiwan/backup_db.sh`(仓库副本:`server/scripts/backup-db.sh`)
- 计划任务:`30 3 * * * /bin/bash /www/backup/peiwan/backup_db.sh >> /www/backup/peiwan/backup.log 2>&1`
- 行为:
1. 从 `server/.env` 读取数据库凭据(不落盘明文);
2. `mysqldump --single-transaction --quick --no-tablespaces` 导出并 gzip;
3. `gzip -t` 校验压缩包完整性;
4. 只清理 `db_*.sql.gz` 中超过 14 天的文件。
- 手动执行:`/bin/bash /www/backup/peiwan/backup_db.sh`
- 恢复:`gunzip -c db_xxx.sql.gz | mysql -h... -u... database`
## 二、系统异常巡检(每 5 分钟)
服务端内置 `runSystemAlertScan()`,启动即执行一次,之后每 300 秒一次(`SYSTEM_ALERT_SCAN_MS` 可调,`DISABLE_SYSTEM_ALERT_SCAN=1` 可关)。
检查项:
| 告警 | 判定 | 级别 |
|---|---|---|
| 提现打款卡在「处理中」 | `withdrawals.status='处理中'` 且创建超过 30 分钟 | ERROR |
| 支付成功但订单未流转 | `payment_intents.status='SUCCESS'` 且订单仍为待付款超过 10 分钟 | ERROR |
| 待接单订单超时未退款 | `orders.status='待接单'` 超过 40 分钟 | WARN |
告警写入 `system_alerts` 表,按业务主键(如 `withdraw_stuck_<工单号>`)唯一去重,不会重复刷屏。
查看与处理:管理后台 → **履约安全与风控 → 系统告警与操作审计**。
同时会进入后台右上角消息铃铛的「系统告警」待办。
## 三、后台操作审计
敏感操作写入 `admin_audit_logs`,当前覆盖:
- 余额充值 / 扣减(含金额、原因、操作后余额)
- 封禁 / 解封用户
- 删除用户
- 通过 / 驳回大神入驻
- 提现发起转账、提现打款、驳回提现
- 处理系统告警
记录字段:操作时间、操作类型、对象类型/ID、详情、操作者 IP。
查看:管理后台 → **系统告警与操作审计 → 后台操作审计**。
## 四、手动查询
```bash
# 未处理告警
SELECT * FROM system_alerts WHERE status='OPEN' ORDER BY created_at DESC;
# 最近后台操作
SELECT * FROM admin_audit_logs ORDER BY created_at DESC LIMIT 50;
```