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