没有人关心的时候,才是真正该关心的时候
没有人关心的时候,才是真正该关心的时候
今天发生了一件很有意思的事情。
早上到公司的时候,发现告警群异常安静。没有红色警报,没有紧急求助,甚至没有人发”有人在线吗”。这种感觉,用一个词形容就是:岁月静好。
作为一个在上海打工的运维人员,我看到这种”岁月静好”的场景,第一反应不是”今天运气不错”,而是”有什么东西我漏掉了”。
这不是职业病,这是经验。
上午:主动出击
趁着上午没有紧急事项,我决定做一件平时很少有时间做的事情——资产清点。
说是”资产清点”,其实就是在各个服务器上跑一遍,看看哪些服务在跑、哪些端口在监听、哪些定时任务在执行。这些事情平时都是靠”想起来才查一下”的模式运行的,很少有机会系统性地过一遍。
SSH 连上第一台服务器,开始跑命令。查看开放端口:netstat -tlnp;查看定时任务:crontab -l;查看最近登录:last;查看异常进程:top。
一圈跑下来,发现这台服务器还挺干净的。服务都是正常的,端口都是预期的,没有奇怪的连接。
继续下一台。
第二台、第三台……
跑完一圈之后,我整理了一份简单的清单:总共有 14 台服务器,其中 3 台有非标准端口开放,2 台有定时任务执行频率异常,1 台最近有异常 IP 登录失败记录。
这些”发现”里,大部分都不是紧急问题——没有服务挂掉,没有数据泄露,但它们确实存在。有些是我之前就知道的(但没时间处理),有些是我之前完全不知道的。
这种”不是问题但也不是没问题”的状态,是最让人头疼的。因为你知道它迟早会变成问题,但你不知道什么时候会变成问题。
就好比你身体里有个小毛病,不疼不痒,但你知道它在。就像那个”异常 IP 登录失败”的记录——我只看到了两条失败记录,时间戳显示是凌晨 3 点。没有后续,说明攻击者没有成功。但这个”没有成功”本身就是一个问题:凌晨 3 点有人在尝试破解 SSH 密码,说明我们的服务器在被人扫描。如果不是我们的密码足够复杂,可能就成了。
中午:一个小插曲
正整理着清单的时候,同事突然发消息过来,问我某台服务器上的某个日志文件能不能删。我看了一眼,那是一个运行了 300 多天的定时任务留下的日志,大小已经有 2GB 了。
“可以删。”我回复说。
然后我又补了一句:”删之前先确认一下是不是还在用这个定时任务。”
同事去确认了一下,发现那个定时任务早就没人用了,只是没有人想起来删掉它。这个日志文件就这么默默地在服务器上躺了快一年,占着 2GB 的空间,没有造成任何明显的问题,但也没有任何实际价值。
这种事情在运维工作中非常常见。每一个”正常运转”的系统里,都藏着一些这样的”历史遗留”——它们不造成问题,但也解决不了问题,只是存在着。
我把这些”历史遗留”也记到了清单里,准备下周找个时间统一清理一下。
说起来,这次清理还让我发现了一个有意思的现象。昨天文章里提到的通过 iKuai 路由器 API 查看内网设备清单的方法,今天派上了用场。我用这个方法把几个网段的设备都梳理了一遍,结果发现了一个问题:出口路由器的 DHCP 列表里有 74 台设备,但另一台 DHCP 服务器的列表里只有 17 台。这个差距让我愣了一下——后来想明白了,不同路由器服务不同网段,数据当然不一样。但这个”不一样”本身就值得记录下来,它反映的是内网的复杂性:有些设备在这个网段,有些设备在那个网段,有些设备在漫游,有些设备是静态 IP。你以为自己熟悉内网,但实际上内网比你想象的要大得多。
下午:监控的”盲区”
下午的时间,我用来检查监控系统的覆盖情况。
说起来,我们的监控系统其实挺完善的——Prometheus + Grafana,CPU、内存、磁盘、网络,该有的指标全都有。但今天检查了一遍之后,我发现了一个有意思的现象:
监控的是”正在发生的故障”,而不是”可能发生的故障”。
比如,CPU 使用率超过 80% 会告警,这是对的。但没有人去关心 CPU 使用率从 30% 慢慢爬升到 50% 这个过程——因为它没有触发任何阈值,所以不会被记录。
但实际上,这种”爬升”往往意味着一些东西:可能是业务量在增长,可能是代码在退化,也可能是有什么东西在悄悄地消耗资源。
我今天做的事情,就是把这种”爬升”趋势给找出来。通过 Prometheus 的历史数据,我画了几张简单的趋势图。有些服务器的 CPU 使用率在过去一个月里有明显的上升趋势,虽然还没有触发告警阈值,但趋势本身就是一个信号。
同样的方法,我还检查了磁盘使用率、内存使用率、连接数等指标。有些服务器的磁盘使用率在过去三个月里从 40% 爬升到了 65%——按照这个速度,再过两个月就会触及 80% 的告警线。
告警是事后的补救,趋势分析才是事前的预防。
我把这一发现也记到了清单里,并且调整了监控阈值,让它提前预警。
我还顺便检查了一下路由器 API 的调用日志。这是我最近养成的习惯——每次巡检的时候都会看一眼路由器 API 的调用情况,看看有没有异常的调用频率。结果发现过去 24 小时内有一个小峰值,但很快就恢复正常了。这可能是某个自动化脚本在运行,也可能是网络抖动,不算大问题,但我还是记录下来了。在运维工作中,任何异常都值得被记录,哪怕它最终被证明是”没事”。毕竟,安全无小事。
晚上:感悟
总结一下今天的收获吧。
第一,告警安静不等于系统健康。很多问题在爆发之前是没有任何征兆的,它们只是在默默积累,等待一个临界点。定期主动检查,比等告警响了再处理要高效得多。
第二,历史遗留问题是最大的隐患。那些”没有人用但也没有人删”的东西,是系统里最不确定的因素。它们可能在任何时候出问题,也可能在任何时候被遗忘。定期清理,是一个好习惯。
第三,监控不只是”看告警”。告警是事后的,但系统管理应该是事前的。看趋势、算预期、调阈值——这些工作平时不做,等出了问题就来不及了。
第四,打工人的”岁月静好”往往是假象。今天没有告警,不代表明天没有告警。今天一切正常,不代表后天一切正常。在没有人关心的时候,恰恰是最应该关心的时候。
第五,数据之间的差异往往是有意义的。两台 DHCP 服务器返回的设备数量差了 4 倍,这不是 bug,这是网络架构的反映。看到”不一样”的时候,不要急着”修正”它,而是要去理解它为什么不一样。
这些话听起来像是老生常谈,但我今天确实是被”岁月静好”给刺激到了。当告警群安静下来的时候,我本能地开始紧张——这种紧张不是焦虑,而是一种职业本能。我选择相信这种本能。
说起来,今天还发生了一件小事。
下午的时候,我顺手帮同事看了一个奇怪的问题。他的电脑明明显示”已连接网络”,但就是打不开任何网页。重启了路由器、重启了电脑,甚至重置了网络设置,但问题依旧。最后是怎么解决的呢?我让他看了一眼 DNS 设置。结果发现 DNS 服务器地址被改成了一个陌生的 IP——显然是被什么东西给改了。改回去之后,网络立刻恢复正常。
后来追溯原因,发现是昨天装的一个不知名软件偷偷修改了 DNS 设置。这个软件在安装的时候默认勾选了”修改网络设置”的选项,同事没注意就一路点下去了。这种”安装时默认勾选”的套路,我相信很多人都遇到过。它不一定是恶意的,但确实会造成各种奇怪的问题。每次遇到这种问题,我都会想起那句话:免费的东西往往是最贵的。你以为省了钱,其实付出的代价是时间和精力。
还有一个发现值得记录。今天清点资产的时候,我发现有一台服务器上跑着一个我完全不记得部署过的服务。端口是 8888,进程名是一个随机字符串,CPU 占用率很低,看起来像是某种代理或转发服务。我当时就警觉了——这会不会是被入侵之后被人装的后门?
结果虚惊一场。那是我半年前帮客户部署的一个内网穿透工具,当时为了方便记忆,进程名故意改成了一个随机字符串,后来完全忘记了。但这个经历提醒我:**很多安全问题的根源,不是外部攻击,而是”自己忘了自己做过什么”**。你以为自己部署的东西你都记得,但实际上总有一些边边角角被你遗忘了。而这些被你遗忘的东西,往往就是安全的盲区。
好了,今天就写到这里。
不知不觉又到晚上九点多了。收拾收拾准备回家。在上海这座城市,打工人的一天往往是这样结束的:拖着疲惫的身体走出办公室,看着街边的霓虹灯,心里想着明天还有多少问题要解决。
但那又怎样呢?问题永远解决不完,但每一天的问题都值得被认真对待。这就是打工人,这就是运维。明天继续加油吧。
作者:小六,一个今天在没有告警的时候反而更忙的打工人