有家公司的运维主管花了二十万买了套自动化平台,用了八个月,团队还是手动敲命令。他跑来问我:“工具买了,培训也做了,为什么就是推不动?”
聊了半小时我就发现问题所在:他们连标准操作流程都没梳理清楚,每个运维人员的操作习惯都不一样。这就像你没画好图纸就开始买建材,砖头水泥堆了一院子,房子还是盖不起来。
第一件事:哪些操作值得自动化
别试图一步到位把所有运维工作都自动化。先做一张操作清单,按“频率×风险”两个维度打分。高频低风险的操作优先自动化,比如日志清理、备份检查、磁盘空间巡检。低频高风险的操作最后再做,比如数据库主从切换、内核升级。
一个判断标准:如果你每周都要手动做三次以上某个操作,而且每次步骤都差不多,那就该自动化了。反过来,一年才做一次的操作,手动做反而更安全,因为自动化的脚本本身也需要维护和测试。
第二件事:流程先标准化再自动化
自动化的前提是标准化。如果三个人部署同一个应用用了三种不同的路径、三种不同的配置方式,你写出来的自动化脚本根本跑不起来。先把操作流程统一:统一的目录结构、统一的用户权限、统一的配置文件格式。这一步可能要花一两个月,但磨刀不误砍柴工。
具体做法是写一份操作SOP文档,把每个步骤的命令、参数、预期输出都写清楚。然后让不同的人按文档操作,看结果是否一致。只有人和人之间的操作能对齐了,机器才能接管。
第三件事:必须有回滚机制
自动化最大的风险是“一键搞砸所有服务器”。一个写错的脚本在十台机器上同时执行,比手动操作一台台出错严重十倍。所以每个自动化任务都必须配套回滚方案:执行前自动快照或备份,执行失败时自动触发回滚。
用Ansible的话,利用其幂等性特性——同一个playbook执行多次结果一致,这本身就能防止重复执行导致的问题。但对于有破坏性的操作,比如删数据、改防火墙规则,一定要加--check参数先做dry run,确认变更内容符合预期再正式执行。
工具只是放大器,流程才是地基。地基不稳,工具越强大翻车越惨。