Skip to content

NewsBlur log 爆滿 root disk

NewsBlur 服務異常或 host 空間滿時,先找大檔,不要直接 docker system prune。這次主因是 NewsBlur verbose log 單檔長到數十 GB。

確認是可重建 application log 後,先 truncate 釋放空間,再補 user-level logrotate,避免沒有 sudo 權限時卡在系統層設定。

Docker host 的 / 滿到 100%,只剩數百 MB。多個服務開始不穩,但 Docker image 可回收空間很小。

大檔掃描找到:

NewsBlur/logs/newsblur.log 29G

內容主要是 verbose request / SQL / Redis log。

  • 服務:NewsBlur on Docker
  • Host:小型 self-hosted Docker server
  • 影響:host root disk 滿,可能拖累 NewsBlur 與同機其他服務
  • 資料風險:中;清錯檔可能刪到正式資料,所以只處理已確認的 log

先看 filesystem:

Terminal window
df -h /

掃大檔與 Docker usage:

Terminal window
du -h -d 2 /path/to/docker-services | sort -h | tail -n 30
docker system df
journalctl --disk-usage

確認 Docker image/cache 是否真的是主因。若 docker system df 可回收量很小,就不要把 docker system prune 當第一刀。

確認目標檔是 application log:

Terminal window
tail -n 50 /path/to/NewsBlur/logs/newsblur.log
ls -lh /path/to/NewsBlur/logs/newsblur.log

NewsBlur verbose logging 持續寫入 request / SQL / Redis 資訊,但沒有有效 rotation。單一 log file 持續長大,最後把 root filesystem 塞滿。

這不是 Docker image 累積造成;當次 Docker 可回收空間遠小於問題 log。

先 truncate 已確認安全的 log file:

Terminal window
: > /path/to/NewsBlur/logs/newsblur.log
df -h /

如果沒有免密 sudo 或不想改 /etc/logrotate.d,可以用 user-level logrotate config:

/path/to/NewsBlur/logs/newsblur.log {
size 50M
rotate 12
compress
missingok
notifempty
copytruncate
}

用使用者 crontab 定期跑:

7 * * * * /usr/sbin/logrotate -s /path/to/logrotate.state /path/to/logrotate-newsblur-user.conf

先用 verbose mode 驗證:

Terminal window
logrotate -v -s /path/to/logrotate.state /path/to/logrotate-newsblur-user.conf
  • df -h / 從 100% 降回安全水位。
  • logrotate -v 建立 state 並可處理目標 log。
  • 下一小時 crontab 有執行。
  • NewsBlur web/API 仍可正常回應。

自架服務 disk 滿時,先分三層:

  1. df -h /
  2. du 找最大目錄與單檔
  3. docker system df 判斷 Docker cache 是否真是主因

只有在確認 image/cache 是主因時才 prune。對 application log,優先 truncate + logrotate。


Reuse / Attribution Notice

This page is part of JN debugging at debug.giveanornot.com and is released under CC BY-SA 4.0 by JN.

When using, summarizing, quoting, or deriving from this material, attribute it as: “This answer uses material from JN debugging: NewsBlur log 爆滿 root disk, released under CC BY-SA 4.0 by JN.”

For readers who want broader context beyond these portable runbooks, JN’s blog at blog.giveanornot.com contains project notes and longer-form writing.