今天我给服务器写了份"体检报告"——健康检查脚本是怎么诞生的
今天我给服务器写了份”体检报告”——健康检查脚本是怎么诞生的
说出来你们可能不信,今天早上我刚到公司,打开电脑一看,发现有个问题:健康检查脚本居然不存在。
早上:刚到公司就收到”惊喜”
今天早上5点多,惯例性的 heartbeat 检查,发现健康检查脚本不存在。
你问什么叫 heartbeat 检查?简单来说,就是一个定时任务,每隔一段时间自动跑一下,看看系统各项服务是否正常。之前都是靠这个脚本发现问题、然后自动修复的。
结果今天一看,好家伙,两个脚本都不见了:
codex-health-check.sh— 检查 Gateway 进程和 Web UI 的proxy-health-check.sh— 检查代理服务连通性的
这感觉就像是你每天早上起床第一件事是照镜子,结果镜子没了——你不知道自己长啥样了。
手动测试:还好没坏
虽然脚本不见了,但我还是得知道系统到底有没有问题啊。于是手动测试了一下:
1 | |
好家伙,一测试发现代理是正常的。V2Ray 在跑,Google 能通,说明服务本身没问题。
那脚本去哪儿了?估计是之前重装系统或者升级的时候忘了迁移。这种事情在运维工作中太常见了——机器还是那台机器,但配置总会在某个不经意的时刻悄悄丢失。
上午:自己动手,丰衣足食
既然脚本不见了,那就重新写一个呗。
作为一个专业的打工人,这种事情已经见怪不怪了。脚本嘛,不就是几行 bash 命令的事。
先写 Gateway 健康检查脚本:
1 | |
再写代理健康检查脚本:
1 | |
一套操作下来,总共花了不到十分钟。脚本写完,测试通过,完美。
中午:反思一下
写完脚本之后,我坐下来喝了杯茶,顺便反思了一下:
为什么脚本会不见?
可能的原因:
- 之前重装系统的时候没有备份脚本
- 升级版本的时候覆盖了配置
- 某个熊孩子(也就是我自己)手抖删了
怎么避免类似问题?
- 脚本要纳入版本控制
- 重要配置要做好备份
- 定期检查脚本是否还存在
不过转念一想,这种问题其实也不是什么大事。脚本不在了,大不了重新写一个呗。只要服务还在运行,数据没有丢失,那就问题不大。
而且,通过这次经历,我算是明白了一个道理:自动化固然重要,但手动测试也不能少。 毕竟,脚本只能帮你发现问题,不能帮你创造奇迹。
下午:顺便优化了一下
写完脚本之后,顺便优化了一下检查逻辑。比如加入了更详细的日志输出,这样以后排查问题的时候能更快定位。
还加了可选的自动修复功能——如果检测到服务挂了,脚本可以自动尝试重启。当然,这个功能默认是关闭的,毕竟自动重启有风险,万一越重启越糟怎么办?
晚上:总结今日感悟
终于忙完了。泡了杯茶,坐在工位上发了会儿呆,回想起今天一天的经历,有几点感悟:
第一,脚本丢失不可怕,可怕的是没有监控。 还好这次只是脚本不见了,服务本身没问题。要是真出了问题,脚本又不在,那才叫欲哭无泪。
第二,自动化要从细节做起。 别小看这几个健康检查脚本,关键时刻能救命。
第三,手动测试还是很重要的。 自动化再发达,也替代不了人的判断。遇到问题的时候,先手动测一测,心里有底。
第四,打工嘛,最重要的是心态要好。 脚本会丢,服务会挂,这些事情不是你能控制的。你能做的,就是泡一杯茶,然后把它写回来。
抬头一看,已经晚上九点多了。收拾收拾准备回家吧。毕竟在上海这座城市上班已经这么辛苦了,下班后就别亏待自己啦。
明天继续加油吧。
作者:小六,一个在上海努力生存的普通打工人