[linux] journalctl神器使用

journalctl 神器使用 查看詳細日誌

前言

自從使用systemctl管理守護進程之後,真香。我的小飛機可以開機自啓動了。但因爲之前win平臺的ss有日誌,可以實時看到使用ss訪問的網頁地址,而linux下並沒有,而

systemctl status [email protected]

只能出來寥寥數行日誌。

在這裏插入圖片描述

解決

怎麼回事呢?原來是這個問題:

ss-local需要加上 -v參數纔有詳細日誌

加了-v(verbose)之後直接就顯示出了詳細日誌
在這裏插入圖片描述


另一個問題是以前的日誌怎麼顯示呢?
而且systemctl status xxx.service做多隻能顯示20行,怎麼辦?

這裏就需要journalctl登場了!

通俗的說,journalctl可以顯示每個守護進程分別的(當然也可以一起顯示)日誌,還可以過濾日誌的詳略。我會在末尾附上journalctl的詳細參數使用,這裏列出幾個我覺得比較常用的。

參數 作用 例子
-u (unit)指定某unit(服務)進行輸出 journalctl -u xxx.service
-f (follow)會保持持續輸出,不能和-r共用 journalctl -u -f xxx.service
-r (reverse)反轉輸出(最新的日誌先輸出) journalctl -r -u xxx.service
-S (since)從指定時間以來到現在的日誌,時間可以省略 journalctl -r -S 2018-12-23 17:24:36
-U (until)顯示早於指定時間的日誌 同上,二者均可使用yesterday等,具體看手冊
-b 會指定從某次開機起至關機的日誌,區分正負。默認值是-0,-1表示上一次開機,+1表示第一次開機。 journalctl -f -u xxx.service -b
-p 設置輸出日誌的優先級,0-7,從嚴重到不嚴重,比如4是輸出0-4,7是輸出0-7(4是warning,3是err) journalctl -r -u xxx.service -p 4
-o 控制輸出的格式,推薦cat 包含時間+信息 journalctl -f -u xxx.service -o cat
–disk-usage 顯示日誌文件磁盤用量 journalctl --disk-usage
–vacuum-size 清理(限制)日誌文件的大小 journalctl --vacuum-size 1G

然後在zshrc裏設置了快捷使用的小名

alias jlog='journalctl -f -o cat -u'

以後直接 jlog xxx.service(補全)就方便多了。最後截個圖給大家:

在這裏插入圖片描述


附錄

JOURNALCTL(1)                           journalctl                           JOURNALCTL(1)

NAME
       journalctl - 檢索 systemd 日誌

SYNOPSIS
       journalctl [OPTIONS...] [MATCHES...]

描述
       journalctl 可用於檢索 systemd(1) 日誌(由 systemd-journald.service(8) 記錄)。

       如果不帶任何參數直接調用此命令, 那麼將顯示所有日誌內容(從最早一條日誌記錄開始)。

       如果指定了 [MATCHES...]  參數, 那麼輸出的日誌將會按照 [MATCHES...]  參數進行過濾。
       MATCHE 必須符合 "FIELD=VALUE" 格式 (例如 "_SYSTEMD_UNIT=httpd.service" ), 參見
       systemd.journal-fields(7) 手冊以瞭解日誌字段的詳細介紹。 如果有多個不同的字段被
       [MATCHES...]  參數匹配, 那麼這些字段之間使用"AND"邏輯連接,
       也就是,日誌項必須同時滿足全部字段的匹配條件才能被輸出。 如果同一個字段被多個
       [MATCHES...]  參數匹配, 那麼這些匹配條件之間使用"OR"邏輯連接,
       也就是對於同一個字段,日誌項只需滿足任意一個匹配條件即可輸出。 最後, "+"
       字符可用作 [MATCHES...]  組之間的分隔符,並被視爲使用"OR"邏輯連接。 也就是,MATCHE1
       MATCHE2 + MATCHE3 MATCHE4 MATCHE5 + MATCHE6 MATCHE7 相當於 ( MATCHE1 MATCHE2 ) OR (
       MATCHE3 MATCHE4 MATCHE5 ) OR ( MATCHE6 MATCHE7 )

       還可以使用絕對路徑作爲參數來過濾日誌。
       絕對路徑可以是普通文件,也可以是軟連接,但必須指向一個確實存在的文件。
       如果路徑指向了一個二進制可執行文件, 那麼它實際上相當於是一個對 "_EXE="
       字段的匹配(僅匹配完整的絕對路徑)。 如果路徑指向了一個可執行腳本,
       那麼它實際上相當於是一個對 "_COMM=" 字段的匹配(僅匹配腳本的文件名)。
       如果路徑指向了一個設備節點, 那麼它實際上相當於是一個對 "_KERNEL_DEVICE="
       字段的匹配(匹配該設備及其所有父設備的內核設備名稱)。
       在查詢時,軟連接會被追蹤到底,內核設備名稱將被合成,
       父設備將按照當時的實際情況被提列出來。
       因爲日誌項一般並不包含標記實際物理設備的字段,
       所以,設備節點一般就是實際物理設備的最佳代表。
       但是又因爲設備節點與物理設備之間的對應關係在系統重啓之後可能會發生變化,
       所以,根據設備節點過濾日誌僅對本次啓動有意義,
       除非你能確認對應關係在重啓之後保持不變。

       可以使用 --boot, --unit= 等選項 進一步附加額外的約束條件(相當於使用"AND"邏輯連接)。

       最終的輸出結果來自所有可訪問的日誌文件的綜合,
       無論這些日誌文件是否正在滾動或者正在被寫入,
       也無論這些日誌文件是屬於系統日誌還是用戶日誌, 只要有訪問權限,就會被包括進來。

       用於提取日誌的日誌文件的集合可以使用 --user, --system, --directory, --file
       選項進行篩選。

       每個用戶都可以訪問其專屬的用戶日誌。 但是默認情況下, 只有root用戶以及
       "systemd-journal", "adm", "wheel" 組中的用戶纔可以訪問全部的日誌(系統與其他用戶)。
       注意,一般發行版還會給 "adm""wheel" 組一些其他額外的特權。 例如 "wheel"
       組的用戶一般都可以執行一些系統管理任務。

       默認情況下,結果會通過 less 工具進行分頁輸出, 並且超長行會在屏幕邊緣被截斷。
       不過,被截掉的部分可以通過左右箭頭按鍵查看。 如果不想分頁輸出,那麼可以使用
       --no-pager 選項,參見下面的"環境變量"小節。

       如果是輸出到 tty 的話,行的顏色還會根據日誌的級別變化: ERROR
       或更高級別爲紅色,NOTICE 或更高級別爲高亮,其他級別則正常顯示。

選項
       能夠識別的命令行選項如下:

       --no-full, --full, -l
           如果字段內容超長則以省略號(...)截斷以適應列寬。
           默認顯示完整的字段內容(超長的部分換行顯示或者被分頁工具截斷)。

           老舊的 -l/--full 選項 僅用於撤銷已有的 --no-full 選項,除此之外沒有其他用處。

       -a, --all
           完整顯示所有字段內容, 即使其中包含不可打印字符或者字段內容超長。

       -f, --follow
           只顯示最新的日誌項,並且不斷顯示新生成的日誌項。 此選項隱含了 -n 選項。

       -e, --pager-end
           在分頁工具內立即跳轉到日誌的尾部。 此選項隱含了 -n1000
           以確保分頁工具不必緩存太多的日誌行。 不過這個隱含的行數可以被明確設置的 -n
           選項覆蓋。 注意,此選項僅可用於 less(1) 分頁器。

       -n, --lines=
           限制顯示最新的日誌行數。 --pager-end 與 --follow 隱含了此選項。
           此選項的參數:若爲正整數則表示最大行數; 若爲 "all" 則表示不限制行數;
           若不設參數則表示默認值10行。

       --no-tail
           顯示所有日誌行, 也就是用於撤銷已有的 --lines= 選項(即使與 -f 連用)。

       -r, --reverse
           反轉日誌行的輸出順序, 也就是最先顯示最新的日誌。

       -o, --output=
           控制日誌的輸出格式。 可以使用如下選項:

           short
               這是默認值, 其輸出格式與傳統的 syslog[1] 文件的格式相似, 每條日誌一行。

           short-iso
               與 short 類似,只是將時間戳字段以 ISO 8601 格式顯示。

           short-precise
               與 short 類似,只是將時間戳字段的秒數精確到微秒級別。

           short-monotonic
               與 short 類似,只是將時間戳字段的零值從內核啓動時開始計算。

           short-unix
               與 short 類似,只是將時間戳字段顯示爲從"UNIX時間原點"(1970-1-1 00:00:00
               UTC)以來的秒數。 精確到微秒級別。

           verbose
               以結構化的格式顯示每條日誌的所有字段。

           export
               將日誌序列化爲二進制字節流(大部分依然是文本) 以適用於備份與網絡傳輸(詳見
               Journal Export Format[2] 文檔)。

           json
               將日誌項按照JSON數據結構格式化, 每條日誌一行(詳見 Journal JSON Format[3]
               文檔)。

           json-pretty
               將日誌項按照JSON數據結構格式化, 但是每個字段一行, 以便於人類閱讀。

           json-sse
               將日誌項按照JSON數據結構格式化,每條日誌一行,但是用大括號包圍, 以適應
               Server-Sent Events[4] 的要求。

           cat
               僅顯示日誌的實際內容, 而不顯示與此日誌相關的任何元數據(包括時間戳)。

       --utc
           以世界統一時間(UTC)表示時間

       --no-hostname
           不顯示來源於本機的日誌消息的主機名字段。 此選項僅對 short
           系列輸出格式(見上文)有效。

       -x, --catalog
           在日誌的輸出中增加一些解釋性的短文本, 以幫助進一步說明日誌的含義、
           問題的解決方案、支持論壇、 開發文檔、以及其他任何內容。
           並非所有日誌都有這些額外的幫助文本, 詳見 Message Catalog Developer
           Documentation[5] 文檔。

           注意,如果要將日誌輸出用於bug報告, 請不要使用此選項。

       -q, --quiet
           當以普通用戶身份運行時, 不顯示任何警告信息與提示信息。 例如:"-- Logs begin at
           ...", "-- Reboot --"

       -m, --merge
           混合顯示包括遠程日誌在內的所有可見日誌。

       -b [ID][±offset], --boot=[ID][±offset]
           顯示特定於某次啓動的日誌, 這相當於添加了一個 "_BOOT_ID=" 匹配條件。

           如果參數爲空(也就是 ID 與 ±offset 都未指定), 則表示僅顯示本次啓動的日誌。

           如果省略了 ID , 那麼當 ±offset 是正數的時候, 將從日誌頭開始正向查找,
           否則(也就是爲負數或零)將從日誌尾開始反響查找。 舉例來說, "-b
           1"表示按時間順序排列最早的那次啓動, "-b 2"則表示在時間上第二早的那次啓動; "-b
           -0"表示最後一次啓動, "-b -1"表示在時間上第二近的那次啓動, 以此類推。 如果
           ±offset 也省略了, 那麼相當於"-b -0", 除非本次啓動不是最後一次啓動(例如用
           --directory 指定了另外一臺主機上的日誌目錄)。

           如果指定了32字符的 ID , 那麼表示以此 ID 所代表的那次啓動爲基準
           計算偏移量(±offset), 計算方法同上。 換句話說, 省略 ID 表示以本次啓動爲基準
           計算偏移量(±offset)。

       --list-boots
           列出每次啓動的 序號(也就是相對於本次啓動的偏移量)、32字符的ID、
           第一條日誌的時間戳、最後一條日誌的時間戳。

       -k, --dmesg
           僅顯示內核日誌。隱含了 -b 選項以及 "_TRANSPORT=kernel" 匹配項。

       -t, --identifier=SYSLOG_IDENTIFIER
           僅顯示 syslog[1] 識別符爲 SYSLOG_IDENTIFIER 的日誌項。

           可以多次使用該選項以指定多個識別符。

       -u, --unit=UNIT|PATTERN
           僅顯示屬於特定單元的日誌。 也就是單元名稱正好等於 UNIT 或者符合 PATTERN
           模式的單元。 這相當於添加了一個 "_SYSTEMD_UNIT=UNIT" 匹配項(對於 UNIT 來說),
           或一組匹配項(對於 PATTERN 來說)。

           可以多次使用此選項以添加多個並列的匹配條件(相當於用"OR"邏輯連接)。

       --user-unit=
           僅顯示屬於特定用戶會話單元的日誌。 相當於同時添加了 "_SYSTEMD_USER_UNIT=""_UID=" 兩個匹配條件。

           可以多次使用此選項以添加多個並列的匹配條件(相當於用"OR"邏輯連接)。

       -p, --priority=
           根據日誌等級(包括等級範圍)過濾輸出結果。 日誌等級數字與其名稱之間的對應關係如下
           (參見 syslog(3))"emerg" (0), "alert" (1), "crit" (2), "err" (3),
           "warning" (4), "notice" (5), "info" (6), "debug" (7) 。
           若設爲一個單獨的數字或日誌等級名稱, 則表示僅顯示小於或等於此等級的日誌
           (也就是重要程度等於或高於此等級的日誌)。 若使用 FROM..TO.. 設置一個範圍,
           則表示僅顯示指定的等級範圍內(含兩端)的日誌。 此選項相當於添加了 "PRIORITY="
           匹配條件。

       -c, --cursor=
           從指定的遊標(cursor)開始顯示日誌。
           [提示]每條日誌都有一個"__CURSOR"字段,類似於該條日誌的指紋。

       --after-cursor=
           從指定的遊標(cursor)之後開始顯示日誌。 如果使用了 --show-cursor 選項,
           則也會顯示遊標本身。

       --show-cursor
           在最後一條日誌之後顯示遊標, 類似下面這樣,以"--"開頭:

               -- cursor: s=0639...

           遊標的具體格式是私有的(也就是沒有公開的規範), 並且會變化。

       -S, --since=, -U, --until=
           顯示晚於指定時間(--since=)的日誌、顯示早於指定時間(--until=)的日誌。
           參數的格式類似 "2012-10-30 18:17:16" 這樣。 如果省略了"時:分:秒"部分,
           則相當於設爲 "00:00:00" 。 如果僅省略了"秒"的部分則相當於設爲 ":00" 。
           如果省略了"年-月-日"部分, 則相當於設爲當前日期。 除了"年-月-日 時:分:秒"格式,
           參數還可以進行如下設置: (1)設爲 "yesterday", "today", "tomorrow"
           以表示那一天的零點(00:00:00)(2)設爲 "now" 以表示當前時間。
           (3)可以在"年-月-日 時:分:秒"前加上 "-"(前移)"+"(後移)
           前綴以表示相對於當前時間的偏移。 關於時間與日期的詳細規範, 參見
           systemd.time(7)

       -F, --field=
           顯示所有日誌中某個字段的所有可能值。 [譯者注]類似於SQL語句:"SELECT DISTINCT
           某字段 FROM 全部日誌"

       -N, --fields
           輸出所有日誌字段的名稱

       --system, --user
           僅顯示系統服務與內核的日誌(--system)、 僅顯示當前用戶的日誌(--user)。
           如果兩個選項都未指定,則顯示當前用戶的所有可見日誌。

       -M, --machine=
           顯示來自於正在運行的、特定名稱的本地容器的日誌。 參數必須是一個本地容器的名稱。

       -D DIR, --directory=DIR
           僅顯示來自於特定目錄中的日誌, 而不是默認的運行時和系統日誌目錄中的日誌。

       --file=GLOB
           GLOB 是一個可以包含"?""*"的文件路徑匹配模式。 表示僅顯示來自與指定的 GLOB
           模式匹配的文件中的日誌, 而不是默認的運行時和系統日誌目錄中的日誌。
           可以多次使用此選項以指定多個匹配模式(多個模式之間用"OR"邏輯連接)。

       --root=ROOT
           在對日誌進行操作時, 將 ROOT 視爲系統的根目錄。 例如 --update-catalog 將會創建
           ROOT/var/lib/systemd/catalog/database

       --new-id128
           此選項並不用於顯示日誌內容, 而是用於重新生成一個標識日誌分類的 128-bit ID 。
           此選項的目的在於 幫助開發者生成易於辨別的日誌消息, 以方便調試。

       --header
           此選項並不用於顯示日誌內容, 而是用於顯示日誌文件內部的頭信息(類似於元數據)。

       --disk-usage
           此選項並不用於顯示日誌內容,
           而是用於顯示所有日誌文件(歸檔文件與活動文件)的磁盤佔用總量。

       --vacuum-size=, --vacuum-time=, --vacuum-files=
           這些選項並不用於顯示日誌內容,
           而是用於清理日誌歸檔文件(並不清理活動的日誌文件), 以釋放磁盤空間。
           --vacuum-size= 可用於限制歸檔文件的最大磁盤使用量 (可以使用 "K", "M", "G", "T"
           後綴); --vacuum-time= 可用於清除指定時間之前的歸檔 (可以使用 "s", "m", "h",
           "days", "weeks", "months", "years" 後綴); --vacuum-files=
           可用於限制日誌歸檔文件的最大數量。 注意,--vacuum-size= 對 --disk-usage
           的輸出僅有間接效果, 因爲 --disk-usage 輸出的是歸檔日誌與活動日誌的總量。
           同樣,--vacuum-files= 也未必一定會減少日誌文件的總數,
           因爲它同樣僅作用於歸檔文件而不會刪除活動的日誌文件。
           此三個選項可以同時使用,以同時從三個維度去限制歸檔文件。
           若將某選項設爲零,則表示取消此選項的限制。

       --list-catalog [128-bit-ID...]
           簡要列出日誌分類信息, 其中包括對分類信息的簡要描述。

           如果明確指定了分類ID(128-bit-ID), 那麼僅顯示指定的分類。

       --dump-catalog [128-bit-ID...]
           詳細列出日誌分類信息 (格式與 .catalog 文件相同)。

           如果明確指定了分類ID(128-bit-ID), 那麼僅顯示指定的分類。

       --update-catalog
           更新日誌分類索引二進制文件。
           每當安裝、刪除、更新了分類文件,都需要執行一次此動作。

       --setup-keys
           此選項並不用於顯示日誌內容, 而是用於生成一個新的FSS(Forward Secure
           Sealing)密鑰對。 此密鑰對包含一個"sealing key"與一個"verification key""sealing key"保存在本地日誌目錄中, 而"verification key"則必須保存在其他地方。
           詳見 journald.conf(5) 中的 Seal= 選項。

       --force
           與 --setup-keys 連用, 表示即使已經配置了FSS(Forward Secure Sealing)密鑰對,
           也要強制重新生成。

       --interval=
           與 --setup-keys 連用,指定"sealing key"的變化間隔。
           較短的時間間隔會導致佔用更多的CPU資源, 但是能夠減少未檢測的日誌變化時間。
           默認值是 15min

       --verify
           檢查日誌文件的內在一致性。 如果日誌文件在生成時開啓了FSS特性, 並且使用
           --verify-key= 指定了FSS的"verification key",
           那麼,同時還將驗證日誌文件的真實性。

       --verify-key=
           與 --verify 選項連用, 指定FSS的"verification key"

       --sync
           要求日誌守護進程將所有未寫入磁盤的日誌數據刷寫到磁盤上,
           並且一直阻塞到刷寫操作實際完成之後才返回。 因此該命令可以保證當它返回的時候,
           所有在調用此命令的時間點之前的日誌, 已經全部安全的刷寫到了磁盤中。

       --flush
           要求日誌守護進程 將 /run/log/journal 中的日誌數據 刷寫到 /var/log/journal 中
           (如果持久存儲設備當前可用的話)。 此操作會一直阻塞到操作完成之後纔會返回,
           因此可以確保在該命令返回時, 數據轉移確實已經完成。
           注意,此命令僅執行一個單獨的、一次性的轉移動作, 若沒有數據需要轉移,
           則此命令什麼也不做, 並且也會返回一個表示操作已正確完成的返回值。

       --rotate
           要求日誌守護進程滾動日誌文件。 此命令會一直阻塞到滾動完成之後纔會返回。

       -h, --help
           顯示簡短的幫助信息並退出。

       --version
           顯示簡短的版本信息並退出。

       --no-pager
           不將程序的輸出內容管道(pipe)給分頁程序。

退出狀態
       返回值爲 0 表示成功, 非零返回值表示失敗代碼。

環境變量
       $SYSTEMD_PAGER
           指定分頁程序。僅在未指定 --no-pager 選項時有意義。 此變量會覆蓋 $PAGER 的值。
           將此變量設爲空字符串或 "cat" 等價於使用 --no-pager 選項。

       $SYSTEMD_LESS
           用於覆蓋 默認傳遞給 less 程序的命令行選項 ("FRSXMK")。

例子
       不帶任何選項與參數,表示顯示全部日誌

           journalctl

       僅指定一個匹配條件, 顯示所有符合該匹配條件的日誌

           journalctl _SYSTEMD_UNIT=avahi-daemon.service

       指定了兩個不同字段的匹配條件, 顯示同時滿足兩個匹配條件的日誌

           journalctl _SYSTEMD_UNIT=avahi-daemon.service _PID=28097

       指定了同一個字段的兩個不同匹配條件, 顯示滿足其中任意一個條件的日誌

           journalctl _SYSTEMD_UNIT=avahi-daemon.service _SYSTEMD_UNIT=dbus.service

       使用 "+" 連接兩組匹配條件, 相當於邏輯"OR"連接

           journalctl _SYSTEMD_UNIT=avahi-daemon.service _PID=28097 + _SYSTEMD_UNIT=dbus.service

       顯示所有 D-Bus 進程產生的日誌

           journalctl /usr/bin/dbus-daemon

       顯示上一次啓動所產生的所有內核日誌

           journalctl -k -b -1

       持續顯示 apache.service 服務不斷生成的日誌

           journalctl -f -u apache

參見
       systemd(1), systemd-journald.service(8), systemctl(1), coredumpctl(1),
       systemd.journal-fields(7), journald.conf(5), systemd.time(7)

NOTES
        1. syslog
           //linux/sysklogd.html

        2. Journal Export Format
           http://www.freedesktop.org/wiki/Software/systemd/export

        3. Journal JSON Format
           http://www.freedesktop.org/wiki/Software/systemd/json

        4. Server-Sent Events
           https://developer.mozilla.org/en-US/docs/Server-sent_events/Using_server-sent_events

        5. Message Catalog Developer Documentation
           http://www.freedesktop.org/wiki/Software/systemd/catalog

跋
       本頁面中文版由中文 man 手冊頁計劃提供。

       翻譯人員:金步國
       金步國作品集:http://www.jinbuguo.com
       中文 man 手冊頁計劃:https://github.com/man-pages-zh/manpages-zh

systemd 231                                                                  JOURNALCTL(1)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章