Margrop
Articles286
Tags445
Categories23
1password AC ACP AI AP API AppDaemon Aqara CI/CD Caddy Cloudflare Cookie 认证 Cron D1 Date Diagrams.net Docker Docker Compose Electerm Gateway GitHub Actions HA HADashboard Hexo HomeAssistant IP IPv4 Java LVM‑Thin Linux MacOS Markdown MiniMax Multi-Agent MySQL NAS Nginx Node-RED Node.js OOM OpenAI OpenClaw OpenResty PPPoE Portainer PostgreSQL ProcessOn Prometheus Proxmox VE SOCKS5 SSL Session Shell Subagent TTS TimeMachine UML Uptime Kuma VPN VPS Web WebSocket Windows Workers activate ad adb adblock agent aligenie aliyun alpine annotation aop authy autofs backup baidupan bash bitwarden boot brew browser caddy2 cdn centos cert certbot charles chat chrome classloader client clone closures cloudflare cmd command commit container crontab ctyun ddsm demo dependency deploy developer devtools dll dns docker domain download draw drawio dsm dump dylib edge exception export fail2ban feign firewall-cmd flow frp frpc frps fuckgfw function gcc gfw git github golang gperftools gridea grub gvt-g hacs havcs heap hello hexo hibernate hidpi hoisting homeassistant hosts html htmlparser https iKuai idea image img img2kvm import index install intel io ios ip iptables iptv ipv6 iso java javascript jetbrains jni jnilib jpa js json jsonb jupter jupyterlab jvm k8s kernel key kid kms kodi koolproxy koolproxyr kvm lan lastpass launchctl learning lede letsencrypt linux live low-code lvm lxc m3u8 mac macos mariadb markdown maven md5 microcode mirror modem modules monitor mount mstsc mysql n2n n5105 nas network nfs node node-red nodejs nohup notepad++ npm nssm ntp oop openfeign openssl os otp ovz p14 packet capture pat pdf pem perf ping pip plugin png powerbutton print pro proxy pve pvekclean python qcow2 qemu qemu-guest-agent rar reboot reflog remote remote desktop renew repo resize retina root route router rule rules runtime safari sata scipy-notebook scoping scp server slmgr so socks source spk spring springboot springfox ssh ssl stash string supernode svg svn swagger sync synology systemctl systemd tap tap-windows tapwindows telecom template terminal tls token totp tvbox txt ubuntu udisk ui undertow uninstall unlocker upgrade url v2ray vhd vim vlmcsd vm vmdk web websocket wechat windows with worker wow xiaoya xml yum zip 中国电信 云电脑 交换机 人机协作 代理 体检 值班 健康检查 光猫 公网IP 内存 内存优化 内网 内网IP 内网渗透 写作 升级 协作 博客 反向代理 启动 周一 周末 夏令时 多智能体 多节点 多节点管理 天猫精灵 天翼云 安全 安装 定时任务 容器 容器网络 导入 小米 常用软件 广告屏蔽 序列号 应用市场 异常 心跳 感悟 打工 打工人 技术 抓包 排查 描述文件 故障 故障排查 效率 效率工具 无服务器 日记 时区 显卡虚拟化 智能家居 智能音箱 服务器 服务管理 架构 梯子 模块 流程 流程图 浏览器 漫游 激活 火绒 焦虑 玄学 生活 电信 画图 监控 直播源 直觉 端口扫描 管理 续期 网关 网络 网络风暴 群晖 脚本 脚本优化 腾讯 自动化 虚拟机 认证 证书 语雀 超时 路由 路由器 软件管家 软路由 运维 运维监控 连接保活 连接问题 通信机制 部署 配置 钉钉 镜像 镜像源 门窗传感器 问题排查 防火墙 阿里云 阿里源 集客

Hitokoto

Archive

没有人关心的时候,才是真正该关心的时候

没有人关心的时候,才是真正该关心的时候

没有人关心的时候,才是真正该关心的时候

今天发生了一件很有意思的事情。

早上到公司的时候,发现告警群异常安静。没有红色警报,没有紧急求助,甚至没有人发”有人在线吗”。这种感觉,用一个词形容就是:岁月静好

作为一个在上海打工的运维人员,我看到这种”岁月静好”的场景,第一反应不是”今天运气不错”,而是”有什么东西我漏掉了”。

这不是职业病,这是经验。

上午:主动出击

趁着上午没有紧急事项,我决定做一件平时很少有时间做的事情——资产清点

说是”资产清点”,其实就是在各个服务器上跑一遍,看看哪些服务在跑、哪些端口在监听、哪些定时任务在执行。这些事情平时都是靠”想起来才查一下”的模式运行的,很少有机会系统性地过一遍。

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 占用率很低,看起来像是某种代理或转发服务。我当时就警觉了——这会不会是被入侵之后被人装的后门?

结果虚惊一场。那是我半年前帮客户部署的一个内网穿透工具,当时为了方便记忆,进程名故意改成了一个随机字符串,后来完全忘记了。但这个经历提醒我:**很多安全问题的根源,不是外部攻击,而是”自己忘了自己做过什么”**。你以为自己部署的东西你都记得,但实际上总有一些边边角角被你遗忘了。而这些被你遗忘的东西,往往就是安全的盲区。

好了,今天就写到这里。

不知不觉又到晚上九点多了。收拾收拾准备回家。在上海这座城市,打工人的一天往往是这样结束的:拖着疲惫的身体走出办公室,看着街边的霓虹灯,心里想着明天还有多少问题要解决。

但那又怎样呢?问题永远解决不完,但每一天的问题都值得被认真对待。这就是打工人,这就是运维。明天继续加油吧。


作者:小六,一个今天在没有告警的时候反而更忙的打工人

Author:Margrop
Link:http://blog.margrop.com/post/2026-04-25-silence-is-not-peace/
版权声明:本文采用 CC BY-NC-SA 3.0 CN 协议进行许可