linux journalctl 命令
什么是 journalctl?
journalctl 是 linux 系統中用于查看和檢索 systemd 日志的高效工具。作為 systemd 的一部分,它實現了統一的日志管理系統,取代了傳統的 syslog 機制。
主要特性
- 二進制日志格式:采用二進制方式存儲日志,提升查詢效率
- 結構化信息支持:允許附加元數據和結構化字段
- 實時追蹤功能:可動態監控日志更新
- 靈活過濾機制:支持按時間、服務名、優先級等條件篩選日志
基本語法
journalctl 的命令結構如下所示:
journalctl [選項] [匹配條件...]
常見參數說明
參數 | 描述 |
---|---|
`-b` | 顯示當前系統啟動后的日志 |
`-f` | 持續輸出新增日志(類似 tail -f) |
`-k` | 僅顯示內核相關消息 |
`-u` | 查看指定單元的日志 |
`-n` | 顯示最近的n條記錄 |
`–since` | 篩選指定時間之后的日志 |
`–until` | 篩選指定時間之前的日志 |
常用操作示例
1. 查看完整日志內容
示例
journalctl
2. 顯示本次開機產生的日志
示例
journalctl -b
3. 實時跟蹤日志變化
示例
journalctl -f
4. 查詢特定服務日志
示例
journalctl -u nginx.service
5. 按時間段篩選日志
示例
journalctl –since “2023-01-01 00:00:00” –until “2023-01-02 12:00:00”
6. 過濾錯誤級別日志
示例
journalctl -p err
日志優先級篩選
journalctl 提供基于優先級的過濾能力,具體等級定義如下:
等級 | 數值 | 描述 |
---|---|---|
emerg | 0 | 緊急事件 |
alert | 1 | 需要立即處理 |
crit | 2 | 嚴重錯誤 |
err | 3 | 一般性錯誤 |
warning | 4 | 警告信息 |
notice | 5 | 需要注意的情況 |
info | 6 | 常規信息 |
debug | 7 | 調試信息 |
使用案例:
示例
# 查看錯誤及更高級別的日志
journalctl -p err
# 查看警告及以上級別的日志
journalctl -p warning
高級功能應用
1. 查看日志磁盤占用情況
示例
journalctl –disk-usage
2. 清理過期日志
示例
# 保留最近兩天內的日志
journalctl –vacuum-time=2d
# 將日志總大小限制為500MB
journalctl –vacuum-size=500M
3. 輸出json格式
示例
journalctl -o json
4. 展示完整字段詳情
示例
journalctl -o verbose
5. 根據字段精確過濾
示例
# 查看指定進程ID的日志
journalctl _PID=1234
# 查看某個用戶相關的日志
journalctl _UID=1000
實用技巧分享
1. 多條件組合查詢
示例
# 查詢nginx服務從昨天開始的錯誤日志
journalctl -u nginx.service –since yesterday -p err
2. 分頁瀏覽日志
示例
journalctl | less
3. 導出日志到文件
示例
journalctl –since “2023-01-01” > journal.log
4. 顯示內核環形緩沖區信息
示例
journalctl -k
5. 查看系統啟動過程中的日志
示例
journalctl -b0 | grep “Starting”
常見問題處理
問題一:日志內容顯示不全
解決方法:
示例
# 取消分頁限制直接輸出
journalctl –no-pager
問題二:如何訪問舊的日志歸檔?
解決方法:
示例
# 顯示所有日志包括歷史存檔
journalctl -a
問題三:精準查詢特定時刻的日志?
解決方法: