日志查看神器 journalctl 詳解
今天分享一下 journalctl日志查看工具,它不僅功能強大,而且使用靈活,可以說是現代 Linux 系統日志查看的「瑞士軍刀」。
1. 什么是 journalctl?
journalctl 是 systemd 的一部分,用于查看由 systemd-journald 收集的日志數據。systemd-journald 會收集內核、服務、標準輸出、標準錯誤以及應用程序的日志信息,并統一管理、存儲。
相比傳統的 syslog + tail 方式,journalctl 提供了更強大的過濾、格式控制和時間跳轉能力。
2. 基礎用法
(1) 查看所有日志
# 打印所有級別的日志
journalctl
默認按時間順序輸出所有日志,可能非常長。
(2) 實時查看日志(相當于 tail -f)
journalctl -f
適合監控服務運行狀態,實時滾動顯示最新日志。
(3) 查看系統啟動日志
journalctl -b
-b 參數表示查看當前啟動周期的日志。-x參數顯示詳細信息:
journalctl -xb
# 過濾報錯信息
journalctl -xb |grep -i error
(4) 按時間范圍過濾日志
journalctl --since "2025-04-20 09:00" --until "2025-04-23 12:00"
journalctl --since "2 hours ago"
3. 強大的過濾機制
(1) 按服務過濾日志
journalctl -u docker.service
journalctl -u nginx.service
可以看到 nginx 服務的所有日志。
(2) 查看特定 PID 的日志
journalctl _PID=1234
(3) 按用戶 ID 過濾
journalctl _UID=1000
(4) 查看內核日志(類似 dmesg)
journalctl -k
4. 日志持久化配置
(1) 默認日志是臨時的嗎?
journal產生的日志默認是臨時,有些 Linux 發行版默認日志存儲在 /run/log/journal/,屬于非持久化,重啟就沒了。
(2) 如何開啟日志持久化?
sudo mkdir -p /var/log/journal
sudo systemd-tmpfiles --create --prefix /var/log/journal
sudo systemctl restart systemd-journald
重啟后日志就會存儲在 /var/log/journal/,永久保存。
5. 管理日志空間
修改 /etc/systemd/journald.conf,添加如下配置:
SystemMaxUse=500M # 日志文件最大空間
SystemKeepFree=100M # 至少保留這么多磁盤空間
SystemMaxFileSize=100M # 單個日志文件最大大小
SystemMaxFiles=10 # 最多保留幾個文件
配置后重啟服務生效:
sudo systemctl restart systemd-journald
6. 按日志級別過濾
journalctl -p err # 顯示錯誤及以上級別日志
journalctl -p warning # 顯示警告及以上級別日志
日志級別一覽(數字/名稱):
數值 | 名稱 | 說明 |
0 | emerg | 緊急,系統不可用 |
1 | alert | 需立刻處理 |
2 | crit | 嚴重 |
3 | err | 錯誤 |
4 | warning | 警告 |
5 | notice | 正常但重要信息 |
6 | info | 一般信息 |
7 | debug | 調試信息 |