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 用例全绿;线上实测告警接口/审计落库/备份均通过
这个提交包含在:
56
docs/运维备份与告警审计.md
普通文件
56
docs/运维备份与告警审计.md
普通文件
@@ -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;
|
||||
```
|
||||
在新工单中引用
屏蔽一个用户