Skip to content

定时任务与监控

本页说明

讲什么:完整定时任务清单(任务名/频率/职责/依赖)和监控告警规则与阈值 适合谁:需要查阅系统自动化任务和告警规则的产品经理和运营人员 前置阅读架构与数据流预计阅读:4 分钟 负责人:技术运维主管

核心要点:出入金系统依赖大量定时任务驱动异步流程,监控告警覆盖流水采集、匹配引擎、银行回调、余额熔断四大类——任务挂起是最常见的异常根因。


定时任务总览

出入金系统依赖大量定时任务驱动异步流程。按业务域分为四大类:

业务域任务数量核心职责
BST 银证~7 个入金/出金指令发送、结果轮询、状态同步
入金匹配~3 个流水匹配、异常检测、超时处理
eDDA/eDDI~4 个授权轮询、入金代扣指令结果查询
对账~2 个每日对账、差异检测

BST 银证定时任务

天星 BST 任务

Job 名称职责触发方式重试说明
AsbBstCreateJob创建入金指令用户入金触发调用天星 API 发送入金请求
AsbBstCreateResultJob轮询入金结果定时轮询最多 60 次查询天星 API 获取入金状态
AsbBstDepositJob入金到账处理轮询返回 SUCCESS执行 SBA 入账编排
AsbBstTransfer出金转账 + 轮询审批通过触发最多 10 次发送出金请求并轮询结果
SyncAsbBstWithdraw出金兜底同步定时2 小时窗口AsbBstTransfer 超时后的兜底

天星入金链路AsbBstCreateJobAsbBstCreateResultJob(60 次轮询)→ AsbBstDepositJob

天星出金链路AsbBstTransfer(10 次轮询)→ SyncAsbBstWithdraw(2h 兜底)

招行 / 民生 BST 任务

服务名银行职责说明
cmb_stock_trans招行银证转账SM2 加密 Socket,实时双向推送
ms_stock_bank_transaction民生银证转账SM2 加密 Socket,实时双向推送

招行/民生通过 Socket 双向链路实时获取结果,不需要轮询任务。结果通过同一连接直接推送。

详细的 BST 任务链路和银行对比 → 内银系 BST 总览 § 定时任务


入金匹配定时任务

任务频率职责说明
自动匹配轮次每 3 分钟执行流水-申请匹配对新到的 Flow 和待匹配的 Apply 进行 5 维度匹配
AbnormalDepositJob定时异常入金检测检测长时间未匹配的 Flow,触发通知
超时自动驳回定时超期申请处理超过配置天数的未匹配申请自动驳回

各银行流水到达频率

银行流水方式到达频率
汇丰MT910 实时推送秒级
花旗/广发FPS API秒级
中银B2E 批量拉取每日 3 次
其他银行网银转账通知分钟~小时不等

详细匹配逻辑 → 匹配与自动入账

自动匹配运行时间

自动匹配并非 7×24 运行。HKD/CNH 自动匹配窗口为周一 07:00~周六 10:00;USD 为每日 09:00~16:00。窗口外的流水仅进入智能提醒(7×24),不自动入账。详见 人工匹配指引 § 自动匹配 vs 智能提醒


工银流水监控专题

工银(ICBC)流水系统采用双 AZ 容灾架构,有独特的监控需求。

双 AZ 架构

部署组专线说明
正式组专线 1主要流水拉取(拉取频率高)
灰度组(备份)专线 2备份流水拉取(拉取频率低)

容灾限制

两条专线不可互切——正式组只能通过专线 1,灰度组只能通过专线 2。任一专线故障时,对应部署组无法切换到另一条线路。系统通过流水管理服务自动路由缓解此问题。

五类线上问题与处理

类别表现原因处理方式
① 客户退款正式组和灰度组均告警客户转账后申请退款,银行删除该流水最常见;按告警处理脚本执行(有自动生成 SQL 脚本)
② 退款脚本失败告警但一键处理脚本执行失败灰度组拉取较慢,退款流水后无后续流水,脚本卡住人工排查灰度组流水状态
③ 多笔相同流水仅正式组告警,灰度组正常两笔流水的时间、金额、remarks 完全一致,系统无法区分修改 close_balance,将其中一条流水紧急入金
④ 银行推送异常流水仅正式组告警,灰度组正常银行侧先推送错误流水(余额与上一笔一致),后删除确认方法:逐笔对比正式/灰度组流水 + 对比结单;删除未使用流水后重启
⑤ 跨日流水推送过晚正式组和灰度组均告警银行在 0 点后才推送 T-1 日流水修改前一日 close_balance,将遗漏流水紧急入金

关键概念

概念说明
余额校验每笔流水入库时校验:上一笔 balance + 本笔 credit - 本笔 debit = 本笔 balance。退款导致流水被删除时,余额链断裂触发告警
is_used 字段标识流水是否已被匹配使用。重新全量拉取后,is_used=0 的流水为未被匹配的流水
正式组 vs 灰度组差异正式组拉取更频繁(可能逐笔拉取),灰度组拉取较慢(可能同时拉到多笔)。在退款和重复流水场景下两者行为不同

工银告警处理 Runbook

第 1 分钟 — 判断告警类别:

告警来源大概率类别下一步
正式组 + 灰度组同时告警①客户退款(最常见)执行自动处理脚本
正式组告警③重复流水 或 ④银行异常流水逐笔对比两组流水
自动脚本执行失败② 退款脚本卡住人工排查灰度组状态

第 2~5 分钟 — 执行处理:

  • 类别①(客户退款)

    1. 确认告警中的 flow_id
    2. 执行自动处理脚本(脚本会自动生成修正 SQL 并执行)
    3. 验证:余额链恢复连续,告警自动消失
  • 类别③/④(仅正式组)

    1. 数据库中按 created_at 对比同日正式组/灰度组流水
    2. 找到差异流水 → 判断是重复(③)还是幽灵流水(④)
    3. 类别③:修改其中一条的 close_balance,紧急入金
    4. 类别④:对比银行结单确认 → 删除 is_used=0 的异常流水

超过 10 分钟未恢复 → 升级到技术运维值班人员

诊断命令与日志关键字

收到工银告警后,用以下关键字定位问题:

场景服务日志关键字说明
余额链断裂icbc_be_relaybalance mismatch / close_balance流水删除导致余额不连续
流水重复icbc_be_relayduplicate flow / same remarks金额+时间+remarks 完全一致
拉取超时icbc_be_relaytimeout / connection refused专线连接中断
灰度组延迟icbc_be_relaycanary lag / sync delay灰度组流水到达慢于正式组
跨日遗漏icbc_be_relaymissing T-1 / late push0 点后拉取未包含 T-1 日流水

快速验证

正式组和灰度组流水对比:在数据库中按 created_at 排序同日流水,如果某条流水仅在正式组出现 → 可能是银行推送异常(类别④)。如果灰度组比正式组少 → 可能是灰度组拉取延迟(类别②)。


中银双路流水监控

中银(BOCHK)的流水来自两个独立数据源,需要关联监控。

双路架构

数据源类型延迟包含信息
银企服务实时 API秒级交易金额、币种、时间;部分有客户姓名
FTP 报表 S16定时拉取约 30 分钟补充客户姓名 + 汇款人账号

为什么需要双路

银企服务获取的流水信息大多数没有客户姓名,而姓名是自动匹配的核心条件。FTP 报表 S16 的作用就是补充这些关键信息。

FTP 报表运行时间

维度时间
银行侧服务时间周一~周六 8:00~20:00
Futu 侧服务时间7×24(全天候拉取)

报表文件识别

版本文件名格式说明
S16(当前)AGSA/CNo+UC01.TXT, UC02.TXT, UC03.TXT...每个时段一个文件
S14(旧版)AGSA/CNo+AC1.TXT, AC2.TXT, AC3.TXT...已停用,仅供回退参考

流水关联规则

S16 报表中的流水与银企实时流水的关联方法:

  1. 取 S16 中的"交易流水号"
  2. 去除前 5 位
  3. 将剩余部分去掉前导零 → 得到 seq_no_s16
  4. 取银企实时流水中的 seq_no去掉前导零
  5. seq_no_s16 == seq_no → 同一条流水,可关联更新

更新逻辑:

银企流水状态S16 更新内容
已有姓名(en_name)更新余额和银行账户号码
无姓名(en_name 为空)更新姓名、余额和银行账户号码

监控要点

监控项触发条件处理方式
S16 报表延迟超过 1 小时未收到新报表检查 FTP 连接状态;确认是否在银行服务时间内
流水关联失败S16 流水号无法匹配到银企流水检查流水号解析逻辑;可能是银行侧新增了未知格式
姓名未更新银企流水长时间无姓名检查 S16 是否正常拉取;确认报表中是否包含该流水

eDDA / eDDI 定时任务

eDDA(授权)和 eDDI(扣款指令)都用于入金代扣,不是出金协议。

任务银行职责说明
eDDA 授权轮询汇丰/恒生查询 eDDA 授权状态用户发起授权后轮询银行确认结果
eDDI 入金指令查询汇丰/恒生查询 eDDI 代扣结果代扣指令发出后查询是否成功入账
eDDI 入金结果处理汇丰/恒生入金到账确认代扣成功后执行入账
eDDA 状态同步汇丰/恒生定期同步授权状态检测银行端是否有授权变更

eDDA/eDDI 和 BST 的轮询区别

eDDA/eDDI 轮询的是银行确认动作(授权是否成功、代扣是否完成),BST 天星轮询的是交易执行结果(入金/出金是否完成)。eDDA/eDDI 轮询频率较低,BST 天星轮询频率较高且有明确的重试上限。


并发告警分诊

值班运营同时收到多条告警时,按以下优先级排序处理:

优先级判断标准典型告警为什么优先
P0资金已动但状态未更新冻结未释放、出金同步超时(2h 用尽)资金状态不一致,可能导致重复出金或用户资金被锁
P1通道完全中断Socket 断开(招行/民生)、API 连通性异常(天星)影响所有后续交易,每分钟扩大影响面
P2单笔交易异常入金/出金轮询超时、入金退款 REFUNDED影响单个客户,系统兜底机制通常在运行
P3趋势性预警每日熔断触发、累计报警、审批积压当前无即时影响,但不处理会恶化

可安全延后的告警

  • 非交易日的 BST 告警 → 确认是伪触发(BST 周末不处理交易)
  • 灰度组延迟 < 5 分钟(工银)→ 已知行为,灰度组拉取频率本身较低
  • bank_端发起量突增 → 先观察是否为正常业务高峰(如月初/发薪日)

监控告警规则

Runbook 格式说明

以下告警规则按 Runbook 格式组织。收到告警后按「严重度 → 首响人 → 处理步骤 → 升级条件」流程执行。详见告警升级矩阵

BST 银证告警

天星 BST:

#告警项触发条件严重度处理
1授权创建超时Mandate PROCESSING 超过阈值检查天星 API 连通性
2授权失败率突增单位时间 FAIL 数超限排查银行侧异常
3入金创建失败AsbBstCreateJob 连续失败检查请求参数和 API
4入金轮询超时60 次轮询用尽人工查询银行侧
5入金退款收到 REFUNDED冲正 + 通知用户
6出金轮询超时10 次轮询用尽进入 SyncAsbBstWithdraw
7出金同步超时2h 窗口结束严重人工确认银行侧状态
8冻结未释放出金失败但冻结未回滚严重手动释放冻结
9每日熔断触发累计达 stop 阈值评估是否恢复
10累计报警触发累计达 alarm 阈值运营关注
11重复交易检测ID 重复检查去重逻辑
12API 连通性异常响应超时/错误率升高严重联系天星技术支持
13银行端发起量异常source=2 量突增排查业务波动

招行/民生 BST:

告警项触发条件严重度处理
Socket 连接断开与银行 exit_server 连接中断严重自动切换备用 server,同时告警
超时率升高-5 回调码占比超阈值检查网络和银行侧状态
拒绝率升高-6 回调码占比超阈值联系银行确认拒绝原因

入金告警

告警项触发条件严重度处理
流水堆积未匹配 Flow 数量超阈值检查匹配任务是否正常运行
异常入金AbnormalDepositJob 检出异常运营审核异常入金
自动入账失败匹配成功但入账失败检查 SBA 编排状态

出金告警

告警项触发条件严重度处理
审批积压待处理任务数超阈值增加运营处理力量
大额出金单笔金额超监控线运营关注并确认
冲正操作有出金被冲正确认冲正原因

每日运营时间线

BST 和其他银行通道有各自的处理窗口,以下是典型交易日的时间线:

时段事件说明
07:00招行/民生 BST 处理窗口开启
08:00天星 BST 处理窗口开启
07:00eDDI(汇丰/恒生)处理窗口开启
09:00~10:00中银 B2E 第一批流水到达
11:00出金批次切割11:00 后新提交的出金进入次日批次
11:00 后出金文件导出按方式导出转账文件上传网银
13:00~14:00中银 B2E 第二批流水到达
下午支票存入工作人员到各分行存入支票
16:00eDDI 处理窗口关闭
17:00~18:00中银 B2E 第三批流水到达
22:00天星 BST 处理窗口关闭
次日 04:00招行/民生 BST 处理窗口关闭
次日凌晨每日对账任务运行

非交易日

周末和公众假期(以港交所日历为准)BST 不处理交易。eDDI 仅工作日。FPS 理论上 7×24 但实际运营审批仅工作日。


告警升级矩阵

当告警触发后,按以下流程升级:

严重度响应时效首响人升级条件升级对象
严重15 分钟值班运营15 分钟内无法恢复→ 技术运维 + 对应银行服务开发者
30 分钟值班运营30 分钟内无法定位原因→ 入金/出金产品经理
2 小时值班运营工作日内无法处理→ 运营主管

严重级告警(需 15 分钟内响应)

  • Socket 连接断开(招行/民生 BST)
  • API 连通性异常(天星)
  • 出金同步超时(2h 窗口用尽)
  • 冻结未释放(出金失败但资金仍被冻结)

高级告警(需 30 分钟内响应)

  • 流水堆积(待处理流水数超阈值)
  • 入金/出金轮询超时
  • BST 超时率/拒绝率突增
  • 自动入账失败
  • 冲正操作
  • 入金退款(REFUNDED)

中级告警(需 2 小时内响应)

  • 异常入金检出
  • 审批积压
  • 大额出金
  • 累计报警/每日熔断触发
如果需求变更:调整监控告警配置

代码位置

  • 入金监控任务:deposit/doc/crontab.sh(所有 Cron 定义)
  • 流水堆积监控:deposit/src/app/Console/Commands/Monitor/FlowMonitor.php
  • BST 审批监控:withdraw/src/app/Console/Commands/Monitor/AutoBsApprovalMonitor.php
  • auto_settings 告警:withdraw/src/app/Business/AutoSetting.phpautoOut() 方法(余额不足时自动告警)
  • 告警发送:通过飞书消息(sendFeishu() 方法),告警接收人配置在 auto_settings.alarm_staff_name

常见变更场景

  • 修改流水堆积阈值 → 修改 FlowMonitor.php 中的阈值常量
  • 修改告警接收人 → 通过 CRM 自动出金设置页面修改 alarm_staff_name,或用 AutoSetting::setAlarmStaff() API
  • 新增监控维度 → 创建新的 Monitor Command 类,注册到 crontab.sh
  • 修改告警间隔 → 修改 AUTO_SETTING_ALARM_INTERVAL(当前 1 小时,避免重复告警)

文档维护提醒

以下信息容易过时,建议每季度核对一次:

检查项核对方式负责人
银行维护窗口时间向银行对接人确认是否有变更银行对接人
eDDA 支持银行列表与汇丰/恒生通道实际配置比对入金产品经理
出金通道费用与银行最新费率表比对出金运营主管
告警阈值FlowMonitor.php / auto_settings 实际值比对技术运维
FPS ID 和收款人名称与银行确认是否有更新银行对接人

读完之后

我想...去看
了解 BST 任务的银行级详情内银系 BST 总览
了解入金匹配逻辑匹配与自动入账
看告警触发后的操作指南人工匹配指引
查错误码和状态码统一错误码中心
了解 CRM 各模块操作CRM 操作地图
了解 eDDA 排障流程eDDA 排障指引
这个页面有帮助吗?

内部业务文档 · 仅限 moomoo 团队使用