Linux 系統 /var/log/journal/ 垃圾日誌清理

CentOS系統中有兩個日誌服務,分別是傳統的 rsyslog 和 systemd-journal

systemd-journald是一個改進型日誌管理服務,可以收集來自內核、系統早期啓動階段的日誌、系統守護進程在啓動和運行中的標準輸出和錯誤信息,還有syslog的日誌。

該日誌服務僅僅把日誌集中保存在單一結構的日誌文件/run/log中,由於日誌是經歷過壓縮和格式化的二進制數據,所以在查看和定位的時候很迅速。

本文轉自米撲博客:Linux 系統 /var/log/journal/ 垃圾日誌清理

默認情況下並不會持久化保存日誌,只會保留一個月的日誌。另外,一些rsyslog無法收集的日誌也會被journal記錄到。

rsyslog作爲傳統的系統日誌服務,把所有收集到的日誌都記錄到/var/log/目錄下的各個日誌文件中。

常見的日誌文件如下:

/var/log/messages 絕大多數的系統日誌都記錄到該文件
/var/log/secure 所有跟安全和認證授權等日誌都會記錄到此文件
/var/log/maillog 郵件服務的日誌
/var/log/cron crond計劃任務的日誌
/var/log/boot.log 系統啓動的相關日誌

 

曾經有人說:Linux沒有垃圾文件,Windows纔有垃圾文件,實際上不是這樣的,兩者都會有垃圾文件。

操作系統,就是操作各種文件的系統,它不可能沒有日誌文件,更不可能不產生臨時文件,就像剪紙一樣,臨時產生一些廢料是再自然不過的事情。

Linux到底有沒有佔用空間的垃圾文件,這個看如何判定了,例如好幾年前、幾個月前的日誌文件、系統文件,基本沒什麼用處,算垃圾文件嗎?

ls -lhm --full-time /var/log/journal/f9d400c5e1e8c3a8209e990d887d4ac1_bk_20190122/ | sort -k6 | head -n30

# ls -lhm --full-time /var/log/journal/f9d400c5e1e8c3a8209e990d887d4ac1_bk_20190122/ | sort -k6 | head -n30
total 3.5G
-rw-r-x---+ 1 root systemd-journal  64M 2018-03-28 01:36:01.010275802 +0800 system@00000000000000000000000000000000-00000000000002ca-000567d28f35cca7.journal
-rw-r-x---+ 1 root systemd-journal 8.0M 2018-03-28 01:36:01.100275802 +0800 user-65534@4ee96b2fbd8b4a82beee0402402fee03-0000000000005419-000567f7fd08bd2f.journal
-rw-r-x---+ 1 root systemd-journal  72M 2018-04-02 19:16:41.644934707 +0800 system@00000000000000000000000000000000-0000000000010a47-0005686852f561be.journal
-rw-r-x---+ 1 root systemd-journal 8.0M 2018-04-02 19:16:41.714934707 +0800 user-65534@4ee96b2fbd8b4a82beee0402402fee03-0000000000011f98-00056872cab77761.journal
-rw-r-x---+ 1 root systemd-journal  72M 2018-04-08 05:48:01.673026304 +0800 system@00000000000000000000000000000000-0000000000021c40-000568dbb97116ae.journal
-rw-r-x---+ 1 root systemd-journal  72M 2018-04-13 18:25:01.967846109 +0800 system@00000000000000000000000000000000-0000000000033800-00056949207ae8a1.journal
-rw-r-x---+ 1 root systemd-journal  72M 2018-04-18 04:12:35.385621922 +0800 system@00000000000000000000000000000000-0000000000045c3e-000569b848f6f86c.journal

查看垃圾文件的方法

未清理前發現硬盤根分區空間告急,用 du -t 100M /var 或 journalctl --disk-usage 命令查看,發現/var/log/journal日誌文件佔用了近3G空間,每個日誌文件體積高達8-128M,這些日誌文件記錄了很長時間以來的systemd情況,毫無價值,用journalctl --vacuum-size=10M命令將其清理之後,騰出了2.7G的空間。用df命令一查,/根分區果然寬敞了很多。

 

查看某個目錄的文件大小並排序(單位爲MB)

du -hm --max-depth=1 /var/ | sort -n

# du -hm --max-depth=1 /var/ | sort -n
1       /var/adm
1       /var/crash
1       /var/db
1       /var/empty
1       /var/games
1       /var/gopher
1       /var/kerberos
1       /var/local
1       /var/nis
1       /var/opt
1       /var/preserve
1       /var/spool
1       /var/tmp
1       /var/yp
131     /var/www
198     /var/lib
486     /var/cache
3695    /var/log
8513    /var/

清空 /var/log/journal 文件的方法

1、用echo命令,將空字符串內容重定向到指定文件中

echo "" > system.journal

說明:此方法只會清空一次,一段時間後還要再次手動清空很麻煩,這裏可以用以下命令讓journalctl 自動維護空間

 

2、journalctl 命令自動維護文件大小

1)只保留近一週的日誌

journalctl --vacuum-time=1w

 

2)只保留500MB的日誌

journalctl --vacuum-size=500M

 

3)直接刪除 /var/log/journal/ 目錄下的日誌文件

rm -rf /var/log/journal/f9d400c5e1e8c3a8209e990d887d4ac1

 

問題與分析解決

執行 journalctl 命令時報錯:Error was encountered while opening journal files: Input/output error

# journalctl --vacuum-time=1w
Error was encountered while opening journal files: Input/output error

問題分析:日誌文件損壞

解決方法:刪除之前的日誌,並重啓 journalctl 服務

mv journal/f9d400c5e1e8c3a8209e990d887d4ac1 journal/f9d400c5e1e8c3a8209e990d887d4ac1_bk_20190122

systemctl restart systemd-journald.service

查看 /var/log/journal/ 日誌目錄如下:

# ll /var/log/journal/
drwxr-sr-x  2 root systemd-journal  4096 Jan 22 11:26 f9d400c5e1e8c3a8209e990d887d4ac1
drwxr-sr-x+ 2 root systemd-journal 12288 Jan 14 15:37 f9d400c5e1e8c3a8209e990d887d4ac1_bk_20190122

 

然後,再執行 journalctl 限制日誌的命令:

# journalctl --vacuum-time=1w
Vacuuming done, freed 0B of archived journals on disk.
# journalctl --vacuum-size=500M
Vacuuming done, freed 0B of archived journals on disk.

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章