前言 三年运维,被叫醒422次。这个数字不是抱怨,是一个数据集。
每次被叫醒,我都会记录:什么告警、什么原因、处理了多久、怎么处理的、有没有更好的办法。
422条记录之后,我总结出了一些自动运维的设计原则。后来这些原则变成了ServerGuard这个工具。这篇文章分享这些原则。
原则一:能自动处理的,绝不等人 422次告警里,有80%是同一类问题反复出现:
磁盘满了 → 清旧日志
内存泄漏 → 重启进程
证书过期 → 续期
SSH暴破 → 封IP
这些事情,不需要人的判断力。 需要的是有人(或什么东西)在正确的时间执行正确的操作。
设计结论: 把“发现”和“修复”之间的时间差压到零。
原则二:安全约束比修复能力更重要 我写过一个自动删日志的脚本,把正在写入的日志删了,程序直接崩了。
我写过一个自动重启服务的脚本,nginx配置有错,脚本重启了20次,系统负载拉满。
教训:自动修复的能力不是瓶颈,自动修复的安全约束才是。
设计结论: 每次操作前,必须过安全检查链。通不过就不执行。
原则三:确定性规则 > 黑盒AI 有人问我:为什么不用AI来做决策?
因为自动运维场景下,可解释性比智能更重要。
如果系统自动杀了一个进程,你问它为什么,它说“我判断它可能有问题”——这是不可接受的。
确定性规则的好处:每一步操作都能追溯到具体的判断条件。出了问题,你能复盘,能改规则。
设计结论: 用规则和统计,不用黑盒模型。
原则四:告警要收敛,但数据不能丢 告警刷屏的后果是什么?用户把通知关了。
关掉通知的那一刻,等于没有任何监控。
但收敛不等于丢弃。所有原始告警一条不少全部落库,面板随时可查。
设计结论: 通知可以少发,数据不能少存。
原则五:先跑观察模式,再开自动修复 初次部署默认只观察、只告警,不动手。
跑1-2天,确认告警合理、误报率可接受,再关闭学习模式。
这是信任的建立过程——你得先证明你不会乱来,然后才被允许动手。
设计结论: 学习模式不是可选项,是默认行为。
这些原则的落地 后来我把这些原则写成了一套代码,叫ServerGuard。16MB,零依赖,Apache 2.0开源。
自动修复:磁盘清理、内存重启、证书续期、SSH封禁、服务重启、木马查杀
安全约束:45+白名单、11项检查链、熔断器、Kill预算、重启预检、级联防护
告警收敛:抖动抑制 + 同源合并,每天47条→8条
智能分析:基线异常检测(168时段学习)、磁盘写满预测(线性回归)、根因分析快照
多机管控:Hub统一纳管,WebSocket注册/心跳/告警上报
项目地址:
GitHub:suoten/ServerGuard
Gitee:suoten/ServerGuard
如果你也在做自动运维相关的事情,欢迎交流。评论区或者GitHub Issues都行。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70050062/viewspace-3183783/ ,如需转载,请注明出处,否则将追究法律责任。