在Systemd出現之前,Linux系統及各應用的日志都是分別管理的,Systemd開始統一管理了所有Unit的啟動日志,這樣帶來的好處就是可以只用一個 journalctl命令,查看所有內核和應用的日志。
1. 基礎用法
1.1 查看所有日志(默認顯示本次啟動的所有日志)
[root@devops-101 ~]# journalctl
查看本次啟動的所有日志也可以使用
[root@devops-101 ~]# journalctl -b
1.2 查看內核日志
[root@devops-101 ~]# journalctl -k
1.3 查看指定時間的日志
通過--since和--until選項,可以過濾任意時間限制,顯示指定條件之前、之后或之間的日志。
[root@devops-101 ~]# journalctl --since="2018-09-21 10:21:00"
查詢一個時間段范圍內的日志。
[root@devops-101 ~]# journalctl --since="2018-09-21 10:21:00" --until="2018-09-21 10:22:00"
1.4 根據不同的主題進行過濾篩選
根據服務篩選
[root@devops-101 ~]# journalctl -u kubelet.service
[root@devops-101 ~]# journalctl -u kubelet
根據進程ID查詢
如果進程使用了systemd托管日志,則可以通過以下命令查找進程對應的日志。
[root@devops-101 ~]# journalctl _PID=1
Systemd journal 有很多可以用來過濾的字段,可以通過
man systemd.journal-fields
查看所有可以用來過濾的字段。對於用來篩選的字段,可以使用-F
參數來查看所有可以用來過濾的值,例如journalctl -F _PID
。
按優先級
操作系統提供了從0 (emerg) 到 7 (debug) 一共7個級別的日志,可以配合-p參數分別查看對應級別的日志。
[root@devops-101 ~]# journalctl -p 5 -u kubelet
7個級別的含義為
- 0: emerg
- 1: alert
- 2: crit
- 3: err
- 4: warning
- 5: notice
- 6: info
- 7: debug
1.5 調整顯示輸出
默認情況,journal輸出進入分頁模式,用戶可以在終端上調整顯示的內容,如果要不需要分頁,需要加上--no-pager
參數。
以Json格式輸出
[root@devops-101 ~]# journalctl -p 5 --no-pager -o json
通過-o
參數,可以設置為json格式輸出,這對於其他接收json格式的日志分析工具非常友好。
[root@devops-101 ~]# journalctl -p 5 --no-pager -o json-pretty
使用json-pretty
則對於管理員查看日志非常易讀。
支持的各種格式如下:
- cat: 只顯示信息字段本身。
- export: 適合傳輸或備份的二進制格式。
- json: 標准JSON,每行一個條目。
- json-pretty: JSON格式,適合人類閱讀習慣。
- json-sse: JSON格式,經過打包以兼容server-sent事件。
- short: 默認syslog類輸出格式。
- short-iso: 默認格式,強調顯示ISO 8601掛鍾時間戳。
- short-monotonic: 默認格式,提供普通時間戳。
- short-precise: 默認格式,提供微秒級精度。
- verbose: 顯示該條目的全部可用journal字段,包括通常被內部隱藏的字段。
1.6 活動日志跟蹤
journalctl也支持類似tail的功能,如通過-n
參數指定顯示最近的多少行,默認為10行,通過-f
參數持續監控日志輸出。
2. 維護
2.1 查看日志占用的磁盤空間
[root@devops-101 ~]# journalctl --disk-usage
Archived and active journals take up 8.0M on disk.
2.2 設置日志占用的空間
root@devops-101 ~]# journalctl --vacuum-size=500M
Vacuuming done, freed 0B of archived journals on disk.
2.3 設置日志保存的時間
[root@devops-101 ~]# journalctl --vacuum-time=1month
Vacuuming done, freed 0B of archived journals on disk.
3. 配置
上面的一些維護動作,也可以通過配置參數設置,配置文件位於/etc/systemd/journald.conf
。
- Storage=persistent
- Compress=yes
- Seal=yes
- SplitMode=uid
- SyncIntervalSec=5m
- RateLimitInterval=30s
- RateLimitBurst=1000
- SystemMaxUse=
- SystemKeepFree=
- SystemMaxFileSize=
- RuntimeMaxUse=
- RuntimeKeepFree=
- RuntimeMaxFileSize=
- MaxRetentionSec=
- MaxFileSec=1month
- ForwardToSyslog=yes
- ForwardToKMsg=no
- ForwardToConsole=no
- ForwardToWall=yes
- TTYPath=/dev/console
- MaxLevelStore=debug
- MaxLevelSyslog=debug
- MaxLevelKMsg=notice
- MaxLevelConsole=info
- MaxLevelWall=emerg