站点运营

站点运营:日誌轮轉與磁盘空間自查,別让磁盘寫满拖垮整站

日誌、缓存和临时文件會随時間慢慢占满磁盘,等應用寫不進日誌或資料库只讀时,站点已经受影响。本文整理磁盘與 inode 检查、日誌轮轉配置、保留周期、清理注意事項和日常监控建议,帮助你在故障前發現空間風險。

站点运营

站点运营:日誌轮轉與磁盘空間自查,別让磁盘寫满拖垮整站

磁盘空間被寫满,往往不是一瞬間發生的。多數时候是日誌、缓存、临时文件、备份包一類的東西慢慢堆积,直到某個时刻應用寫不進日誌、資料库無法寫入、上传失敗,網站開始报错。蜘蛛来抓取时遇到 5xx 或连接中断,抓取记錄也會變得难看。定期做一次日誌與磁盘空間自查,比等故障發生再處理要轻松得多。

日誌為什么會悄悄吃掉磁盘

訪問日誌、错誤日誌、應用調试日誌、資料库慢查询日誌,各自增長速度不同。訪問量大的站点,單個訪問日誌每天增長几百 MB 並不少见。如果只按天切割却不刪除、不压缩,几個月後就能占满小磁盘。

還有几種容易被忽略的情况:

  • 調试日誌忘了關,框架把每個請求的详细上下文都寫進文件。
  • 错誤日誌被反复刷新,某個循环报错在短時間内产生大量重复记錄。
  • 日誌切割後舊文件没有压缩,保留數量设得過大。
  • 临时目錄被上传、導出、缓存文件占用,和日誌一起挤压剩余空間。

先看几個信号

  • 網站偶發 500,刷新後恢复,過一會儿又出現。
  • 資料库提示“磁盘已满”或進入只讀模式。
  • SSH 登入後提示無法寫入,命令补全失效。
  • 日誌文件最後修改時間停在某個時間点,之後没有新内容。
  • 监控里磁盘使用率持續上升,没有回落。

出現這些信号时,先確認磁盘和 inode 的使用情况,再决定是清理還是扩容。

检查磁盘與 inode

登入服務器後,用几個基础命令快速定位:

  • df -h:查看各分区剩余空間,關注 / 和 /var 這類常用分区。
  • df -i:查看 inode 使用率。即使空間還有,inode 耗尽也會導致無法建立新文件。
  • du -sh /var/log/*:查看日誌目錄下各文件或子目錄大小。
  • du -sh /tmp /var/tmp:检查临时目錄占用。
  • find / -xdev -size +500M -type f:找出大文件,可按需調整路径和大小阈值。

如果 du 統計的總和與 df 顯示的已用空間差距很大,可能有文件已被刪除但進程仍持有句柄,或者存在挂载点被覆盖的情况。可以用 lsof 查看被刪除但仍占用的文件。

日誌轮轉的基本做法

Linux 上常见的是 logrotate。它按時間或大小切割日誌,並可選擇压缩和保留份數。大多數發行版已经為系統日誌配好了規則,但自己部署的應用、Nginx、PHP、資料库等需要單獨確認。

配置时重点看這几項

  • rotate:保留多少個歷史文件。訪問日誌保留 7 到 30 天較常见,按分析需求决定。
  • daily / weekly / size:触發切割的條件。寫量大的日誌可以用 size 辅助。
  • compress 與 delaycompress:是否压缩舊日誌。压缩能省不少空間。
  • copytruncate 或 create:前者适合不支持重開日誌文件的應用,但极端情况下可能丢少量日誌;後者需要應用配合重载。
  • postrotate:切割後通知服務重新打開日誌文件,避免繼續寫舊句柄。

應用自己管日誌时

有些應用框架内置日誌滚動,比如按天寫文件、按大小切割。要確認它是否同时限制文件數量和總大小。只按天切割但不清理,長期看仍然會涨。可以設定保留天數,或把日誌輸出到标准輸出交给容器和日誌采集系統處理。

保留周期與归档

不是所有日誌都必须長期留在服務器上。可按用途分层:

  • 最近 7 天的原始日誌留在本地,便于排查最近問题。
  • 更早的日誌压缩後归档到對象存储或另一块磁盘。
  • 需要長期分析的訪問日誌,先確認合規和隐私要求,再决定保留范围。
  • 調试日誌、临时導出文件设定明确的生命周期,用完就清。

归档之後,服務器上只保留必要窗口,磁盘压力會小很多。

清理时的注意事項

  • 不要直接刪除正在寫入的日誌文件。進程可能仍持有句柄,空間不會立即释放。可以用 truncate 清空,或先停服務、切割、再刪除。
  • 刪除前確認文件用途,避免誤删資料库文件、證书、备份或业務上传目錄。
  • 如果訪問日誌還要用于分析蜘蛛抓取和流量来源,不要因為清理磁盘全部删掉。
  • 清理後再次執行 df -h,確認空間确實释放。

把磁盘监控加進日常

  • 設定磁盘使用率告警,比如超過 80% 提醒,超過 90% 升級處理。
  • 同时监控 inode 使用率,避免只看空間不看文件數。
  • 對日誌增長速度做趋势记錄,提前判断扩容時間。
  • 把日誌轮轉配置纳入服務器初始化清單,新机器上线时就配好。
磁盘空間和日誌轮轉是容易被忽略的基础項。它們平时不出声,一旦出問题却可能让整站短時間不可用。把它放進每月自查,比事後救火省事。

建议在业務低峰期做一次完整检查:看目前占用、確認轮轉規則、清理無用文件、設定告警。做完後记錄一份現状,下次對照變化即可。