多数站长不是不知道服务器要维护,而是维护这件事永远排在最后:今天有内容要发,明天有活动要上,只要网站还能打开,就先放着。直到某天打不开了,才发现从来没配过告警、备份半年没验证过、磁盘早就红过好几次只是没人看。服务器日常维护真正该做的事其实不多,难的不是做,是在没出事的时候也照样做。
一、清单式维护为什么坚持不下来
因为一份清单只有动作,没有出口。写上二十条要检查的项目,没有告警、没有记录、没有后果,第一周还能执行,第二周开始跳过几项,一个月后连清单放在哪都想不起来。所以维护的重点不是把清单列得更全,而是把最关键的几项变成“不做就会被打扰”的机制——它自己会来找你,不靠你记性。
二、第一件:先把告警装上
没有告警,巡检就全靠自觉,迟早断。告警不用做得多复杂,盯三件事就够:资源用量的阈值(磁盘、内存、负载),服务的可用性(网站现在还能不能正常打开),关键到期项(证书、域名、备份文件的更新时间)。这三样齐了,大部分事故你都能在用户发现之前先知道。
告警有几个设置上的讲究:阈值不要卡在临界点,磁盘在八成报警比在九成五报警有用得多;告警要有出口,发到手机或者群里,别只写进一个没人看的日志;同一个问题不要反复轰炸,否则几天之后你就开始无视它了。
三、第二件:备份要能恢复才算备份
判断标准非常朴素:上次从备份里成功恢复是什么时候?答不上来,就等于没有备份。做法是定期把备份恢复到一台隔离机器上,跑一遍关键流程,看看数据是不是完整的、应用是不是能起来。演练本身不产生任何业务价值,但它决定了出事那天你到底有没有退路。
四、第三件:变更留痕
维护不只是防外部的风险,还包括别自己把自己弄挂。每次改配置、换版本、动数据库结构,都记一笔:改了什么、为什么改、怎么回滚。出事的时候,一份变更记录能让你在几分钟内锁定原因,而不是靠回忆。有件事要养成习惯:回滚方案写在动手之前,不是事后补,事后补的时候往往已经急得顾不上写了。
五、第四件:容量和到期,提前处理
磁盘空间、带宽、数据库容量、证书有效期、域名有效期、云资源的到期时间,这些都有明确的时间表,全都可以提前处理。提前两个月发现和提前两天发现,对业务的影响完全不是一个量级。把这些日期集中记在一张表上,每月看一次,看到临近的就开始办。
六、第五件:账号和权限收口
一人一号、权限按需给、人员变动立刻回收、密钥定期轮换。这些事的成本极低,但不做的话,一次人员变动就可能留下一个长期没人管的入口。很多被入侵的站,追到最后发现入口是一个早就离职的人留下的账号。
七、把维护变成一个定时任务
上面这些事,靠人记就是靠不住的,交给定时任务最省心。写一个体检脚本,每周跑一次,只在有异常的时候输出内容,其余时候保持安静。
# crontab -e 里加一行:每周一早上 8 点自动体检
0 8 * * 1 /root/healthcheck.sh > /tmp/healthcheck.log 2>&1
#!/bin/bash
# 只报异常:没问题的项目一句不说,报告太长会被无视
# 1. 磁盘超过 85% 就报
df -h | awk 'NR>1 && ($5+0)>=85 {print "磁盘告警:", $6, $5}'
# 2. 关键服务没在跑就报
for s in nginx mysqld; do
systemctl is-active --quiet "$s" || echo "服务告警: $s 未运行"
done
# 3. 近两天没有新备份就报
find /backup -name "*.sql" -mtime -2 | grep -q . || echo "备份告警: 近两天没有新备份"
# 4. 证书剩余不足 30 天就报
END=$(openssl x509 -in /etc/nginx/ssl/site.pem -noout -enddate | cut -d= -f2)
LEFT=$(( ($(date -d "$END" +%s) - $(date +%s)) / 86400 ))
[ "$LEFT" -lt 30 ] && echo "证书告警: 剩余 $LEFT 天"
这个脚本的设计原则是“有异常才说话”。报告里天天写着一切正常,看的人第三天就会忽略它,真正出问题那一条也一起被忽略了。少说废话,才能让告警保持分量。
八、别做的三件事
第一件,装个面板就以为万事大吉。面板让操作变简单,也让误操作变简单,它不替你判断该不该动那一刀。第二件,只看绿点不看趋势。监控全绿不代表没有隐患,磁盘涨到八成的时候其实就该处理了,不是等它变红。第三件,把维护当成一次性任务。装完监控、跑完一次备份就再也不看,等于什么都没做。
维护的意义不在于你做了多少件事,而在于把“不知道什么时候会出事”变成“出了事我早就知道”。这个转变不需要多大的投入,需要的是把几件关键的事固定下来,然后一直做下去。
相关阅读:
A5创业网 版权所有