第21章:风控告警系统
告警系统,说白了就是做市商的「神经末梢」。
我见过太多团队,策略写得漂亮,回测曲线完美,一上线就出问题。为什么?因为没人告诉他们在出事。等发现的时候,仓位已经爆了,亏损已经成了定局。
所以这一章,我们来聊聊怎么搭一套靠谱的告警系统。我个人习惯把它分成四个模块:告警级别、规则引擎、通知渠道、升级机制。咱们一个一个说。
21.1 告警级别定义
不是所有异常都值得半夜爬起来处理。我刚开始做风控时,恨不得每个小波动都报警,结果呢?团队所有人对告警都麻木了。这叫「狼来了」效应。
所以,告警级别必须分清楚。我一般用四级制:
| 级别 | 名称 | 含义 | 响应要求 |
|---|---|---|---|
| P0 | 致命 | 系统不可用、资金损失、严重违规 | 立即处理,5分钟内响应 |
| P1 | 严重 | 策略异常、连接中断、数据延迟 | 15分钟内响应 |
| P2 | 警告 | 指标接近阈值、资源使用率高 | 1小时内处理 |
| P3 | 提示 | 日常运维信息、非紧急状态 | 记录即可,无需立即处理 |
21.2 告警规则引擎
规则引擎是告警系统的「大脑」。你想想看,如果每条告警都要手写if-else,那维护成本得多高?
我推荐用规则引擎的方式,把告警条件做成可配置的。核心思路就三个要素:
- 指标:你要监控什么?比如持仓量、敞口、延迟、成交率
- 条件:什么情况下触发?比如大于某个值、小于某个值、连续N次异常
- 动作:触发了怎么办?比如发邮件、发短信、调用webhook
举个例子,一个典型的规则配置长这样:
{
"rule_id": "POSITION_LIMIT_001",
"name": "持仓超限告警",
"metric": "position_size",
"condition": {
"operator": "gt",
"value": 1000000,
"duration": 60
},
"level": "P1",
"actions": ["email", "sms", "webhook"]
}
这里有个细节:duration: 60 表示持续60秒都超限才触发。为什么要加这个?
因为市场瞬间的毛刺太多了。如果不加持续时间,你会被假告警烦死。我见过一个团队,没加这个参数,结果一天收到2000条告警,全是市场瞬间波动导致的。后来加了3秒的持续判断,告警量直接降到每天20条。
21.3 告警通知渠道
不同级别的告警,通知渠道应该不一样。这个道理很简单:P0告警你肯定不希望只发个邮件,因为没人会实时看邮件。
我一般这样分配:
- P0:电话 + 短信 + 即时通讯(如企业微信、钉钉)
- P1:短信 + 即时通讯
- P2:即时通讯 + 邮件
- P3:仅邮件,或者直接写入日志
另外,通知渠道要有「降级」机制。比如短信服务挂了,自动切换到即时通讯。这个在架构设计时就要考虑进去。
21.4 告警升级机制
这是很多人容易忽略的点。告警发出去,没人处理怎么办?
升级机制就是解决这个问题的。核心逻辑很简单:如果告警在规定时间内没有被确认或解决,就自动升级到更高层级的人。
我常用的升级策略:
- 第一级:值班工程师,响应时间5分钟
- 第二级:值班工程师未响应,升级到技术负责人,响应时间10分钟
- 第三级:仍未响应,升级到部门负责人,响应时间15分钟
- 第四级:最终升级到CTO或CEO
升级的时间间隔,我建议根据告警级别动态调整。P0的升级间隔可以短一些,比如2分钟;P2的可以长一些,比如10分钟。
21.5 整体架构图
说了这么多,咱们用一张图把整个告警系统的流程串起来:
这张图把整个流程串起来了:数据源进来,经过规则引擎判断,再根据级别走不同的通知渠道,最后通过升级机制确保告警被处理,处理完还要闭环通知。
21.6 一些实战建议
最后,分享几个我在实战中踩过的坑:
- 告警去重:同一个告警在短时间内重复触发,只发一次。否则你会被刷屏。
- 告警聚合:类似的问题合并成一条告警。比如「10个交易对同时延迟」,不要发10条,发1条带列表的。
- 静默期:告警处理期间,不要再发同样的告警。这个我吃过亏——处理P0告警时,手机一直在震,差点把手机摔了。
- 告警日志:所有告警都要记录,包括谁处理的、什么时候处理的、处理结果是什么。这是复盘的基础。
嗯,告警系统这块,说白了就是「让正确的人在正确的时间,用正确的方式,知道正确的事」。架构不难,难的是细节。希望这一章能帮你少走一些弯路。
无相订单流研究社 微信Lucian808555