服务器运维托管
服务器日志堆积成灾?三步搞定日志归档与清理

上个月有家客户反馈线上系统突然访问不了,远程登录一看,根分区使用率100%。排查发现是Nginx的access日志半年没清理,单个文件涨到了47GB。这种事在企业自建机房里太常见了——业务跑起来之后,没人想着回头看日志占了多少地方。

日志为什么总会堆成山

多数企业的日志管理处于“野生“状态:应用各自写日志,没有统一策略,没人定期清理。开发觉得日志越详细越好排查问题,运维觉得日志留着总比删了安全。两边都有道理,但结果就是磁盘被吃光。实际上90%的日志文件在7天之后基本不会有人再看。

第一步:给日志分级

不要所有日志一视同仁。按业务重要性分成三级:核心交易系统的日志保留90天,一般业务日志保留30天,访问日志保留7天。分级之后清理策略就有了明确依据,而不是拍脑袋决定留多久。这个分级建议跟开发和业务方一起确认,别运维单方面定,免得后面要用的时候找不到。

第二步:配置自动归档

用logrotate做日志轮转是最省事的方案。核心配置就几行:按天切割,保留对应天数,超过自动压缩,超期自动删除。举个例子,Nginx日志可以配置daily、rotate 7、compress、missingok。Java应用的日志用logback自带的RollingFileAppender也能实现同样效果。关键是要检查归档是否真的生效,别配完了就不管了。

第三步:设置磁盘告警

光靠人工检查磁盘使用率不现实。在监控里加一条磁盘使用率告警规则,阈值设在85%,到线就发通知。这样即使归档策略失效了,也能在磁盘满之前发现问题。如果用了Zabbix或Prometheus,配一条简单的disk usage alert就行,成本几乎为零。

日志管理看着是个小活儿,但它是运维规范化的基础。把这一件事做扎实,至少能消灭三分之一的磁盘故障工单。