- 工信部備案號 滇ICP備05000110號-1
- 滇公安備案 滇53010302000111
- 增值電信業務經營許可證 B1.B2-20181647、滇B1.B2-20190004
- 云南互聯網協會理事單位
- 安全聯盟認證網站身份V標記
- 域名注冊服務機構許可:滇D3-20230001
- 代理域名注冊服務機構:新網數碼
systemd 有三個基本組件,如下所示:
systemd:Linux 操作系統的系統和服務管理器。
systemctl :該命令用于反觀和控制 systemd 系統和服務管理器的狀態。
systemd-analyze:該命令提供系統啟動時的性能統計,并從系統和服務管理器中檢索其他狀態和跟蹤信息。
擴展:
Systemctl
systemd-analyze
可以看到開機用了 30 秒以上。接下來查詢下這鍋應該誰背:
可以看到 cloud-init-local.service 耗時 最長,花了 5 秒。這里的記時有可能是等待其他服務器啟動的,再來看看其關聯服務的啟動時間:
除了這三個服務外,systemd 還提供其他服務,如 journald、logind、networkd 等。在本指南中,我們將討論 systemd 的 journald 服務。
journald - systemd 日志服務
根據設計,systemd 提供了一個集中的方式來處理所有來自進程、應用程序等的操作系統日志。所有這些日志事件都由 systemd 的 journald 守護進程來處理。journald 守護進程收集所有來自 Linux 操作系統各處的日志,并將其作為二進制數據存儲在文件中。
以二進制數據集中記錄事件、系統問題的好處有很多。例如,由于系統日志是以二進制而不是文本形式存儲的,你可以以文本、JSON 對象等多種方式進行轉譯,以滿足各種需求。另外,由于日志是按順序存儲的,通過對日志的日期/時間操作,超級容易追蹤到單個事件。
請記住,journald 收集的日志文件數以千行計,而且不斷更新每次開機、每個事件。因此,如果你有一個長期運行的 Linux 操作系統,日志的大小應該以 GB 為單位。由于有著數以千計的日志,最好用基本命令進行過濾,以了解更多系統問題。
journald 配置文件
journald 的配置文件存在于以下路徑中。它包含了關于如何進行日志記錄的各種標志。你可以看一下這個文件,并進行必要的修改。。
/etc/systemd/journald.conf
journald 存儲二進制日志文件的地方
journald 以二進制格式存儲日志。它們被保存在這個路徑下的一個目錄中:
/var/log/journal
例如,在下面的路徑中,有一個目錄包含了迄今為止的所有系統日志。
不要使用 cat 命令,也不要使用 nano 或 vi 來打開這些文件。它們(是二進制的),無法正常顯示。
使用 journalctl 來查看和分析 systemd 日志
journald 基本命令
查看 journald 日志的基本命令是:
journalctl
該命令提供了所有應用程序和進程的日志條目,包括錯誤、警告等。它顯示的列表中,最舊的日志在頂部,當前的日志在底部。你需要不斷按回車鍵來逐行滾動瀏覽。你也可以使用 PAGE UP 和 PAGE DOWN 鍵來滾動。按 q 鍵可以退出這個視圖。
如何以不同時區的時間查看日志條目
默認情況下,journalctl 以當前系統時區顯示日志的時間。然而,你可以很容易地在命令中提供時區,將同一日志轉換為不同的時區。例如,要以 UTC (世界協調時間)查看日志,請使用以下命令:
journalctl --utc
為確保您的機器現在使用的是正確的時間,請timedatectl單獨使用命令或與status選項一起使用。顯示將相同:
timedatectl status
如何在日志中只查看錯誤、警告等信息
系統產生的日志有不同的優先級。有些日志可能是可以忽略的警告,有些可能是重要的錯誤。你可能想只看錯誤,不看警告。這也可以用下面的命令來實現。
要查看緊急系統信息,請使用:
journalctl -p 0(這里linux沒有這一級別的警告,所以未出現任何信息)
錯誤代碼:
0: 緊急情況
1: 警報
2: 危急
3: 錯誤
4: 警告
5: 通知
6: 信息
7:調試
當你指定錯誤代碼時,它顯示該等級及更高的所有信息。例如,如果你指定下面的命令,它會顯示所有優先級為 2、1 和 0 的信息:
journalctl -p 2
如何查看特定啟動的日志
當你運行 journalctl 命令時,它會顯示當前啟動的信息,即你正在運行的會話中的信息。但也可以查看過去的啟動信息。
在每次重啟時,日志都會持續更新。journald 會記錄不同啟動時的日志。要查看不同啟動時的日志,請使用以下命令。
journalctl --list-boots
第一個數字顯示的是 journald 的唯一的啟動跟蹤號碼,你可以在下一個命令中使用它來分析該特定的啟動。
第二個數字是啟動 ID,你也可以在命令中指定。
接下來的兩個日期、時間組合是存儲在相應文件中的日志的時間。如果你想找出某個特定日期、時間的日志或錯誤,這就非常方便了。
要查看一個特定的啟動號碼,你可以選擇第一個啟動跟蹤號碼或啟動 ID,如下所示。
journalctl -b -2
journalctl -b 573da31b0c2542d8ab13a9795f530c69
你也可以使用 -x 選項,在顯示屏上添加 systemd 錯誤信息的解釋。在某些情況下,這是個救命稻草。
journalctl -p 3 -xb -2
如何查看某一特定時間、日期的日志記錄
journalctl 功能強大,可以在命令中提供類似英語的參數,用于時間和日期操作。
你可以使用 --since 選項與 yesterday、today、tomorrow 或 now 組合。
下面是一些不同命令的例子。你可以根據你的需要修改它們。它們是不言自明的。以下命令中的日期、時間格式為 "YYYY-MM-DD HH:MM:SS"
journalctl --since "2020-12-04 06:00:00"
journalctl --since "2020-12-03" --until "2020-12-05 03:00:00"
journalctl --since yesterday
journalctl --since 09:00 --until "1 hour ago"
你也可以將上述內容與錯誤級別開關結合起來。
如何查看內核特定的日志記錄
Linux 內核信息也可以從日志中提取出來。要查看當前啟動時的內核信息,請使用以下命令:
journalctl -k
如何查看某個服務、PID 的日志
你可以從 journald 日志中過濾出某個 systemd 服務單元的特定日志。例如,如果要查看 NetworkManager 服務的日志,請使用下面的命令。
journalctl -u NetworkManager.service
如果你不知道服務名稱,可以使用下面的命令來列出系統中的 systemd 服務。
systemctl list-units --type=service
如何查看用戶、組的日志
如果你正在分析服務器日志,在多個用戶登錄的情況下,這個命令很有幫助。你可以先用下面的命令從用戶名中找出用戶的 ID。例如,要找出用戶xurong的 ID:
id -u xurong
然后使用 _UID 選項指定該 ID 與來查看該用戶產生的日志。
journalctl _UID=1000 --since today(這里是新建做測試的用戶所以沒有日志)
如何查看一個可執行文件的日志
你也可以查看某個特定程序或可執行文件的日志。例如,如果你想找出 gnome-shell 的信息,你可以運行以下命令。
journalctl /xurong.sh --since today
售前咨詢
售后咨詢
備案咨詢
二維碼
TOP