站点运营

站点运营:服務器日誌轮轉與磁盘空間自查,別让日誌文件把磁盘寫满

日誌文件平时不起眼,長期不清理却可能把磁盘寫满,導致資料库、Web 服務甚至遠程登入都受影响。本文梳理日誌轮轉、保留周期、磁盘水位告警和日誌級別控制几個自查点,帮你在問题發生前把風險降下来。

站点运营

站点运营:服務器日誌轮轉與磁盘空間自查,別让日誌文件把磁盘寫满

網站跑了一段時間後,很多人會把注意力放在内容、連結和抓取資料上,却很少去看服務器上那些一直在增長的日誌文件。訪問日誌、错誤日誌、應用日誌、定时任務輸出,每天都會寫入,單看一個文件不大,积累几個月就可能占用几個 GB,甚至把磁盘寫满。磁盘一旦没有剩余空間,資料库無法寫入、Web 服務無法记錄會话、临时文件建立失敗,嚴重时连遠程登入都會受影响。

日誌為什么會失控

常见原因有几個:一是根本没有配置轮轉,所有日誌都追加到同一個文件;二是配置了轮轉但保留數量過多,几十個歷史文件堆在一起;三是日誌級別開得太细,調试信息把正常记錄淹没;四是某些程序出错後疯狂重试,短時間内产生大量重复日誌。另外,蜘蛛和爬虫的訪問记錄也會让訪問日誌明顯膨胀,尤其是站点被大量掃描或抓取时。

日誌轮轉的基本检查

確認轮轉是否生效

在 Linux 上,多數發行版用 logrotate 管理日誌轮轉。不要只看配置文件是否存在,要實际確認日誌目錄里有没有按日期切分出来的文件,比如 access.log、access.log.1、access.log.2.gz 這類命名。如果只有 access.log 一直不變大,說明轮轉可能没有匹配到路径,或者程序自己接管了日誌寫入。

轮轉周期與保留數量

  • 轮轉周期:訪問量大的站点按天切分比較合适,量小的可以按周。
  • 保留數量:一般保留 7 到 30 份,能覆盖最近一次故障排查即可。
  • 压缩归档:歷史日誌建议啟用 gzip 压缩,能省下不少空間。
  • 轮轉後動作:確認程序在日誌被切走後能重新打開文件句柄,否則新日誌可能繼續寫到舊文件。

磁盘空間自查清單

不要等告警响了才去看磁盘。可以定期执行下面几項检查:

  1. 查看根分区和各挂载点的使用率,重点關注 /var、/home、/tmp 和資料库資料目錄。
  2. 找出占用最大的目錄,逐层定位是日誌、备份還是缓存。
  3. 检查是否有被刪除但進程仍占用的文件,這類文件不會出現在目錄大小里,但會一直占着磁盘。
  4. 確認日誌目錄是否和資料目錄在同一分区,避免日誌把資料库的可用空間挤掉。
  5. 检查临时目錄和上传目錄,異常請求可能在那里留下大量碎片文件。
  6. 给磁盘使用率設定阈值告警,比如 80% 提醒、90% 嚴重,留出處理時間。

日誌保留與清理策略

日誌不是留得越久越好。保留時間要结合排查需要和合規要求来定。常见的做法是:热日誌保留 7 天,压缩归档保留 30 到 90 天,更早的按需备份到其他存储後刪除。清理时不要直接用通配符刪除正在寫入的文件,先確認轮轉配置已经把它切分出去。對于蜘蛛訪問日誌,如果想分析抓取频次,可以單獨保留一份精简记錄,而不是把完整訪問日誌無限期堆在服務器上。

日誌級別與噪音控制

應用日誌的級別設定同样重要。生产环境通常用 info 或 warn,不建议長期開着 debug。框架的 SQL 日誌、缓存命中日誌、健康检查日誌,如果每次都记,量會非常大。可以按模块調整級別,把真正需要關注的部分留下来。错誤日誌里如果出現大量重复堆栈,說明某個問题在持續發生,應该尽快修复,而不是让它繼續刷盘。

日誌的價值在于能帮你還原問题現场,而不是把磁盘塞满。保留够用的時間,压缩不需要频繁查看的部分,给關键日誌留出空間,就已经達到了大部分站点的需求。

把检查變成习惯

可以把磁盘水位和日誌轮轉检查放進日常巡检,或者用监控工具自動采集。每周看一眼使用率趋势,比等到服務不可用再登服務器要轻松得多。對于有蜘蛛池或抓取分析需求的站点,日誌确實是重要資料来源,但前提是服務器本身稳定執行,否則日誌還没分析,站点先打不開了。