簡單了解journalctl


journalctl 命令

journalctl是什么以及作用?

journalctl 用來查詢 systemd-journald 服務收集到的日志。systemd-journald 服務是 systemd init 系統提供的收集系統日志的服務。

命令格式為:
journalctl [OPTIONS…] [MATCHES…]

journalctl 命令的路徑為:
/bin/journalctl

查看journalctl 幫助文檔:journalctl --help

直接使用journalctl可以輸出所有的日志記錄,因為是所有的日志信息,所以價值不大,我們只是想要某個服務輸出的日志信息。

systemd-journald 服務收集到的日志默認保存在 /run/log 目錄中,重啟系統會丟掉以前的日志信息。

如果日志需要永久保存,可以將日志保存到文件中。

方法一:創建目錄 /var/log/journal,然后重啟日志服務 systemd-journald.service。
方法二:修改配置文件 /etc/systemd/journald.conf,把 Storage=auto 改為 Storage=persistent,並取消注釋,然后重啟日志服務 systemd-journald.service。

方法一的詳細操作
在 /var/log/ 下面創建名為 journal 的目錄,並設置權限即可:

$ sudo mkdir /var/log/journal
$ sudo chown root:systemd-journal /var/log/journal
$ sudo chmod 2775 /var/log/journal
$ sudo systemctl restart systemd-journald.service

這樣/run/log 下面就沒有 journal 的日志了,日志文件就被保存到/var/log/journal中了。

查看日志占用的磁盤空間

journalctl --disk-usage

需要注意的是,日志不管你存放在哪里,它始終是要占用磁盤空間的。

清理日志數據
如果大家打算對 journal 記錄進行清理,則可使用兩種不同方式。

  • 使用 –vacuum-size 選項
  • 使用 –vacuum-time 選項

如果使用 –vacuum-size 選項,則可硬性指定日志的總體體積,意味着其會不斷刪除舊有記錄直到所占容量符合要求:

$ sudo journalctl --vacuum-size=1G

另一種方式則是使用 –vacuum-time 選項。任何早於這一時間點的條目都將被刪除。例如,去年之后的條目才能保留:

$ sudo journalctl --vacuum-time=1years

查看某次啟動后的日志

默認情況下 systemd-journald 服務只保存本次啟動后的日志(重新啟動后丟掉以前的日志)。此時 -b 選項是沒啥用的。當我們把 systemd-journald 服務收集到的日志保存到文件中之后,就可以通過下面的命令查看系統的重啟記錄:

$ journalctl --list-boots 

此時我們就可以通過 -b 選項來選擇查看某次運行過程中的日志:

$ sudo journalctl -b -1
或
$ sudo journalctl -b 9eaabbc25fe343999ef1024e6a16fb58

下面的命令都會輸出最后一次啟動后的日志信息:

$ sudo journalctl -b
$ sudo journalctl -b  0

查看指定時間段的日志

利用 --since 與 --until 選項設定時間段,二者分別負責指定給定時間之前與之后的日志記錄。時間值可以使用多種格式,比如下面的格式:

YYYY-MM-DD HH:MM:SS

如果我們要查詢 2018 年 3 月 26 日下午 8:20 之后的日志:

$ journalctl --since "2018-03-26 20:20:00"

如果以上格式中的某些組成部分未進行填寫,系統會直接進行默認填充。例如,如果日期部分未填寫,則會直接顯示當前日期。如果時間部分未填寫,則缺省使用 "00:00:00"(午夜)。秒字段亦可留空,默認值為 "00",比如下面的命令:

$ journalctl --since "2018-03-26" --until "2018-03-26 03:00"

另外,journalctl 還能夠理解部分相對值及命名簡寫。例如,大家可以使用 "yesterday"、"today"、"tomorrow" 或者 "now" 等。
比如獲取昨天的日志數據可以使用下面的命令:

$ journalctl --since yesterday

要獲得早上 9:00 到一小時前這段時間內的日志,可以使用下面的命令:

$ journalctl --since 09:00 --until "1 hour ago"

按 unit 過濾日志

systemd 把幾乎所有的任務都抽象成了 unit,因此我們可以方便的使用 -u 選項通過 unit 的名稱來過濾器日志記錄。查看某個 unit 的日志:

$ sudo journalctl -u nginx.service
$ sudo journalctl -u nginx.service --since today

還可以使用多個 -u 選項同時獲得多個 unit 的日志:

$ journalctl -u nginx.service -u php-fpm.service --since today

通過日志級別進行過濾

除了通過 PRIORITY= 的方式,還可以通過 -p 選項來過濾日志的級別。 可以指定的優先級如下:
# 0: emerg
# 1: alert
# 2: crit
# 3: err
# 4: warning
# 5: notice
# 6: info
# 7: debug

$ sudo journalctl -p err

注意,這里指定的是優先級的名稱。

實時更新日志

與 tail -f 類似,journalctl 支持 -f 選項來顯示實時的日志:

$ sudo journalctl -f

如果要查看某個 unit 的實時日志,再加上 -u 選項就可以了:

$ sudo journalctl -f -u prometheus.service

只顯示最新的 n 行

命令行選項 -n 用來控制只顯示最新的 n 行日志,默認是顯示尾部的最新 10 行日志:

$ sudo journalctl -n

也可以顯示尾部指定行數的日志:

$ sudo journalctl -n 20

下面則是顯示 cron.service 服務最新的三行日志:

$ journalctl -u cron.service -n 3

以上是journalctl的簡單用法可以簡單達到了解和基本使用的目的,更多詳情可以參見:https://www.cnblogs.com/sparkdev/p/8795141.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM