簡單瞭解journalctl

journalctl 命令

journalctl是什麼以及做用?php

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

命令格式爲:
journalctl [OPTIONS…] [MATCHES…]shell

journalctl 命令的路徑爲:
/bin/journalctlide

查看journalctl 幫助文檔:journalctl --helpphp-fpm

直接使用journalctl能夠輸出全部的日誌記錄,由於是全部的日誌信息,因此價值不大,咱們只是想要某個服務輸出的日誌信息。命令行

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

若是日誌須要永久保存,能夠將日誌保存到文件中。rest

方法一:建立目錄 /var/log/journal,而後重啓日誌服務 systemd-journald.service。
方法二:修改配置文件 /etc/systemd/journald.conf,把 Storage=auto 改成 Storage=persistent,並取消註釋,而後重啓日誌服務 systemd-journald.service。日誌

方法一的詳細操做
在 /var/log/ 下面建立名爲 journal 的目錄,並設置權限便可:code

$ 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的簡單用法能夠簡單達到了解和基本使用的目的,

相關文章
相關標籤/搜索