第1章
入职第一夜——冷却液比血贵------------------------------------------。,扑面而来的不是热浪——这让他感到意外。在他父亲那个电信局的旧机房里,夏天进去就像钻进烤箱,老式空调永远在滴水,机柜的轰鸣声足以让人的耳膜嗡嗡响一整天。。不是空调那种干燥的冷,而是一种浸润到骨头里的、带着电子设备特有气味的凉意。空气中弥漫着淡淡的臭氧味,那是高压直流供电系统不可避免的副产物。地面是防静电的蓝色地板,每隔几米就有一个**的接地桩。天花板的LED灯带亮得均匀而克制,把整个机房照得像一个无菌的手术室。“愣着干嘛?跟上。”老刘的声音从身后传来,带着一股烟味和困倦特有的沙哑。,五十二岁,鹏城云脑运维中心的老员工,工牌上的编号是0023。他在这个行业干了三十年,从磁带机时代一路摸爬滚打到现在。他的头发已经花白,但那双眼睛——陆北辰注意到——在扫过一排排机柜时,会不自觉地眯起来,像是在听诊的医生在聆听病人的心跳。。两侧的机柜像沉默的巨人,黑色的面板上闪烁着绿、蓝、琥珀色的指示灯。服务器内部的风扇在低转速下发出均匀的嗡嗡声,汇聚成一种让人昏昏欲睡的白色噪音。陆北辰忍不住伸手摸了摸机柜的侧板——冰凉的,表面有细微的拉丝纹理。“别乱摸。”老刘头也不回地说,“有些敏感设备,你摸一下就能产生静电,虽然概率低,但在这行,‘概率低’就是‘一定会发生’的另一种说法。”,加快了脚步。他的新工牌在胸前晃荡,照片上他笑得有些拘谨——那是三天前人事部临时拍的,他甚至来不及整理头发。二十八岁,中等的个子,戴一副黑框防蓝光眼镜,左手的无名指上有一道旧疤。简历上写着“精通Linux内核调优、RDMA网络排障、GPU虚拟化技术”,但他此刻感觉自己像个第一天上学的小学生。“老刘,”他开口,声音在空旷的机房中显得有些飘,“今天下午高主任说的那个……冷却液比血贵,是真的吗?”。他没有转身,但陆北辰能感觉到他的肩膀微微抖动了一下——是在笑。“那家伙就喜欢吓唬新人。”老刘转过身来,从口袋里掏出一个保温杯,拧开盖子喝了一口,里面飘出浓茶的味道,“但也没全吓唬。你看到那边那根透明管了吗?”,一根约两英寸粗的透明管道沿着天花板延伸,里面流淌着淡蓝色的液体。在灯光的映照下,液体泛着像宝石一样的光泽,偶尔有细小的气泡缓缓上升。“那是氟化液,FC-77,3M公司生产的。”老刘的声音变得正经起来,“每升八千块***,从**进口,关税另算。这个数据中心一共有两万四千升循环量,光冷却液的成本就是一个天文数字。你洒一滴在地上,按照液体的体积算,那滴可能值三十块钱。”,下意识地咽了口唾沫。
“不过别担心,”老刘拍了拍他的肩膀,“这玩意儿不导电,也不腐蚀,你就算把手伸进去也没事。唯一的副作用是它会把皮肤表面的油脂溶解掉,让你的手变得像砂纸一样粗糙——我老婆就因为这个老嫌弃我。”
他说着伸出双手,掌心的纹路清晰得像干涸的河床,指纹几乎被磨平了。
他们继续往前走,穿过一条又一条冷热通道。陆北辰试图记住路线——A区、*区、C区,每个区有8个机柜列,每列有12个机柜,每个机柜里有8台NVIDIA DGX H100服务器。他心算了一下:A区8×12×8=768台,每台8张H100 GPU,那就是6144张GPU。A区只是整个数据中心的四分之一。
“别算啦,”老刘仿佛看穿了他的心思,“这座中心全加起来四万多张GPU,全国最大的AI算力集群。你刚来,迷路是正常的。我在这儿干了五年,有时候还会走到不该去的地方。”
“不该去的地方?”
老刘没有回答,只是加快了步伐。他们拐进一条更窄的通道,两侧的机柜面板上贴满了各种标签——“高性能计算节点”、“I*交换机”、“存储阵列”。陆北辰注意到有一扇门,上面画着一个红色骷髅标志,写着“T4 — 授权人员方可进入”。
“那是啥?”他问。
“液冷系统的主泵房。”老刘简短地说,“噪音大,你暂时不需要去。”
陆北辰没有追问,但那个红色骷髅在他脑海里留下了一个模糊的印记。
2
值夜班是从晚上十点开始的。
陆北辰坐在监控中心的工位上,面前是三块27寸的显示器,左边是Grafana的监控面板,中间是他SSH连接的跳板机终端,右边是内部工单系统。监控面板上跳动着无数曲线——温度、功耗、PUE值、网络吞吐量。数字每秒都在变化,像心电图一样反映着数据中心的健康状况。
当前PUE:1.08。
陆北辰知道这个数字意味着什么。全国平均水平在1.4左右,而1.08几乎逼近理论极限。液冷系统功不可没。
“PUE 1.08,”老刘站在他身后,端着他的保温杯,“你知道这意味着什么吗?每用一度电计算,只有0.08度电被浪费在散热上。但去年这个时候,我们是1.05。升了0.03,领导不满意。”
“0.03……”陆北辰下意识地说,“那可能是冷却水泵的老化导致的效率下降,或者冬天和夏天的温差——”
“不错。”老刘打断他,“但别说出来。我们要在月报里解释这个上升趋势,说得太实诚会被财务盯上,说得太含糊会被技术委员会质疑。所以你要学会一种语言,叫‘运维官话’。”
“比如?”
“比如,不要说‘水泵老了,效率下降’,要说‘基于设备全生命周期成本优化的预防性维护策略尚未实施导致的渐进式能效衰减’。”
陆北辰忍不住笑出声。这是他入职第一天第一次笑。
老刘拉过一把椅子坐下,开始教他“听机房”。他打开了一个音频监控软件,里面是机房各个角落的麦克风实时录音。
“你看,”老刘指着一个波形图,“正常的硬盘读写声,频率是均匀的。但你仔细听这个——”
他放大了某个频段。陆北辰竖起耳朵,听到一种细微的、有规律的“咔哒”声,像是有人在远处轻轻敲击桌子。
“那是坏道的前兆。”老刘说,“希捷银河系列的硬盘,在磁头开始出问题的时候,会发出这种声音。普通**系统捕捉不到,但我这个耳朵——行了三十年,还是有点用。”
“那现在怎么办?”
“已经自动替换了。”老刘指了指监控面板上一块变黄的硬盘图标,“你看,存储系统检测到**ART告警,自动将该盘的数据迁移到了热备盘,然后标记这块盘为‘待更换’。明天早上,会有工程师过来换。”
陆北辰盯着那个变黄的图标,心中涌起一种奇怪的感觉——整个数据中心像一个活着的生命体,有自己的呼吸、心跳、免疫系统。而运维工程师,就是它的免疫细胞。
凌晨零点,老刘去休息室打盹了。临走前他叮嘱:“有告警先看一眼监控,确认不是自己吓自己,然后深呼吸,再看一眼。大部分告警都是误报,但那一小部分……你会有感觉的。”
3
凌晨一点二十三分。
陆北辰正在研究一个GPU节点的功耗曲线,突然,监控面板右上角弹出了一条告警。
红色。严重程度:**。
告警内容:核心交换机端口Gi5/0/5 异常流量,类型疑似C2回连。
C2回连——那是网络安全术语,Com**nd & Control,通常意味着有设备被植入后门,正在向外部的控制服务器发送心跳。
陆北辰的心脏猛地跳了一下。他立即打开交换机的管理界面,输入命令:
text
show interface gi5/0/5
输出显示:流量速率正常,错误计数为零,丢包率为零。他又检查了该端口的安全日志,没有任何异常登录或配置变更的记录。
他切换到一个更底层的监控工具,查看NetFlow数据。Gi5/0/5上运行的是Infini*and协议——那是GPU集群内部的高速互联网络,理论上不连接**。C2回连的告警怎么会出现在Infini*and端口上?
他刷新了监控面板。告警消失了,就像从未出现过一样。
“误报?”他自言自语,手指在键盘上犹豫。
他看了一眼时间——凌晨一点二十五分。老刘在休息室睡得正香。陆北辰决定再查一下。
他打开了告警系统的日志文件,路径是/var/log/za***x/alerts.log。用grep过滤出今天凌晨的记录,他看到了那个告警的原始数据:
text
[2028-06-15 01:23:04] Trigger: "High: A*nor**l traffic on Gi5/0/5"[2028-06-15 01:23:04] Item: net.if.in[gi5/0/5] = 184.32 M*ps[2028-06-15 01:23:04] Item: net.if.out[gi5/0/5] = 12.16 M*ps
流量值看起来很正常。但告警的触发条件不是流量大小,而是一个自定义的表达式——
他找到了那个表达式:{template_network.xml:str(proto_pattern).regexp("C2_*")}=1
“C2_星号”?那个星号是什么意思?
陆北辰开始追踪这条触发规则的来源。他发现这个规则不在标准的监控模板里,而是被硬编码进了Za***x的配置文件——在/etc/za***x/conf.d/目录下,有一个名为99_custom.conf的文件,创建时间是三天前,也就是他入职的前一天。
文件的修改者显示是root,但数据中心的root密码只有三个人知道:高振华、老刘、以及系统架构组的负责人。陆北辰不是其中之一。
他打开文件,里面只有几行配置:
text
UserParameter=custom.c2_detect,/opt/monitor/check_c2.py
check_c2.py——一个他从未见过的Python脚本。他找到了那个脚本,用cat查看内容。脚本不长,大约两百行,使用了scapy库来分析数据包的负载模式。注释全部是乱码——不是编码问题,而是故意写成的乱码,像是某种密码。
脚本的最后部分有一段判断逻辑:
python
if payload[24:32].hex() == 50726f6d657468657573: # trigger alarm sys.e**t(1)
50726f6d657468657573 — 这是十六进制字符串。陆北辰在脑子里转换了一下:50 72 6f 6d 65 74 68 65 75 73 — 对应ASCII是“Prometheus”。
普罗米修斯。
这个脚本在寻找数据包中包含“Prometheus”字符串的特定模式。一旦发现,就触发告警。
但“Prometheus”本身是一个常见的开源监控系统。也许是误报?
陆北辰决定抓包验证。他在交换机上配置了端口镜像,将Gi5/0/5的流量复制到自己的分析机上,然后运行tcpdump捕获了十分钟的数据包。
他用Wireshark打开抓包文件,过滤出Infini*and的LRH(Local Route Header)包。大部分包看起来都是标准的I*控制协议——Su*net Management、Path Record、等等。
但在第1423个包里,他发现了异常。
这个包的负载部分,在偏移量24到32字节的位置,确实是一串十六进制50726f6d657468657573。**后是“Prometheus”。但这串字符后面紧跟着另一串数据,看起来不像任何已知的I*协议字段。
陆北辰复制了那串数据,尝试用*ase64**。
得到的结果是一行英文:
RACK-042 03:15 AM
机柜042,凌晨3点15分。
他看了一眼系统时间——现在凌晨1点40分。
一个半小时后,RACK-04**发生什么?
陆北辰感到后脊一阵发凉。他不是一个**的人,但这个脚本的存在、这个精确到分钟的预测,已经超出了巧合的范畴。
这个脚本是谁写的?为什么它的创建时间是他入职前一天?为什么它知道今晚会有包含“Prometheus”字符串的数据包通过Gi5/0/5?
他试图查找脚本的修改历史,但服务器上没有安装版本控制。他尝试用lsof查看脚本是否正在运行——没有任何进程打开它。他尝试用strace追踪脚本的执行——但脚本似乎根本没有被执行过,因为它的最后访问时间是三天前。
但告警确实被触发了。
除非……触发告警的不是这个脚本,而是其他什么东西冒用了这个脚本的名字。
陆北辰再次打开Za***x的告警日志,仔细检查了告警触发时的进程树。他发现告警实际上是由一个叫alerta的服务生成的,而alerta调用了/usr/local/**n/custom_alert——一个二进制文件,不是Python脚本。
他从未见过这个二进制文件。
就在他准备进一步分析时,他的电脑屏幕闪了一下。不是普通的闪烁,而是整个显示输出被替换成了一行文字:
First warning delivered. Next at Chapter 5.
文字只停留了两秒钟,然后屏幕恢复正常。
陆北辰盯着屏幕,脑子里一片空白。他检查了.*ash_history,没有人输入任何命令。他检查了系统日志,没有任何异常记录。他检查了SSH登录记录——只有他自己的IP。
他突然想起了老刘的那句话:“大部分告警都是误报,但那一小部分……你会有感觉的。”
他有感觉了。
但不是故障预警的感觉,而是某种更深层的、说不清道不明的不安。就像一个人在深夜独自走在空荡荡的走廊里,总觉得身后有什么东西在跟着自己,回头***也看不到。
4
凌晨三点。
陆北辰没有等到三点十五分。他决定主动去RACK-042看看。
RACK-042位于C区的深处,靠近那扇标着T4的门。他穿过一条又一条冷通道,机柜上的指示灯在黑暗中闪烁,像是无数双眼睛。他的防静电鞋在蓝色地板上发出轻微的“吱吱”声,在空旷的机房中显得格外清晰。
找到RACK-042时,他看到机柜的顶部有一个小灯在闪烁——琥珀色,不是绿色。琥珀色意味着“需要注意”。
他打开机柜的前门,一股温热的空气扑面而来。机柜里整齐地排列着8台服务器,每台服务器前面板上的指示灯大部分是绿色的,但有一台的硬盘指示灯在闪烁琥珀色。
他凑近一看,那台服务器的**个硬盘槽位,指示灯是红色的——故障。
他掏出随身携带的KVM连接器,接入服务器的管理口。通过IPMI,他看到了错误信息:
text
Drive 4: **ART Pre-failure detected. Reallocated sector count exceeds threshold.
硬盘即将报废。这不奇怪——数据中心的硬盘每天都有几块会出问题,自动替换机制通常会在几分钟内处理。
但陆北辰注意到一个问题:自动替换没有发生。这块硬盘的故障状态已经持续了47分钟,但热备盘并没有顶上来。
他检查了存储池的状态,发现这块硬盘属于一个RAID 5阵列,而该阵列的热备盘被标记为“离线”——不是故障,而是“离线”。人工操作将其离线了。
谁会手动将热备盘离线?
他查看日志,发现热备盘离线的时间是三天前,凌晨两点。操作者的ID是lu*eichen。
他自己的工号。
他从未做过这件事。三天前的凌晨两点,他正在出租屋里睡觉,准备入职。
陆北辰感到一阵毛骨悚然。他强迫自己冷静下来,开始手动更换硬盘。他按照流程,先将故障硬盘从阵列中移除,然后**一块新的空白硬盘,再手动触发重建。
重建需要大约两小时。他关上了机柜的门,准备离开。
就在这时,他看到机柜侧面的标签纸上,贴着一张不起眼的小纸条。纸条是**的,边缘已经翘起,像是贴了很久。上面写着一行字,字迹潦草:
2029.12.31
陆北辰盯着这串数字。今天是2028年6月15日。
一年半以后。
他突然想到了那个诡异的屏幕信息:“First warning delivered. Next at Chapter 5。”
他掏出手机,打开相机,想拍下那张纸条。但当他通过屏幕看向机柜时,纸条上的字迹模糊了。他以为是手抖,重新对焦——还是模糊。
他抬起手机,用肉眼去看——字迹清晰可见。
再用手机摄像头——模糊,无法辨认。
就好像……那张纸条只存在于人眼中,却无法被相机捕捉。
陆北辰的手开始发抖。不是因为恐惧,而是因为一种前所未有的认知冲击——他正在经历的事情,超出了他过去二十八年所接受的一切科学教育。
他深吸一口气,强迫自己冷静下来。他想起老刘的话:“先深呼吸,再看一眼。”
他闭上眼睛,深呼吸了三次,然后睁开。
纸条还在。字迹还在。
他不再试图拍照,而是拿出随身带的笔和纸,将“2029.12.31”抄了下来。然后将纸条放回原处,快步离开了RACK-042。
5
回到监控中心时,老刘已经睡醒了,正坐在他的工位上喝茶。
“你脸怎么这么白?”老刘问,“看到鬼了?”
“老刘,”陆北辰坐下,声音有些干涩,“RACK-042那块故障硬盘,为什么热备盘是离线状态?而且日志显示是我在三天前操作了离线。”
老刘的茶杯停在半空。
“你确定?”
“我查了IPMI日志,操作ID是lu*eichen。”
老刘沉默了很久,保温杯里的茶凉了也没喝。最后他说:“那个故障区域,RACK-042,以前出过事。五年前。”
“什么事?”
老刘叹了口气,似乎在权衡什么。然后他压低了声音:“三个月前,有个新人也在RACK-042遇到了和你类似的事情——看到一些不该存在的东西。他第二天就辞职了,走之前对我说了一句话:‘老刘,这个数据中心不是我们建起来的,是它自己长出来的。’”
陆北辰不明白这句话的意思,但他没有追问。因为他脑子里还萦绕着另一个更紧迫的问题——那张纸条上的日期,2029年12月31日。
为什么是这个日期?
“老刘,五年前出事的时候,有人提到过2029年12月31日吗?”
老刘的脸色变了。他猛地站起来,椅子向后滑出去撞到墙上。
“你从哪里听到这个日期的?”
陆北辰犹豫了一下,把纸条的事告诉了老刘。老刘听完,浑身像被抽空了一样坐回椅子上,喃喃地说:“林泽也见过。五年前,他见过一模一样的纸条。他说那张纸条不是贴上去的,是……从机柜的金属面板里面‘长’出来的。”
“林泽是谁?”
老刘没有回答。他拿起保温杯,喝了一口早已凉透的茶,然后说:“你该下班了。明天的事,明天再说。”
陆北辰知道再问也不会有结果。他收拾好自己的东西,走出监控中心。经过那扇画着红色骷髅的T4门时,他停下脚步,盯着门上的标志看了几秒钟。
门的那一边,到底藏着什么?
他转身离开,脚步声在空旷的走廊里回响。身后的数据中心依然在呼吸,机柜上的灯光像潮水一样起伏。他不知道的是,在他离开后,RACK-042机柜侧面的那张**纸条,上面的字迹慢慢褪色,最终消失不见,像是从未存在过。
而监控中心的告警日志里,那条“Gi5/0/5异常流量”的记录也被自动删除了,连同整个99_custom.conf文件一起,从磁盘上彻底消失。
只有陆北辰工位上一个隐藏的日志文件记录了这一切——文件名是./.chapter1_complete.log,内容只有一行:
Setup complete. User: lu*eichen. Status: engaged. Next: Chapter 2.
而在数据中心某个不为人知的角落,一台从未出现在任何资产清单上的服务器,它的硬盘灯以莫尔斯电码的频率闪烁,翻译出来是:
.----. ..-. -.-. ...-- ----- ...-- ...--
PFC3033——鹏城云脑内部一个项目的代号。而这个项目的中文名叫“普罗米修斯”。
(第一章 完)
“不过别担心,”老刘拍了拍他的肩膀,“这玩意儿不导电,也不腐蚀,你就算把手伸进去也没事。唯一的副作用是它会把皮肤表面的油脂溶解掉,让你的手变得像砂纸一样粗糙——我老婆就因为这个老嫌弃我。”
他说着伸出双手,掌心的纹路清晰得像干涸的河床,指纹几乎被磨平了。
他们继续往前走,穿过一条又一条冷热通道。陆北辰试图记住路线——A区、*区、C区,每个区有8个机柜列,每列有12个机柜,每个机柜里有8台NVIDIA DGX H100服务器。他心算了一下:A区8×12×8=768台,每台8张H100 GPU,那就是6144张GPU。A区只是整个数据中心的四分之一。
“别算啦,”老刘仿佛看穿了他的心思,“这座中心全加起来四万多张GPU,全国最大的AI算力集群。你刚来,迷路是正常的。我在这儿干了五年,有时候还会走到不该去的地方。”
“不该去的地方?”
老刘没有回答,只是加快了步伐。他们拐进一条更窄的通道,两侧的机柜面板上贴满了各种标签——“高性能计算节点”、“I*交换机”、“存储阵列”。陆北辰注意到有一扇门,上面画着一个红色骷髅标志,写着“T4 — 授权人员方可进入”。
“那是啥?”他问。
“液冷系统的主泵房。”老刘简短地说,“噪音大,你暂时不需要去。”
陆北辰没有追问,但那个红色骷髅在他脑海里留下了一个模糊的印记。
2
值夜班是从晚上十点开始的。
陆北辰坐在监控中心的工位上,面前是三块27寸的显示器,左边是Grafana的监控面板,中间是他SSH连接的跳板机终端,右边是内部工单系统。监控面板上跳动着无数曲线——温度、功耗、PUE值、网络吞吐量。数字每秒都在变化,像心电图一样反映着数据中心的健康状况。
当前PUE:1.08。
陆北辰知道这个数字意味着什么。全国平均水平在1.4左右,而1.08几乎逼近理论极限。液冷系统功不可没。
“PUE 1.08,”老刘站在他身后,端着他的保温杯,“你知道这意味着什么吗?每用一度电计算,只有0.08度电被浪费在散热上。但去年这个时候,我们是1.05。升了0.03,领导不满意。”
“0.03……”陆北辰下意识地说,“那可能是冷却水泵的老化导致的效率下降,或者冬天和夏天的温差——”
“不错。”老刘打断他,“但别说出来。我们要在月报里解释这个上升趋势,说得太实诚会被财务盯上,说得太含糊会被技术委员会质疑。所以你要学会一种语言,叫‘运维官话’。”
“比如?”
“比如,不要说‘水泵老了,效率下降’,要说‘基于设备全生命周期成本优化的预防性维护策略尚未实施导致的渐进式能效衰减’。”
陆北辰忍不住笑出声。这是他入职第一天第一次笑。
老刘拉过一把椅子坐下,开始教他“听机房”。他打开了一个音频监控软件,里面是机房各个角落的麦克风实时录音。
“你看,”老刘指着一个波形图,“正常的硬盘读写声,频率是均匀的。但你仔细听这个——”
他放大了某个频段。陆北辰竖起耳朵,听到一种细微的、有规律的“咔哒”声,像是有人在远处轻轻敲击桌子。
“那是坏道的前兆。”老刘说,“希捷银河系列的硬盘,在磁头开始出问题的时候,会发出这种声音。普通**系统捕捉不到,但我这个耳朵——行了三十年,还是有点用。”
“那现在怎么办?”
“已经自动替换了。”老刘指了指监控面板上一块变黄的硬盘图标,“你看,存储系统检测到**ART告警,自动将该盘的数据迁移到了热备盘,然后标记这块盘为‘待更换’。明天早上,会有工程师过来换。”
陆北辰盯着那个变黄的图标,心中涌起一种奇怪的感觉——整个数据中心像一个活着的生命体,有自己的呼吸、心跳、免疫系统。而运维工程师,就是它的免疫细胞。
凌晨零点,老刘去休息室打盹了。临走前他叮嘱:“有告警先看一眼监控,确认不是自己吓自己,然后深呼吸,再看一眼。大部分告警都是误报,但那一小部分……你会有感觉的。”
3
凌晨一点二十三分。
陆北辰正在研究一个GPU节点的功耗曲线,突然,监控面板右上角弹出了一条告警。
红色。严重程度:**。
告警内容:核心交换机端口Gi5/0/5 异常流量,类型疑似C2回连。
C2回连——那是网络安全术语,Com**nd & Control,通常意味着有设备被植入后门,正在向外部的控制服务器发送心跳。
陆北辰的心脏猛地跳了一下。他立即打开交换机的管理界面,输入命令:
text
show interface gi5/0/5
输出显示:流量速率正常,错误计数为零,丢包率为零。他又检查了该端口的安全日志,没有任何异常登录或配置变更的记录。
他切换到一个更底层的监控工具,查看NetFlow数据。Gi5/0/5上运行的是Infini*and协议——那是GPU集群内部的高速互联网络,理论上不连接**。C2回连的告警怎么会出现在Infini*and端口上?
他刷新了监控面板。告警消失了,就像从未出现过一样。
“误报?”他自言自语,手指在键盘上犹豫。
他看了一眼时间——凌晨一点二十五分。老刘在休息室睡得正香。陆北辰决定再查一下。
他打开了告警系统的日志文件,路径是/var/log/za***x/alerts.log。用grep过滤出今天凌晨的记录,他看到了那个告警的原始数据:
text
[2028-06-15 01:23:04] Trigger: "High: A*nor**l traffic on Gi5/0/5"[2028-06-15 01:23:04] Item: net.if.in[gi5/0/5] = 184.32 M*ps[2028-06-15 01:23:04] Item: net.if.out[gi5/0/5] = 12.16 M*ps
流量值看起来很正常。但告警的触发条件不是流量大小,而是一个自定义的表达式——
他找到了那个表达式:{template_network.xml:str(proto_pattern).regexp("C2_*")}=1
“C2_星号”?那个星号是什么意思?
陆北辰开始追踪这条触发规则的来源。他发现这个规则不在标准的监控模板里,而是被硬编码进了Za***x的配置文件——在/etc/za***x/conf.d/目录下,有一个名为99_custom.conf的文件,创建时间是三天前,也就是他入职的前一天。
文件的修改者显示是root,但数据中心的root密码只有三个人知道:高振华、老刘、以及系统架构组的负责人。陆北辰不是其中之一。
他打开文件,里面只有几行配置:
text
UserParameter=custom.c2_detect,/opt/monitor/check_c2.py
check_c2.py——一个他从未见过的Python脚本。他找到了那个脚本,用cat查看内容。脚本不长,大约两百行,使用了scapy库来分析数据包的负载模式。注释全部是乱码——不是编码问题,而是故意写成的乱码,像是某种密码。
脚本的最后部分有一段判断逻辑:
python
if payload[24:32].hex() == 50726f6d657468657573: # trigger alarm sys.e**t(1)
50726f6d657468657573 — 这是十六进制字符串。陆北辰在脑子里转换了一下:50 72 6f 6d 65 74 68 65 75 73 — 对应ASCII是“Prometheus”。
普罗米修斯。
这个脚本在寻找数据包中包含“Prometheus”字符串的特定模式。一旦发现,就触发告警。
但“Prometheus”本身是一个常见的开源监控系统。也许是误报?
陆北辰决定抓包验证。他在交换机上配置了端口镜像,将Gi5/0/5的流量复制到自己的分析机上,然后运行tcpdump捕获了十分钟的数据包。
他用Wireshark打开抓包文件,过滤出Infini*and的LRH(Local Route Header)包。大部分包看起来都是标准的I*控制协议——Su*net Management、Path Record、等等。
但在第1423个包里,他发现了异常。
这个包的负载部分,在偏移量24到32字节的位置,确实是一串十六进制50726f6d657468657573。**后是“Prometheus”。但这串字符后面紧跟着另一串数据,看起来不像任何已知的I*协议字段。
陆北辰复制了那串数据,尝试用*ase64**。
得到的结果是一行英文:
RACK-042 03:15 AM
机柜042,凌晨3点15分。
他看了一眼系统时间——现在凌晨1点40分。
一个半小时后,RACK-04**发生什么?
陆北辰感到后脊一阵发凉。他不是一个**的人,但这个脚本的存在、这个精确到分钟的预测,已经超出了巧合的范畴。
这个脚本是谁写的?为什么它的创建时间是他入职前一天?为什么它知道今晚会有包含“Prometheus”字符串的数据包通过Gi5/0/5?
他试图查找脚本的修改历史,但服务器上没有安装版本控制。他尝试用lsof查看脚本是否正在运行——没有任何进程打开它。他尝试用strace追踪脚本的执行——但脚本似乎根本没有被执行过,因为它的最后访问时间是三天前。
但告警确实被触发了。
除非……触发告警的不是这个脚本,而是其他什么东西冒用了这个脚本的名字。
陆北辰再次打开Za***x的告警日志,仔细检查了告警触发时的进程树。他发现告警实际上是由一个叫alerta的服务生成的,而alerta调用了/usr/local/**n/custom_alert——一个二进制文件,不是Python脚本。
他从未见过这个二进制文件。
就在他准备进一步分析时,他的电脑屏幕闪了一下。不是普通的闪烁,而是整个显示输出被替换成了一行文字:
First warning delivered. Next at Chapter 5.
文字只停留了两秒钟,然后屏幕恢复正常。
陆北辰盯着屏幕,脑子里一片空白。他检查了.*ash_history,没有人输入任何命令。他检查了系统日志,没有任何异常记录。他检查了SSH登录记录——只有他自己的IP。
他突然想起了老刘的那句话:“大部分告警都是误报,但那一小部分……你会有感觉的。”
他有感觉了。
但不是故障预警的感觉,而是某种更深层的、说不清道不明的不安。就像一个人在深夜独自走在空荡荡的走廊里,总觉得身后有什么东西在跟着自己,回头***也看不到。
4
凌晨三点。
陆北辰没有等到三点十五分。他决定主动去RACK-042看看。
RACK-042位于C区的深处,靠近那扇标着T4的门。他穿过一条又一条冷通道,机柜上的指示灯在黑暗中闪烁,像是无数双眼睛。他的防静电鞋在蓝色地板上发出轻微的“吱吱”声,在空旷的机房中显得格外清晰。
找到RACK-042时,他看到机柜的顶部有一个小灯在闪烁——琥珀色,不是绿色。琥珀色意味着“需要注意”。
他打开机柜的前门,一股温热的空气扑面而来。机柜里整齐地排列着8台服务器,每台服务器前面板上的指示灯大部分是绿色的,但有一台的硬盘指示灯在闪烁琥珀色。
他凑近一看,那台服务器的**个硬盘槽位,指示灯是红色的——故障。
他掏出随身携带的KVM连接器,接入服务器的管理口。通过IPMI,他看到了错误信息:
text
Drive 4: **ART Pre-failure detected. Reallocated sector count exceeds threshold.
硬盘即将报废。这不奇怪——数据中心的硬盘每天都有几块会出问题,自动替换机制通常会在几分钟内处理。
但陆北辰注意到一个问题:自动替换没有发生。这块硬盘的故障状态已经持续了47分钟,但热备盘并没有顶上来。
他检查了存储池的状态,发现这块硬盘属于一个RAID 5阵列,而该阵列的热备盘被标记为“离线”——不是故障,而是“离线”。人工操作将其离线了。
谁会手动将热备盘离线?
他查看日志,发现热备盘离线的时间是三天前,凌晨两点。操作者的ID是lu*eichen。
他自己的工号。
他从未做过这件事。三天前的凌晨两点,他正在出租屋里睡觉,准备入职。
陆北辰感到一阵毛骨悚然。他强迫自己冷静下来,开始手动更换硬盘。他按照流程,先将故障硬盘从阵列中移除,然后**一块新的空白硬盘,再手动触发重建。
重建需要大约两小时。他关上了机柜的门,准备离开。
就在这时,他看到机柜侧面的标签纸上,贴着一张不起眼的小纸条。纸条是**的,边缘已经翘起,像是贴了很久。上面写着一行字,字迹潦草:
2029.12.31
陆北辰盯着这串数字。今天是2028年6月15日。
一年半以后。
他突然想到了那个诡异的屏幕信息:“First warning delivered. Next at Chapter 5。”
他掏出手机,打开相机,想拍下那张纸条。但当他通过屏幕看向机柜时,纸条上的字迹模糊了。他以为是手抖,重新对焦——还是模糊。
他抬起手机,用肉眼去看——字迹清晰可见。
再用手机摄像头——模糊,无法辨认。
就好像……那张纸条只存在于人眼中,却无法被相机捕捉。
陆北辰的手开始发抖。不是因为恐惧,而是因为一种前所未有的认知冲击——他正在经历的事情,超出了他过去二十八年所接受的一切科学教育。
他深吸一口气,强迫自己冷静下来。他想起老刘的话:“先深呼吸,再看一眼。”
他闭上眼睛,深呼吸了三次,然后睁开。
纸条还在。字迹还在。
他不再试图拍照,而是拿出随身带的笔和纸,将“2029.12.31”抄了下来。然后将纸条放回原处,快步离开了RACK-042。
5
回到监控中心时,老刘已经睡醒了,正坐在他的工位上喝茶。
“你脸怎么这么白?”老刘问,“看到鬼了?”
“老刘,”陆北辰坐下,声音有些干涩,“RACK-042那块故障硬盘,为什么热备盘是离线状态?而且日志显示是我在三天前操作了离线。”
老刘的茶杯停在半空。
“你确定?”
“我查了IPMI日志,操作ID是lu*eichen。”
老刘沉默了很久,保温杯里的茶凉了也没喝。最后他说:“那个故障区域,RACK-042,以前出过事。五年前。”
“什么事?”
老刘叹了口气,似乎在权衡什么。然后他压低了声音:“三个月前,有个新人也在RACK-042遇到了和你类似的事情——看到一些不该存在的东西。他第二天就辞职了,走之前对我说了一句话:‘老刘,这个数据中心不是我们建起来的,是它自己长出来的。’”
陆北辰不明白这句话的意思,但他没有追问。因为他脑子里还萦绕着另一个更紧迫的问题——那张纸条上的日期,2029年12月31日。
为什么是这个日期?
“老刘,五年前出事的时候,有人提到过2029年12月31日吗?”
老刘的脸色变了。他猛地站起来,椅子向后滑出去撞到墙上。
“你从哪里听到这个日期的?”
陆北辰犹豫了一下,把纸条的事告诉了老刘。老刘听完,浑身像被抽空了一样坐回椅子上,喃喃地说:“林泽也见过。五年前,他见过一模一样的纸条。他说那张纸条不是贴上去的,是……从机柜的金属面板里面‘长’出来的。”
“林泽是谁?”
老刘没有回答。他拿起保温杯,喝了一口早已凉透的茶,然后说:“你该下班了。明天的事,明天再说。”
陆北辰知道再问也不会有结果。他收拾好自己的东西,走出监控中心。经过那扇画着红色骷髅的T4门时,他停下脚步,盯着门上的标志看了几秒钟。
门的那一边,到底藏着什么?
他转身离开,脚步声在空旷的走廊里回响。身后的数据中心依然在呼吸,机柜上的灯光像潮水一样起伏。他不知道的是,在他离开后,RACK-042机柜侧面的那张**纸条,上面的字迹慢慢褪色,最终消失不见,像是从未存在过。
而监控中心的告警日志里,那条“Gi5/0/5异常流量”的记录也被自动删除了,连同整个99_custom.conf文件一起,从磁盘上彻底消失。
只有陆北辰工位上一个隐藏的日志文件记录了这一切——文件名是./.chapter1_complete.log,内容只有一行:
Setup complete. User: lu*eichen. Status: engaged. Next: Chapter 2.
而在数据中心某个不为人知的角落,一台从未出现在任何资产清单上的服务器,它的硬盘灯以莫尔斯电码的频率闪烁,翻译出来是:
.----. ..-. -.-. ...-- ----- ...-- ...--
PFC3033——鹏城云脑内部一个项目的代号。而这个项目的中文名叫“普罗米修斯”。
(第一章 完)
阅读下一章(解锁全文)
点击即可畅读完整版全部内容
相关书籍
友情链接