站点运营

站点运营:日志轮转与磁盘空间自查,别让访问日志把服务器写满

访问日志、错误日志和应用日志持续写入,磁盘空间和 inode 可能被慢慢占满,导致缓存写入失败、上传异常甚至数据库停写。本文从磁盘与 inode 检查、日志轮转配置、清理与归档策略、告警设置几个方面,给出一份可执行的日志与磁盘自查清单,并说明如何兼顾蜘蛛抓取日志的复盘价值。

站点运营

站点运营:日志轮转与磁盘空间自查,别让访问日志把服务器写满

访问日志、错误日志、缓存日志、数据库日志,只要服务在跑,日志就在写。平时不太会注意,直到某个凌晨磁盘写满,站点开始报 500,后台传不了图,数据库也写不进去。对运营来说,日志和磁盘属于那种不出问题没感觉、一出问题很耽误事的环节。

先看磁盘和 inode,不只看剩余空间

很多服务器面板会展示磁盘使用率,但 inode 使用率经常被忽略。磁盘空间还有余量,不代表能继续创建新文件;如果小文件太多,inode 先耗尽,同样会出现无法写入的情况。建议同时看两个数字:磁盘使用率和 inode 使用率。

常见的增长来源包括:访问日志、错误日志、应用日志、缓存文件、会话文件、上传的临时文件、数据库 binlog 或慢查询日志。可以按目录大小排序,找出增长最快的几个位置。

查看日志目录的常用思路

  • 按目录统计占用:看 /var/log、应用日志目录、缓存目录、临时目录。
  • 按文件大小排序:找出单个特别大的日志文件,比如访问日志没有轮转。
  • 看增长趋势:对比昨天和今天同一目录的大小,判断是稳定增长还是异常暴涨。
  • 看 inode:确认是否被大量小文件占用,比如会话文件、缩略图缓存。

日志轮转配置要能真正生效

日志轮转不是设置了就万事大吉。需要确认轮转周期、保留份数、压缩方式和轮转后是否需要通知服务重新打开日志文件。如果配置写错,可能出现日志文件被重命名后,进程还在往旧文件句柄写,磁盘占用没有释放。

比较稳妥的做法是:给访问日志和错误日志分别设置保留天数,压缩旧日志,限制总保留体积。对增长快的日志,轮转周期可以缩短,但不要只按天,必要时按小时或按大小触发。

轮转后常见的小问题

  • 旧日志被删除但进程未重载,磁盘空间没有真正释放。
  • 压缩任务和清理任务时间重叠,短时 CPU 和磁盘 IO 升高。
  • 保留份数过多,虽然单文件不大,累计起来仍占空间。
  • 日志目录权限不对,轮转脚本执行失败但没有告警。

把日志清理和抓取观察放在一起做

访问日志不只是占空间,它也是观察蜘蛛行为的原始材料。清理之前,可以考虑先保留一段时间的压缩归档,方便之后做抓取频次、状态码分布、异常 IP 的复盘。如果日志直接删除,再想查某个时间段的抓取情况就比较被动。

对于蜘蛛池或需要观察 URL 发现的站点,访问日志能反映哪些地址被访问、返回什么状态、是否存在大量 404 或 5xx。定期抽取日志做统计,比等到磁盘告警再处理更从容。

日常自查清单

  1. 磁盘使用率和 inode 使用率是否低于警戒线,比如 80%。
  2. 日志目录总大小是否在预期范围内,增长是否平稳。
  3. 轮转配置是否覆盖访问日志、错误日志、应用日志和数据库日志。
  4. 轮转后的旧日志是否保留合理天数,压缩是否正常。
  5. 是否有清理任务,清理后磁盘空间是否实际释放。
  6. 是否有告警,磁盘或 inode 超过阈值时能通知到人。
  7. 日志归档是否足够支撑一段时间的抓取复盘。

发现空间不足先做什么

如果已经收到磁盘告警,先不要盲目删除。可以先确认哪个分区、哪个目录增长最快,再判断是日志、缓存、临时文件还是数据库文件。优先清理可再生成的临时文件和过期日志,避免误删数据库文件或上传源文件。

清理之后,检查对应服务是否恢复正常写入,并观察一段时间。如果日志增长很快,说明轮转或清理策略需要调整,而不是每次手动删。

磁盘和 inode 的告警往往来得突然,但增长是渐进的。把日志轮转和清理纳入日常巡检,比故障后救火省事得多。

站点运营不需要每天盯着日志,但需要知道日志写在哪里、保留多久、磁盘还有多少余量。把这几个数字定期看一眼,很多写入类故障可以提前避开。