第17章:熟悉的幽灵

审计ID的生成规则:AUDIT-年月日-时分秒-序号。

还有——

路容把两张图片并排放在一起,放大细节。

错误码的写法。

天启科技的日志里,有一次网络超时的记录:

```

[2022-07-1522:30:12.445]WARN数据传输-连接超时(错误码:NET_TIMEOUT;重试次数:3)

```

分号。

错误码后面是分号。

但分号前面有一个空格。

NET_TIMEOUT;

她猛地切回星耀的日志窗口,搜索分号。

找到了。

在解密服务的某条警告日志里:

```

[2025-03-1801:05:33.778]WARN解密服务-密钥缓存未命中(错误码:KEY_CACHE_MISS;已触发密钥重新加载)

```

KEY_CACHE_MISS;

分号。

空格。

然后分号。

一模一样。

路容的整个身体开始颤抖。

不是冷——出租屋里的暖气还在工作,空气温热干燥。是那种从骨髓深处渗出来的寒意,沿着脊椎爬升,在头皮上炸开细密的刺痛。她的手指蜷缩起来,指甲陷进掌心。疼痛让她稍微清醒了一些,但视线依然模糊,屏幕上的文字在晃动。

“若溪?”周哲的声音再次传来,这次带着明显的疑惑,“你那边还好吗?我这边看到你的鼠标很久没动了。”

路容张开嘴。

她想说话。想说“我没事”。想说“继续排查”。但喉咙像被什么东西堵住了,声带僵硬,发不出任何声音。她只能听见自己粗重的呼吸,在安静的房间里显得格外刺耳。

“若溪?”

她用力吞咽,口腔里干得发苦。手指在键盘上摸索,敲出两个字:“在。”

“你找到什么了吗?”周哲问,“我这边倒是发现问题了。你看这个——”

屏幕切换回数据流监控界面。周哲用鼠标圈出一段代码:“你的过滤规则,第87行,边界条件判断有问题。`if(error_rate>0.01&&data_volume>1000)`,这里用的是逻辑与,但实际应该用逻辑或。因为只要异常率超过1%或者数据量超过阈值,就应该告警。你用与的话,必须两个条件同时满足才会触发。所以之前那些零散的异常数据包没触发告警,直到今晚这个新数据源涌入大量数据,两个条件才同时满足。”

他的声音轻松了一些,甚至带着点笑意:“小bug,我改一下就行。改完重新部署,告警应该就能解除。不过你设计这个规则的时候,是不是太谨慎了?怕误报太多?”

路容盯着屏幕上被圈出的那行代码。

她的代码。

她故意留下的漏洞。

她精心设计的鱼饵。

现在,周哲轻松地找到了问题,轻松地修复了。他以为这只是新手工程师常犯的逻辑错误。他不知道这行代码背后藏着什么。不知道这个漏洞是故意留下的。不知道这个告警是她等待的契机。

更不知道,就在他排查技术问题的这几分钟里,她已经看到了地狱。

“若溪?”周哲又问了一次,“你确定没事吗?你的呼吸声有点重。”

路容闭上眼睛。

三秒。

五秒。

十秒。

她重新睁开眼睛,手指在键盘上敲击,通过聊天窗口发送消息:“没事,刚才在对比日志。你说得对,是我考虑不周。谢谢指正。”

发送。

然后她关掉了麦克风。

她需要安静。

需要绝对的、彻底的安静。

周哲在耳机里说了什么,她听不见。她只看见聊天窗口里弹出他的回复:“客气什么,一起解决问题嘛。我改好了,正在重新部署。大概两分钟后生效。你那边可以继续监控异常率的变化。”

路容没有回复。

她的目光重新回到那两个并排的屏幕上。

左边,星耀。

右边,天启。

相同的日志格式。

相同的标点习惯。

相同的空格用法。

相同的分号前面加空格的诡异细节。

这不是巧合。

这不是“行业通用规范”——她在这行干了七年,看过无数公司的系统日志。有的用方括号,有的用圆括号。有的时间戳精确到秒,有的到毫秒。有的错误码用下划线,有的用点号。有的在冒号后面加空格,有的不加。有的审计ID用UUID,有的用自增数字。

但像这样,每一个细节都吻合——

只有一种可能。

写这些日志记录的服务,是同一个程序员开发的。

或者更准确地说,设计这些日志格式规范的人,是同一个人。

李剑。

路容的嘴唇无声地动了一下,念出这个名字。

三年前,他是天启科技的技术副总裁,负责“灯塔”项目的整体架构。所有核心服务的日志规范,都是他亲自审核定稿的。路容记得很清楚,因为当时她还为此和他争论过——李剑坚持要在分号前面加空格,说这样“更美观”;路容认为这不符合大多数编程语言的惯例,容易造成解析问题。最后李剑用职权压了下来:“按我的规范来。”

她当时只觉得这个人固执。

现在她知道了,那不是固执。

那是习惯。

是烙印。

是无论换到哪家公司、哪个项目、哪个系统,都会不自觉带上的个人印记。

就像指纹。

而现在,这个指纹,出现在了星耀集团的“深蓝计划”里。

路容靠在椅背上,仰起头。

出租屋的天花板很低,白色的涂料有些剥落,露出下面灰色的水泥。角落里有一小片水渍,是楼上漏水留下的痕迹,形状像一张扭曲的脸。她盯着那片水渍,眼睛一眨不眨。

所以,李剑不仅当年构陷了她。

不仅偷走了她的职业生涯。

不仅毁了她的人生。

现在,他还在用同样的手法,在另一家公司,另一个项目里,做类似的事情。

“深蓝计划”到底是什么?

那些加密格式错误的数据包,来自哪里?

那个IP段198.51.100.0/24,背后是什么?

还有——

路容猛地坐直身体。

如果日志格式是李剑的个人习惯,那么“深蓝计划”的整个技术架构,很可能也是他主导设计的。或者至少,核心的数据处理流程是他把关的。那么,这个项目里,会不会藏着和三年前“灯塔”项目一样的秘密?

非法数据交易?

黑市数据源?

洗白渠道?

她的心脏狂跳起来,在胸腔里撞击出疼痛的节奏。手指重新放在键盘上,冰凉僵硬。她切回远程桌面,看到监控面板上的红色警示标志已经消失。异常率降到了0.23%,数据流恢复正常。周哲在聊天窗口里发来消息:“搞定。告警解除。你可以休息了,今天辛苦了。”

路容盯着那条消息。

她的手指在键盘上悬停了几秒,然后敲下:“辛苦了。谢谢。”

发送。

然后她断开远程连接。

屏幕暗下去。

房间里只剩下她电脑本地屏幕的光,照亮着那张三年前的日志截图。那张截图里,有李剑的操作记录。有他导出数据的记录。有系统审计的记录。有所有能证明他当年做了什么、却因为“证据不足”而被忽略的记录。

而现在,她有了新的线索。