在Systemd出現之前,Linux系統及各應用的日志都是分別管理的,Systemd開始統一管理了所有Unit的啟動日志,
systemd-journald 服務是 systemd init 系統提供的收集系統日志的服務,
這樣帶來的好處是只用一個journalctl命令,就可以查看所有內核和應用的日志。
systemd-journald 服務收集到的日志默認保存在 /run/log 目錄中,重啟系統會丟掉以前的日志信息。
journalctl 命令格式為:journalctl [OPTIONS…] [MATCHES…]
journalctl 命令的路徑為:/bin/journalctl
一、基本用法
journalctl -h 查看基本用法參數說明;
journalctl [-b] 查看所有日志,默認顯示本次啟動的所有日志,基本不用,因為太多了;
journalctl -k 查看內核日志;
journalctl -u 查看指定服務的日志;
journalctl --since --until 查看指定時間的日志,時間格式為"2020-05-13 13:14:00";
journalctl -n 指定顯示最近的多少行,默認為10行;
journalctl -f 持續監控日志輸出;
journal --no-pager 設置不分頁顯示;
journalctl -p 查看指定級別的日志;
操作系統提供了從0 (emerg) 到 7 (debug) 一共7個級別的日志,含義如下:
0: emerg
1: alert
2: crit
3: err
4: warning
5: notice
6: info
7: debug
journal -o 設置輸出格式,支持的各種格式如下:
cat: 只顯示信息字段本身。
export: 適合傳輸或備份的二進制格式。
json: 標准JSON,每行一個條目。
json-pretty: JSON格式,適合人類閱讀習慣。
json-sse: JSON格式,經過打包以兼容server-sent事件。
short: 默認syslog類輸出格式。
short-iso: 默認格式,強調顯示ISO 8601掛鍾時間戳。
short-monotonic: 默認格式,提供普通時間戳。
short-precise: 默認格式,提供微秒級精度。
verbose: 顯示該條目的全部可用journal字段,包括通常被內部隱藏的字段。
除了以上參數外,我們可以通過 "FIELD=VALUE" 的格式來匹配具體的日志記錄,如_PID=1,也可以指定多個field或相同field的多個值來限制篩選;
日志信息的定義也類似一個實體類型,具體的信息被保存在各個對應的字段中,比如 MESSAGE、MESSAGE_ID、_PID、_UID 、_HOSTNAME、_SYSTEMD_UNIT 等等,
通過 man systemd.journal-fields 查看所有可以用來過濾的字段,對於用來篩選的字段,可以使用-F參數來查看所有可以用來過濾的值,例如 journalctl -F _PID。
二、維護和配置
journalctl --disk-usage 查看日志占用的磁盤空間;
journalctl --vacuum-size=500M 設置日志占用的空間;
journalctl --vacuum-time=1month 設置日志保存的時間;
上面的一些維護動作,也可以通過配置參數設置,配置文件為/etc/systemd/journald.conf,常用參數如下:
SystemMaxUse=:指定journal所能使用的最高持久存儲容量。
SystemKeepFree=:指定journal在添加新條目時需要保留的剩余空間。
SystemMaxFileSize=:控制單一journal文件大小,符合要求方可被轉為持久存儲。
RuntimeMaxUse=:指定易失性存儲中的最大可用磁盤容量(/run文件系統之內)。
RuntimeKeepFree=:指定向易失性存儲內寫入數據時為其它應用保留的空間量(/run文件系統之內)。
RuntimeMaxFileSize=:指定單一journal文件可占用的最大易失性存儲容量(/run文件系統之內)
通過設置上述值,大家可以控制 systemd-journald 服務對服務器空間的消耗及保留方式。
