《五年,全链路:一个城商行运维的成长之路》前篇

0 阅读1分钟

我叫小李,在某城商行做银行运维。
不是那种负责服务器上上下下的运维,是专门盯着交易的那种——每一笔转账、每一次查询、每一个手机银行的请求,从用户点下去到后台返回结果,中间经过多少个系统、每一段用了多少毫秒、有没有超时、有没有报错,这些事情由我来看着。
听起来像是个重要的岗位。
但四年里,我死死盯着这条路,却反复撞上三堵墙。

第一堵墙:地图永远不准

这家银行有60多套业务系统。每套系统有自己的IP、端口、部署位置、上下游依赖关系。这些信息要在监控平台里维护成一张拓扑图,系统之间连着线,每条线上跑着什么交易,流量多大,清清楚楚。

这张图需要手工维护。

IP变了要改,新系统上线要加,系统退役要删。信创改造来一波,原来的服务器换成国产的,IP全部变更,就要把整张图重新配一轮。每次大规模改造之后,我要花好几周重新对一遍。

但这还不是最难受的。最难受的是:我不知道哪里漏了。

改着改着,某条链路悄悄失效,告警规则还挂在那里,但已经什么都监控不到了。表面上系统正常,实际上那段链路已经消失在了地图上。我以为自己有60套系统的覆盖,实际上某几条链路在不知道什么时候起就成了摆设。

走错路不怕,怕的是地图是错的。

第二堵墙:告警没人信

交易监控的原理不复杂。在系统之间的链路上架一个TAP口,把流量分出来,还原成交易记录,如果某笔交易没有响应,就告警。

理论上,告警触发了,就说明出事了。

但头几年,告警一响,业务那边第一反应不是"查哪里",而是"这是真的吗?"。

原因在于丢包。TAP口跟其他系统共用,流量挤在一条路上,包丢了,交易还原不完整,系统就判定"没响应"。可业务那边去数据库一查,这笔交易明明成功了,客户收到了,钱到了,就是我的监控说失败了。

一开始还有人来问我:这条告警是真的吗?

后来就没人问了。直接忽略。

我在这段时间里配了600多条告警规则,投入了大量时间和精力。规则越来越多,但一套系统,如果没有人信它,它跟不存在没有区别。

更糟糕的是,失去公信力的告警会带来反噬。真正出事的时候,值班的人看到告警弹出来,第一反应也是"先确认一下是不是误报"。这个"确认"的动作,在凌晨3点的故障窗口里,可能就是最关键的10分钟。

后来终于申请到了专属TAP口,不再跟别人抢带宽。丢包率降下来,数据准确率到了四个9。但信任是很慢的东西。数据变准了,也不是立刻就有人来看告警。是一条一条地试、一次一次地对,然后才有人开始认真对待。等告警体系真正运转起来,已经是两年后的事了。

第三堵墙:全链路不可控

告警能告诉你"这里出事了",但排查要靠全链路。

全链路是把一笔交易从发起到完成,经过的每一个系统、每一次调用、每一段耗时,串成一条完整的链条——哪里快、哪里慢、卡在谁那里,一目了然。

有全链路的时候,排查故障是两个人安静地查,半小时出结论。
没有全链路,就是20多人拉群,每个系统的负责人说"我们这边正常"。没有人能拿出跨系统的证据,也没有人知道到底哪里慢了、慢了多少。最后靠老大裁决,而不是靠证据。

新版手机银行上线后出过一次大问题,响应时间飙升,成功率大幅下降,银行在同类系统的横向排名掉了下去。我靠着几条全链路,帮开发一跳一跳地往下拆,前置吃掉了100毫秒,找到,压下去;后端又吃了一段,找到,压下去。

但全链路我只做了10来条,很难再往上加。

原因是没有全局流水号。

这家银行的业务系统大多分批建成,每家供应商有自己的日志格式,有自己的交易标识符,但没有一个能贯穿所有系统的统一ID。一笔交易在A系统叫一个名字,进了B系统叫另一个名字,到了核心系统又变了。没有统一的ID,抓到的包只知道"这一段发生了什么",不知道它属于哪笔交易,不知道这笔交易之前经过了哪里、之后去了哪里。

APM(应用性能监控)方案行里也试过,需要在每个系统里插代码,测试环境跑着跑着就崩了,没人敢上生产。后来勉强在自研的系统里上了APM,也只敢开100:1的采样,根本对不上每一笔交易。

全链路是我知道最有用的东西,也是我最没有办法的东西。

我心里一直有个目标:1分钟发现告警,5分钟定位根因,10分钟解决问题。这个目标,离不开全链路。但全链路做到10来条,就做不下去了。

到头了,也跟着去了

到最后,这套交易监控体系算是跑顺了。

60多套系统全部覆盖,600多条告警规则还在硬扛着,每天10几条告警(多了没人看),每月几百笔异常交易自动推送,就这个规模的城商行来说,已经算是行业领先了吗?

我认为没有,全链路只刚看清了10来条,而银行需要监控的场景成百上千。

但我能做的事情到头了。

更重要的是,银行要上云了、要新一代了、要云原生了…新系统搬到容器里,交易走overlay网络,虚机随时漂移、容器生生灭灭。原来数据靠旁路引流,链路靠手工维护,追踪靠应用插桩的方式,在这套环境里全部失效,没有对应的物理镜像端口,微服务路径随时改变,大量网关中间件数据库无法插桩。

传统运维的路,跟不到云上去。
我决定跟上去,换工作,加入新公司。

进入新环境之后,我接到的第一个项目,是支持一家城商行做新核心投产。在那里我遇到了老陈——一个负责应用运维、试过所有路、每条路都卡住的人。

下一篇,讲讲进了新环境之后那条“路”上发生的事。

编辑后记

这篇文章写的是一个年轻运维工程师的五年。类似的故事正在很多人身上发生着。

如果你也选择了这条路,也碰到到了那堵高高的墙壁,可以和我们一起探索“破壁”之道。

关注公众号【云杉网络】,发送**「链路」**两个字,我们来安排一次交流。

公众号链接:mp.weixin.qq.com/s/j8lbpHXMx…