Centos8 中如何使用 journalctl 分析日誌
systemd 是大多數主要 Linux 發行版中的默認系統管理器,它帶有一個名爲 “journald” 的日誌守護程序。
systemd
從系統、內核和各種服務或守護進程多個來源收集日誌,並通過journald
提供集中管理的解決方案。
什麼是 journald?
journald 是 systemd 的守護進程,它從系統、內核和各種服務或守護進程多個來源收集日誌,並以二進制格式存儲日誌,以便於操作。
所有這些日誌事件都由 journald 處理,它提供了一種集中處理日誌的方法,而不管消息來自何處。
什麼是 journalctl?
journalctl 是一個命令行工具,用於查看由 journald 收集的日誌。
日誌有很好的索引和結構,允許系統管理員根據各種參數輕鬆地分析和操作日誌,例如,根據時間、引導順序、特定服務、嚴重性等過濾日誌。
1) 如何使日誌長期保存在系統中?
默認情況下,journal
日誌在大多數 Linux 發行版中是啓用的,但它將日誌數據存儲在/run/log/journal/
中,重啓時會被刪除。如果要使日誌永久保存,請執行以下步驟,這些步驟將自動創建/var/log/journal/
目錄。
以 root 用戶身份打開/etc/systemd/journald.conf
文件並取消註釋 “Storage=auto” 的行並將其更改爲“Storage=persistent”。或者,您可以使用 sed 命令替換文件中的匹配字符串。
[root@server1 ~]# sed -i '/Storage/ c\Storage=persistent' /etc/systemd/journald.conf
重啓 systemd-journald 服務:
[root@server1 ~]# systemctl restart systemd-journald
修改/var/log/journal
權限:
[root@server1 ~]# chown -R root:systemd-journal /var/log/journal
下面可以從目錄中看到日誌了。
2) journalctl 常用的選項
在使用 Journalctl 工具之前,可以瞭解一些常用的選項:
-f : 實時顯示最近的 10 條日誌。
-e : 跳轉到日誌末尾以顯示最新事件。
-r : 按時間倒序打印日誌消息
-k : 只顯示內核日誌。
-u : 只顯示指定 systemd Unit 的消息。
-b : 顯示來自特定引導的消息,如果不包括特定引導會話,則顯示當前引導消息。
--list-boots : 顯示引導編號 (相對於當前引導)、它的 id 以及與引導有關的第一個和最後一個消息的時間戳。
–utc : 以 UTC 時間表示。
-p, --priority= : 按消息優先級過濾輸出。
-S, --since= : 根據開始時間過濾日誌
-U, --until= : 根據結束時間過濾日誌
--disk-usage : 顯示所有日誌文件的當前磁盤使用情況。
3)如何使用 journalctl 讀取日誌
3.a) 使用 journalctl 命令查看基本日誌
當 journalctl 不帶選項是,它會顯示日誌的完整內容,首先列出最舊的記錄。
它在後端使用less
命令來顯示日誌。
[root@server1 ~]# journalctl
3.b) 以相反的順序顯示日誌
上面的輸出按時間順序顯示日誌。如果想要將最新的日誌放在最前面,需要添加-r
選項。
[root@server1 ~]# journalctl -r
3.c) 顯示指定行數的日誌
可以使用-n
選項僅顯示日誌中指定行數的日誌,如下所示:
[root@server1 ~]# journalctl -n 20
3.d) 實時查看日誌
可以使用-f
選項查看實時日誌,如下所示。這在對某些問題進行故障排除時很有用。
[root@server1 ~]# journalctl -f
3.e) 只顯示內核日誌
過濾器可以根據你的需要使用。要僅顯示內核日誌,可以使用-k
選項。這相當於字段匹配_TRANSPORT=kernel
。
[root@server1 ~]# journalctl -k
或者
[root@server1 ~]# journalctl _TRANSPORT=kernel
3.f) 過濾出系統引導日誌
每次引導系統時,都會在日誌中創建一個新的引導條目。要列出所有可用的引導,運行以下命令:
[root@server1 ~]# journalctl --list-boots
-1 5d845cc6c67746bdabd9b9a91c0d86ee Tue 2021-06-08 14:58:47 CST—Fri 2021-06-11 08:32:36 CST
0 5690a1c73db146bb8ceeaf3c8b1086f5 Wed 2021-06-16 15:40:42 CST—Wed 2021-06-16 15:41:20 CST
系統引導日誌以一個數字作爲前綴,該數字從 0 開始。'0' 指的是當前啓動。引導會話 “-1” 是上次引導的會話,依此類推。使用下面命令顯示本次系統引導的日誌記錄:
[root@server1 ~]# journalctl -b 0
查看上一次系統引導的記錄,如下操作:
[root@server1 ~]# journalctl -b -1
3.g) 基於時間間隔的過濾
可以根據時間間隔過濾日誌。多個參數可以與時間過濾器一起使用,如下所示。要使用時間過濾器,請使用 “-S 或 --since” 和“-U 或 --until”命令行開關。
要過濾從昨天到目前的日誌,請運行以下命令:
[root@server1 ~]# journalctl -S yesterday
僅過濾今天的日誌,請運行以下命令:
[root@server1 ~]# journalctl -S today
或者
[root@server1 ~]# journalctl -S 00:00
如果僅過濾昨天的日誌,不包括今天的,請運行以下命令:
[root@server1 ~]# journalctl -S yesterday --until 00:00
要過濾自 3 月 12 日以來的日誌,請運行以下命令:
[root@server1 ~]# journalctl -S 2021-03-12
如要使用日期和時間過濾日誌,請運行以下命令。
注意:日期和時間的使用格式:year-month-day
hour:minute:second
[root@server1 ~]# journalctl -S "2021-06-01 20:00:00" -U "2021-06-16"
要過濾過去一小時的消息,請使用以下命令:
[root@server1 ~]# journalctl -S -1h
3.h) 按優先級過濾
過濾可以應用於消息優先級,這在你想要過濾特定消息(如 “Warn” 或“Error”等)時非常有用。
下面列出了所有優先級:
[root@server1 ~]# journalctl -p 3 -b
或者
[root@server1 ~]# journalctl -p err -b
4) 基於字段的過濾
journal 日誌可以按特定字段過濾。要匹配的字段的語法是FIELD_NAME=MATCHED_VALUE
,例如SYSTEMD_UNIT=httpd.service'
。此外,可以在單個查詢中指定多個匹配項,以更方便的方式過濾輸出消息。
4.a) 按 Unit 過濾
要顯示由指定服務生成的消息,請使用下面給出的命令。同樣可以過濾任何服務消息。
[root@server1 ~]# journalctl -u sshd.service
或者
[root@server1 ~]# journalctl _SYSTEMD_UNIT=sshd.service
4.b) 按設備路徑過濾
要過濾與特定設備相關的消息,請運行以下命令:
[root@server1 ~]# journalctl /dev/sda
5) 檢查日誌文件的磁盤佔用情況
當你爲 journal 日誌啓用持久存儲時,它最多使用/var/log/journal
所在文件系統容量的 “10%”。
當您爲日誌日誌啓用持久存儲時,它最多使用 “/var/log/journal” 所在文件系統的“10%”。
[root@server1 ~]# journalctl --disk-usage
Archived and active journals take up 16.0M in the file system.
總結
在本文中,展示了什麼是 journal,以及如何使用 journalctl 命令根據各種參數篩選日誌。
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/HtkUi8c6BearCbzziSg2bw