使用journalctl查看systemd日志


systemd 取代 SUSE Linux Enterprise 12 中的傳統 init 程序管理 (請參閱第 13 章 「systemd 使用」),引入了自身的記錄系統日誌。由於所有系統事件都將寫入到日誌中,因此,使用者不再需要執行基於 syslog 的服務。

日誌本身是 systemd 管理的系統服務,完整名稱為 systemd-journald.service。它會根據從核心、使用者程序、標準輸入和系統服務錯誤收到的記錄資訊,維護結構化的索引記錄,藉以收集和儲存記錄資料。systemd-journald 服務預設處於開啟狀態。

# systemctl status systemd-journald
systemd-journald.service - Journal Service   
    Loaded: loaded (/usr/lib/systemd/system/systemd-journald.service; static)   
    Active: active (running) since Mon 2014-05-26 08:36:59 EDT; 3 days ago     
    Docs: man:systemd-journald.service(8)           
        man:journald.conf(5)
    Main PID: 413 (systemd-journal)   
    Status: "Processing requests..."   
    CGroup: /system.slice/systemd-journald.service
           └─413 /usr/lib/systemd/systemd-journald
[...]

依預設,日誌在 /run/log/journal/ 中儲存記錄資料。由於 /run/ 目錄具有易失本性,因此,在重新開機時會遺失記錄資料。若要永久儲存記錄資料,/var/log/journal/ 目錄必須存在且具有正確的擁有權和許可權,如此,systemd-journald 服務便可在其中儲存其資料。systemd 將為您建立該目錄,如果您執行以下操作,它將會切換到永久記錄︰

  1. 以 root 身分開啟 /etc/systemd/journald.conf 進行編輯。

    # vi /etc/systemd/journald.conf
  2. 取消註解包含 Storage= 的行,並將它變更為

    [...]
    [Journal]
    Storage=persistent
    #Compress=yes
    [...]
  3. 儲存該檔案,然後重新啟動 systemd-journald︰

    systemctl restart systemd-journald

本節介紹了一些可用來增強 journalctl 預設行為的常見有用選項。journalctl 手冊頁 man 1 journalctl 中介紹了所有參數。

提示:與特定可執行檔相關的訊息

若要顯示與特定可執行檔相關的所有日誌訊息,請指定該可執行檔的完整路徑︰

journalctl /usr/lib/systemd/systemd

-f:只顯示最近的日誌訊息,另外,在將新的記錄項目新增到日誌時會列印這些新項目。

-e:列印訊息並跳轉到日誌末尾,以便在頁面巡覽區中顯示最新的項目。

-r:以反向順序列印記錄訊息,使最新的項目列在最前面。

-k:只顯示核心訊息。這等同於欄位比對 _TRANSPORT=kernel (請參閱第 15.3.3 節 「依據欄位過濾」)。

-u:只顯示指定 systemd 單元的訊息。這等同於欄位比對 _SYSTEMD_UNIT=UNIT (請參閱第 15.3.3 節 「依據欄位過濾」)。

# journalctl -u apache2
[...]
Jun 03 10:07:11 pinkiepie systemd[1]: Starting The Apache Webserver...
Jun 03 10:07:12 pinkiepie systemd[1]: Started The Apache Webserver.

如果不結合任何參數呼叫 journalctl,它將顯示日誌的完整內容,最舊的項目列在最前面。可按特定的參數和欄位過濾輸出。

journalctl 可以依據特定的系統開機編號過濾訊息。若要列出所有可用的開機,請執行

# journalctl --list-boots
-1 097ed2cd99124a2391d2cffab1b566f0 Mon 2014-05-26 08:36:56 EDT—Fri 2014-05-30 05:33:44 EDT
 0 156019a44a774a0bb0148a92df4af81b Fri 2014-05-30 05:34:09 EDT—Fri 2014-05-30 06:15:01 EDT

第一欄列出開機偏移︰0 表示目前的開機,-1 表示上一次開機,-2 表示再上一次的開機,依此類推。第二欄包含開機 ID,其後是特定開機的限制時間戳記。

顯示目前開機中的所有訊息︰

如果需要查看上一次開機的記錄訊息,請新增一個偏移參數。下面的範例將輸出上一次開機的訊息︰

另一種方法是依據開機 ID 列出開機訊息。要實現此目的,請使用 _BOOT_ID 欄位︰

# journalctl _BOOT_ID=156019a44a774a0bb0148a92df4af81b

可透過指定開始日期和 / 或結束日期來過濾 journalctl 的輸出。日期規格應採用「2014-06-30 9:17:16」這樣的格式。如果省略時間部分,則會假設為午夜。如果省略秒,則會假設為「:00」。如果省略日期部分,則會假設為目前日期。您也可以不採用數字表示法,而是指定關鍵字「yesterday」、「today」或「tomorrow」。它們表示當日前一天、當日或者當日後一天的午夜。如果指定「now」,則表示目前時間。您還可以指定以 - 或 + 為字首的相對時間,分別表示目前時間之前或之後的特定時間。

僅顯示從現在開始產生的新訊息,並持續更新輸出︰

# journalctl --since "now" -f

顯示從昨天午夜到 3:20AM 的所有訊息︰

# journalctl --since "today" --until "3:20"

您可以按特定的欄位過濾日誌輸出。要比對的欄位語法為 FIELD_NAME=MATCHED_VALUE,例如 _SYSTEMD_UNIT=httpd.service。您可以在單個查詢中指定多個比對條件,以更精確地過濾輸出訊息。如需預設欄位的清單,請參閱 man 7 systemd.journal-fields

顯示特定程序 ID 產生的訊息︰

顯示屬於特定使用者 ID 的訊息︰

顯示來自核心環緩衝區的訊息 (與 dmesg 產生的結果相同)︰

# journalctl _TRANSPORT=kernel

顯示來自服務之標準輸出或錯誤輸出的訊息︰

# journalctl _TRANSPORT=stdout

僅顯示指定服務產生的訊息︰

# journalctl _SYSTEMD_UNIT=avahi-daemon.service

如果指定了兩個不同的欄位,則僅顯示同時與兩個運算式相符的項目︰

# journalctl _SYSTEMD_UNIT=avahi-daemon.service _PID=1488

如果兩個比對參考了同一個欄位,則顯示與兩個運算式中任意一個相符的所有項目︰

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

可以使用「+」分隔符將兩個運算式組合成一個邏輯「OR」。下面的範例將顯示來自程序 ID 為 1480 之 Avahi 服務程序的所有訊息,以及來自 D-Bus 服務的所有訊息︰

# journalctl _SYSTEMD_UNIT=avahi-daemon.service _PID=1480 + _SYSTEMD_UNIT=dbus.service

本節將介紹一個簡單的範例,說明如何找出並修復 systemd 在 apache2 啟動期間報告的錯誤。

  1. 嘗試啟動 apache2 服務︰

    # systemctl start apache2
    Job for apache2.service failed. See 'systemctl status apache2' and 'journalctl -xn' for details.
  2. 我們來看看該服務的狀態如何︰

    # systemctl status apache2
    apache2.service - The Apache Webserver
       Loaded: loaded (/usr/lib/systemd/system/apache2.service; disabled)
       Active: failed (Result: exit-code) since Tue 2014-06-03 11:08:13 CEST; 7min ago
      Process: 11026 ExecStop=/usr/sbin/start_apache2 -D SYSTEMD -DFOREGROUND \
               -k graceful-stop (code=exited, status=1/FAILURE)

    導致錯誤的程序 ID 為 11026。

  3. 顯示與程序 ID 11026 相關的詳細訊息︰

    # journalctl -o verbose _PID=11026
    [...]
    MESSAGE=AH00526: Syntax error on line 6 of /etc/apache2/default-server.conf:
    [...]
    MESSAGE=Invalid command 'DocumenttRoot', perhaps misspelled or defined by a module
    [...]
  4. 改正 /etc/apache2/default-server.conf 中的錯字,啟動 apache2 服務,然後列印其狀態︰

    # systemctl start apache2 && systemctl status apache2
    apache2.service - The Apache Webserver
       Loaded: loaded (/usr/lib/systemd/system/apache2.service; disabled)
       Active: active (running) since Tue 2014-06-03 11:26:24 CEST; 4ms ago
      Process: 11026 ExecStop=/usr/sbin/start_apache2 -D SYSTEMD -DFOREGROUND
               -k graceful-stop (code=exited, status=1/FAILURE)
     Main PID: 11263 (httpd2-prefork)
       Status: "Processing requests..."
       CGroup: /system.slice/apache2.service
               ├─11263 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf -D [...]
               ├─11280 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf -D [...]
               ├─11281 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf -D [...]
               ├─11282 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf -D [...]
               ├─11283 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf -D [...]
               └─11285 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf -D [...]

可透過修改 /etc/systemd/journald.conf 來調整 systemd-journald 服務的行為。本節只介紹基本的選項設定。如需完整的檔案描述,請參閱 man 5 journald.conf。請注意,若要使變更生效,必須使用以下指令重新啟動日誌

# systemctl restart systemd-journald

如果將日誌記錄資料儲存到永久位置 (請參閱第 15.1 節 「將日誌設為永久」),這些資料最多可佔用 /var/log/journal 所在檔案系統空間的 10%。例如,如果 /var/log/journal 位於一個 30 GB 的 /var 分割區中,則日誌最多可佔用 3 GB 磁碟空間。若要變更此限制,請變更 (並取消註解) SystemMaxUse 選項︰

您可以將日誌轉遞到終端機裝置,以便在偏好的終端機螢幕 (例如 /dev/tty12) 上顯式相關的系統訊息。將以下 journald 選項變更為

ForwardToConsole=yes
TTYPath=/dev/tty12

Journald 與傳統的 syslog 實作 (例如 rsyslog) 回溯相容。請務必滿足以下條件︰

  • 已安裝 rsyslog。

    # rpm -q rsyslog
    rsyslog-7.4.8-2.16.x86_64
  • 已啟用 rsyslog 服務。

    # systemctl is-enabled rsyslog
    enabled
    ForwardToSyslog=yes
  • 已在 /etc/systemd/journald.conf 中啟用轉遞至 syslog。


使用journalctl查看systemd日志

当启动service失败或者出现异常时,我们同行需要查看systemd的日志。 journalctl就是最常用的查看systemd日志的工具了。

systemd-journald.service

systemd本身使用 systemd-journald.service 来提供日志服务. 它默认以二进制的格式将日志文件存在 /var/log/journal/ 目录中.

ls -R /var/log/journal/

/var/log/journal/:
c291481e2d9b4024b6315308254f29df
remote

/var/log/journal/c291481e2d9b4024b6315308254f29df:
system@b06763dfb5d9474bbf08a41aafa705db-0000000000000001-00054f69725bd1f4.journal
system@b06763dfb5d9474bbf08a41aafa705db-000000000000b4fb-000551d6d83e3bec.journal
system@b06763dfb5d9474bbf08a41aafa705db-0000000000011330-00055283e814ebff.journal
system@b06763dfb5d9474bbf08a41aafa705db-000000000001f0f2-000554ef5835cba3.journal
system@b06763dfb5d9474bbf08a41aafa705db-000000000001f26f-000554ef5d159c4d.journal
system@b06763dfb5d9474bbf08a41aafa705db-000000000002e434-0005575684e0156a.journal
system@b06763dfb5d9474bbf08a41aafa705db-000000000002e59d-0005575694a45c89.journal
system@b06763dfb5d9474bbf08a41aafa705db-0000000000041f7f-000559d3e2618783.journal
system@b06763dfb5d9474bbf08a41aafa705db-00000000000420e3-000559d411759d7a.journal
system@b06763dfb5d9474bbf08a41aafa705db-0000000000053108-00055c3ebcc97ddd.journal
system@b06763dfb5d9474bbf08a41aafa705db-0000000000053268-00055c3ecdad6b24.journal
system@b06763dfb5d9474bbf08a41aafa705db-0000000000060b5e-00055ea67129b27f.journal
system@b06763dfb5d9474bbf08a41aafa705db-0000000000060cc2-00055ea750da7423.journal
system@b06763dfb5d9474bbf08a41aafa705db-00000000000705c2-0005610bae10254c.journal
system@b06763dfb5d9474bbf08a41aafa705db-000000000007f115-000563724facc0ec.journal
system@b06763dfb5d9474bbf08a41aafa705db-000000000007f2a6-00056372622f1fb9.journal
system@b06763dfb5d9474bbf08a41aafa705db-0000000000089e54-000565e109b67bae.journal
system@b06763dfb5d9474bbf08a41aafa705db-000000000008a147-000565e11109f819.journal
system@b06763dfb5d9474bbf08a41aafa705db-000000000009d3f5-00056846b7b72568.journal
system@b06763dfb5d9474bbf08a41aafa705db-000000000009d6ef-00056846b9dfdae2.journal
system@b06763dfb5d9474bbf08a41aafa705db-00000000000bee0f-00056a81e6471243.journal
system@b06763dfb5d9474bbf08a41aafa705db-00000000000d7e23-00056cea54ac049d.journal
system@b06763dfb5d9474bbf08a41aafa705db-00000000000d7fca-00056cea9d641931.journal
system@b06763dfb5d9474bbf08a41aafa705db-00000000000f2885-00056f63127cbe97.journal
system@b06763dfb5d9474bbf08a41aafa705db-00000000000f2af8-00056f63149c60b5.journal
system.journal
user-1000@1f9ca3ee21814314a67d9069a58e7128-00000000000015b0-00055006ed5dfbb6.journal
user-1000@1f9ca3ee21814314a67d9069a58e7128-000000000001132e-00055283e8135caf.journal
user-1000@1f9ca3ee21814314a67d9069a58e7128-000000000001f26d-000554ef5d14f66e.journal
user-1000@1f9ca3ee21814314a67d9069a58e7128-000000000002e59b-0005575694a3b831.journal
user-1000@1f9ca3ee21814314a67d9069a58e7128-00000000000420e1-000559d41174fbf8.journal
user-1000@1f9ca3ee21814314a67d9069a58e7128-0000000000053266-00055c3ecdacd823.journal
user-1000@1f9ca3ee21814314a67d9069a58e7128-0000000000060cc0-00055ea750d9d71f.journal
user-1000@1f9ca3ee21814314a67d9069a58e7128-00000000000705cb-0005610bbd3f532d.journal
user-1000@1f9ca3ee21814314a67d9069a58e7128-000000000007f2a4-00056372622da099.journal
user-1000@1f9ca3ee21814314a67d9069a58e7128-000000000008a145-000565e11108ed20.journal
user-1000@1f9ca3ee21814314a67d9069a58e7128-000000000009d6ed-00056846b9ddd3d4.journal
user-1000@1f9ca3ee21814314a67d9069a58e7128-00000000000bfd2c-00056a8255f67694.journal
user-1000@1f9ca3ee21814314a67d9069a58e7128-00000000000d7fc8-00056cea9d631972.journal
user-1000@1f9ca3ee21814314a67d9069a58e7128-00000000000f2af6-00056f63149a9d60.journal
user-1000.journal

/var/log/journal/remote:

systemd之所以使用二进制来存储日志是因为systemd除了记录日志本身外,还会记录大量的元数据。 这些信息可以方便用户对信息进行过滤和分类,但同时也占用了大量的空间。 有鉴于此,systemd使用二进制格式以节省空间。

journalctl --output=verbose --all | head -n 32

-- Logs begin at Sat 2017-05-13 23:26:32 HKT, end at Wed 2018-08-08 15:38:56 HKT. --
Sat 2017-05-13 23:26:32.333812 HKT [s=b06763dfb5d9474bbf08a41aafa705db;i=1;b=3d88f970ddc247a8bc58bbcf924fb9c5;m=2796ef;t=54f69725bd1f4;x=c397f8de2fb56e8e]
   SYSLOG_FACILITY=3
   SYSLOG_IDENTIFIER=systemd-journald
   _TRANSPORT=driver
   PRIORITY=6
   MESSAGE=Time spent on flushing to /var is 943us for 0 entries.
   _PID=180
   _UID=0
   _GID=0
   _COMM=systemd-journal
   _EXE=/usr/lib/systemd/systemd-journald
   _CMDLINE=/usr/lib/systemd/systemd-journald
   _CAP_EFFECTIVE=25402800cf
   _SYSTEMD_CGROUP=/system.slice/systemd-journald.service
   _SYSTEMD_UNIT=systemd-journald.service
   _SYSTEMD_SLICE=system.slice
   _SYSTEMD_INVOCATION_ID=028ad00d541f43b18015d87a4b504133
   _BOOT_ID=3d88f970ddc247a8bc58bbcf924fb9c5
   _MACHINE_ID=c291481e2d9b4024b6315308254f29df
   _HOSTNAME=T520
Sat 2017-05-13 23:26:32.333966 HKT [s=b06763dfb5d9474bbf08a41aafa705db;i=2;b=3d88f970ddc247a8bc58bbcf924fb9c5;m=279788;t=54f69725bd28e;x=ed81c61ce14af023]
   _BOOT_ID=3d88f970ddc247a8bc58bbcf924fb9c5
   _MACHINE_ID=c291481e2d9b4024b6315308254f29df
   _HOSTNAME=T520
   _SOURCE_MONOTONIC_TIMESTAMP=0
   _TRANSPORT=kernel
   PRIORITY=5
   SYSLOG_FACILITY=0
   SYSLOG_IDENTIFIER=kernel
   MESSAGE=Linux version 4.10.13-1-ARCH (builduser@tobias) (gcc version 6.3.1 20170306 (GCC) ) #1 SMP PREEMPT Thu Apr 27 12:15:09 CEST 2017
Sat 2017-05-13 23:26:32.334011 HKT [s=b06763dfb5d9474bbf08a41aafa705db;i=3;b=3d88f970ddc247a8bc58bbcf924fb9c5;m=2797b6;t=54f69725bd2bb;x=e5ad63c3bd76a8fa]

你会看到除了 MESSAGE 这一项是真正的日志消息外,还有大量的其他元数据,比如 SYSLOG_FACILIT, _PID, _UID 等等信息. 此外,你还会发现不同MESSAGE中元数据的数量也是不同的。

配置systemd-journald.service

systemd-journald 的配置文件为 /etc/systemd/journald.conf 中, 通过修改其中的配置信息可以影响其行为:

017-05-13 23:26:32 HKT, end at Wed 2018-08-08 16:27:01 HKT. --

5月 13 23:26:32 T520 systemd-journald[180]: Time spent on flushing to /var is 943us for 0 entries.
5月 13 23:26:32 T520 kernel: Linux version 4.10.13-1-ARCH (builduser@tobias) (gcc version 6.3.1 20170306 (GCC) ) #1 SMP PREEMPT Thu Apr 27 12:15:09 CEST 2017
5月 13 23:26:32 T520 kernel: Command line: BOOT_IMAGE=/boot/vmlinuz-linux root=UUID=a3e3ff49-bb3d-4610-a898-c623d9ff4b2b rw quiet
5月 13 23:26:32 T520 kernel: Disabled fast string operations
5月 13 23:26:32 T520 kernel: x86/fpu: Supporting XSAVE feature 0x001: 'x87 floating point registers'
5月 13 23:26:32 T520 kernel: x86/fpu: Supporting XSAVE feature 0x002: 'SSE registers'
5月 13 23:26:32 T520 kernel: x86/fpu: Supporting XSAVE feature 0x004: 'AVX registers'
5月 13 23:26:32 T520 kernel: x86/fpu: xstate_offset[2]:  576, xstate_sizes[2]:  256
5月 13 23:26:32 T520 kernel: x86/fpu: Enabled xstate features 0x7, context size is 832 bytes, using 'standard' format.

但这是没有必要的,我们可以使用 --since--until 来指定显示某个时间段内的日志。

比如下面命令显示从 2018年8月1日开始的所有日志

journalctl --since "2018-08-01 00:00:00" | head

-- Logs begin at Sat 2017-05-13 23:26:32 HKT, end at Wed 2018-08-08 20:41:31 HKT. --
8月 01 10:05:31 T520 kernel: microcode: microcode updated early to revision 0x2d, date = 2018-02-07
8月 01 10:05:31 T520 kernel: Linux version 4.17.9-1-ARCH (builduser@heftig-26261) (gcc version 8.1.1 20180531 (GCC)) #1 SMP PREEMPT Sun Jul 22 20:23:36 UTC 2018
8月 01 10:05:31 T520 kernel: Command line: BOOT_IMAGE=/boot/vmlinuz-linux root=UUID=a3e3ff49-bb3d-4610-a898-c623d9ff4b2b rw quiet
8月 01 10:05:31 T520 kernel: KERNEL supported cpus:
8月 01 10:05:31 T520 kernel:   Intel GenuineIntel
8月 01 10:05:31 T520 kernel:   AMD AuthenticAMD
8月 01 10:05:31 T520 kernel:   Centaur CentaurHauls
8月 01 10:05:31 T520 kernel: Disabled fast string operations
8月 01 10:05:31 T520 kernel: x86/fpu: Supporting XSAVE feature 0x001: 'x87 floating point registers'

下面命令显示从 2018年7月30日9:30开始到2018年8月1日凌晨结束的所有日志

journalctl --since "2018-07-30 09:30:00" --until "2018-08-01 00:00:00" | head

-- Logs begin at Sat 2017-05-13 23:26:32 HKT, end at Wed 2018-08-08 20:41:31 HKT. --
7月 30 11:43:53 T520 kernel: microcode: microcode updated early to revision 0x2d, date = 2018-02-07
7月 30 11:43:53 T520 kernel: Linux version 4.17.9-1-ARCH (builduser@heftig-26261) (gcc version 8.1.1 20180531 (GCC)) #1 SMP PREEMPT Sun Jul 22 20:23:36 UTC 2018
7月 30 11:43:53 T520 kernel: Command line: BOOT_IMAGE=/boot/vmlinuz-linux root=UUID=a3e3ff49-bb3d-4610-a898-c623d9ff4b2b rw quiet
7月 30 11:43:53 T520 kernel: KERNEL supported cpus:
7月 30 11:43:53 T520 kernel:   Intel GenuineIntel
7月 30 11:43:53 T520 kernel:   AMD AuthenticAMD
7月 30 11:43:53 T520 kernel:   Centaur CentaurHauls
7月 30 11:43:53 T520 kernel: Disabled fast string operations
7月 30 11:43:53 T520 kernel: x86/fpu: Supporting XSAVE feature 0x001: 'x87 floating point registers'

还有一种常见的情况是,若想查看本次启动后发生的日志,可以使用 --boot 参数

journalctl --boot | tail

8月 08 20:22:06 T520 sshd[6092]: pam_tally(sshd:auth): pam_get_uid; no such user
8月 08 20:22:06 T520 sshd[6092]: pam_unix(sshd:auth): check pass; user unknown
8月 08 20:22:08 T520 sshd[6092]: Failed password for invalid user admin from 5.188.10.156 port 37215 ssh2
8月 08 20:22:08 T520 sshd[6092]: pam_tally(sshd:auth): pam_get_uid; no such user
8月 08 20:22:08 T520 sshd[6092]: pam_unix(sshd:auth): check pass; user unknown
8月 08 20:22:10 T520 sshd[6092]: Failed password for invalid user admin from 5.188.10.156 port 37215 ssh2
8月 08 20:22:10 T520 sshd[6092]: Connection closed by invalid user admin 5.188.10.156 port 37215 [preauth]
8月 08 20:22:10 T520 sshd[6092]: PAM 2 more authentication failures; logname= uid=0 euid=0 tty=ssh ruser= rhost=5.188.10.156
8月 08 20:41:31 T520 sshd[7195]: Received disconnect from 50.115.166.112 port 42538:11: Bye Bye [preauth]
8月 08 20:41:31 T520 sshd[7195]: Disconnected from 50.115.166.112 port 42538 [preauth]

约束日志输出的行数

若我们只是想查看日志中的最后几行,没有必要使用tail命令,通过 --lines 命令即可,比如上面那个命令可以写成

journalctl --boot --lines=10

-- Logs begin at Sat 2017-05-13 23:26:32 HKT, end at Wed 2018-08-08 20:41:31 HKT. --
8月 08 20:22:06 T520 sshd[6092]: pam_tally(sshd:auth): pam_get_uid; no such user
8月 08 20:22:06 T520 sshd[6092]: pam_unix(sshd:auth): check pass; user unknown
8月 08 20:22:08 T520 sshd[6092]: Failed password for invalid user admin from 5.188.10.156 port 37215 ssh2
8月 08 20:22:08 T520 sshd[6092]: pam_tally(sshd:auth): pam_get_uid; no such user
8月 08 20:22:08 T520 sshd[6092]: pam_unix(sshd:auth): check pass; user unknown
8月 08 20:22:10 T520 sshd[6092]: Failed password for invalid user admin from 5.188.10.156 port 37215 ssh2
8月 08 20:22:10 T520 sshd[6092]: Connection closed by invalid user admin 5.188.10.156 port 37215 [preauth]
8月 08 20:22:10 T520 sshd[6092]: PAM 2 more authentication failures; logname= uid=0 euid=0 tty=ssh ruser= rhost=5.188.10.156
8月 08 20:41:31 T520 sshd[7195]: Received disconnect from 50.115.166.112 port 42538:11: Bye Bye [preauth]
8月 08 20:41:31 T520 sshd[7195]: Disconnected from 50.115.166.112 port 42538 [preauth]

指定日志级别

Linux的日志级别通常分成8个级别,从高到底分别为:

CodePriorityServerity
0Emerge系统不可用
1Alert必须立即采取行动
2Crit紧急情况
3Err非紧急的错误
4Warnning警告
5Notice普通但值得注意的事件
6Info信息
7Debug调试

我们可以通过 -p 选项来指定想要查看的日志级别,比如

journalctl -p err --lines=10

根据日志元数据进行过滤

前面提到了,systemd-journald写入的日志中包含了大量的元数据,我们可以通过这些元数据对日志信息进行过滤。

journalctl [options] [MATCHES...]

其中 MATCHES 的格式为 FIELD=VALUE 表示只有日志元数据域的值为指定值的日志才显示出来。

比如,我们想查看本次启动后 systemd-journald 本身产生的日志,可以这么看

journalctl --boot "_EXE=/usr/lib/systemd/systemd-journald"

-- Logs begin at Sat 2017-05-13 23:26:32 HKT, end at Thu 2018-08-09 18:46:13 HKT. --
8月 09 14:36:32 T520 systemd-journald[225]: Journal started
8月 09 14:36:32 T520 systemd-journald[225]: Runtime journal (/run/log/journal/c291481e2d9b4024b6315308254f29df) is 8.0M, max 186.2M, 178.2M free.
8月 09 14:36:32 T520 systemd-journald[225]: Time spent on flushing to /var is 809.869ms for 725 entries.
8月 09 14:36:32 T520 systemd-journald[225]: System journal (/var/log/journal/c291481e2d9b4024b6315308254f29df) is 1.1G, max 3.9G, 2.7G free.

既然是复数的 MATCHES 那么自然表示可以接多个 FIELD=VALUE 对了,这些 FIELD=VALUE 的组合规则为:

  1. 如果有多个 不同 的字段被 [MATCHES…] 参数匹配,那么这些字段之间使用”AND”逻辑连接,即所有域都满足的日志才会被输出

  2. 如果 同一个 字段被多个 [MATCHES…] 参数匹配, 那么这些匹配条件之间使用”OR”逻辑连接,也就是对于同一个字段,日志项只需满足任意一个匹配条件即可输出。

  3. ”+” 字符可用作 [MATCHES…]组之间的分隔符,并被视为使用”OR”逻辑连接。 也就是,MATCHE1 MATCHE2 + MATCHE3 MATCHE4 MATCHE5 + MATCHE6 MATCHE7 相当于 ( MATCHE1 MATCHE2 ) OR ( MATCHE3 MATCHE4 MATCHE5 ) OR ( MATCHE6 MATCHE7 )

除了直接通过 FIELD=VALUE 来过滤日志外, journalctl 也为一些常用的过滤域准备了专门的参数,比如:

-u / ==unit=${UNIT}|${PATTERN}

显示名为UNIT或匹配PATTERN模式的单元日志,相当于 _SYSTEMD_UNIT=${UNIT}

–user-unit=${USER}

显示特定用户会话单元的日志,相当于 _SYSTEMD_USER_UNIT=${USER}_UID=${USER}

-p / –prioprity=${LEVEL}

根据日志级别过滤输出结果,相当于 PRIORITY=${LEVEL}

根据正则表达式搜索的日志

通过 ~–grep=”REGEXP”~ 可以过滤匹配正则表达式的日志内容,比如我想查看日志中所有与wifi相关的内容,那么可以

journalctl --boot --grep="wifi"
-- Logs begin at Sat 2017-05-13 23:26:32 HKT, end at Thu 2018-08-09 19:09:54 HKT. --
8月 09 14:36:32 T520 systemd[1]: /etc/systemd/system/netctl@wlp3s0\x2daWiFi.service:1: .include directives are deprecated, and support for them will be removed in a future version of systemd. Please use drop-in files instead.
8月 09 14:36:33 T520 kernel: Intel(R) Wireless WiFi driver for Linux
8月 09 14:36:33 T520 kernel: iwlwifi 0000:03:00.0: can't disable ASPM; OS doesn't have ASPM control
8月 09 14:36:33 T520 kernel: iwlwifi 0000:03:00.0: loaded firmware version 18.168.6.1 op_mode iwldvm
8月 09 14:36:33 T520 kernel: iwlwifi 0000:03:00.0: CONFIG_IWLWIFI_DEBUG enabled
8月 09 14:36:33 T520 kernel: iwlwifi 0000:03:00.0: CONFIG_IWLWIFI_DEBUGFS enabled
8月 09 14:36:33 T520 kernel: iwlwifi 0000:03:00.0: CONFIG_IWLWIFI_DEVICE_TRACING enabled
8月 09 14:36:33 T520 kernel: iwlwifi 0000:03:00.0: Detected Intel(R) Centrino(R) Advanced-N 6205 AGN, REV=0xB0
8月 09 14:36:34 T520 systemd[1]: Starting Automatically generated profile by wifi-menu...
8月 09 14:36:34 T520 netctl-auto[424]: Included profile 'wlp3s0-bWiFi'
8月 09 14:36:34 T520 netctl-auto[424]: Included profile 'wlp3s0-aWiFi'
8月 09 14:36:34 T520 network[421]: Starting network profile 'wlp3s0-aWiFi'...
8月 09 14:36:35 T520 kernel: iwlwifi 0000:03:00.0 wlp3s0: renamed from wlan0
8月 09 14:36:35 T520 kernel: iwlwifi 0000:03:00.0: Radio type=0x1-0x2-0x0
8月 09 14:36:35 T520 kernel: iwlwifi 0000:03:00.0: Radio type=0x1-0x2-0x0
8月 09 14:36:51 T520 network[421]: Failed to bring the network up for profile 'wlp3s0-aWiFi'
8月 09 14:36:51 T520 systemd[1]: netctl@wlp3s0\x2daWiFi.service: Main process exited, code=exited, status=1/FAILURE
8月 09 14:36:51 T520 systemd[1]: netctl@wlp3s0\x2daWiFi.service: Failed with result 'exit-code'.
8月 09 14:36:51 T520 systemd[1]: Failed to start Automatically generated profile by wifi-menu.
8月 09 15:09:58 T520 sudo[2730]: lujun9972 : TTY=pts/0 ; PWD=/home/lujun9972 ; USER=root ; COMMAND=/usr/bin/wifi-menu
8月 09 15:09:58 T520 kernel: iwlwifi 0000:03:00.0: Radio type=0x1-0x2-0x0
8月 09 15:09:58 T520 kernel: iwlwifi 0000:03:00.0: Radio type=0x1-0x2-0x0
8月 09 15:10:07 T520 systemd[1]: Starting Automatically generated profile by wifi-menu...
8月 09 15:10:07 T520 network[2810]: Starting network profile 'wlp3s0-aWiFi'...
8月 09 15:10:07 T520 kernel: iwlwifi 0000:03:00.0: Radio type=0x1-0x2-0x0
8月 09 15:10:07 T520 kernel: iwlwifi 0000:03:00.0: Radio type=0x1-0x2-0x0
8月 09 15:10:11 T520 systemd[1]: Started Automatically generated profile by wifi-menu.
8月 09 15:10:16 T520 network[2810]: Started network profile 'wlp3s0-aWiFi'

从输出中你会发现当用全小写的 wifi 来搜索时, WiFi 也会被匹配上,也就是不区分大小写, 而若是搜索的内容中有一个大些字母,则搜索会变成大小写敏感的,这一点跟Emacs中的搜索很类似

journalctl --boot --grep="Wifi"
-- Logs begin at Sat 2017-05-13 23:26:32 HKT, end at Thu 2018-08-09 19:09:54 HKT. --
-- No entries --

其他参数

除了上面提到的这些选项外,还有一些比较常用的选项,列举在此:

    • -f / –follow

      只显示最新的日志项,并且不断显示新生成的日志项

    • -x / –catalog

      在日志的输出中增加一些解释性的短文本, 以帮助进一步说明日志的含义、 问题的解决方案、支持论坛、开发文档等内容

    • –pager-end

      在分页工具内立即跳转到日志的尾部,而不是从首部开始看


转载自:

anzhihe 安志合个人博客,版权所有 丨 如未注明,均为原创 丨 转载请注明转自:https://chegva.com/4465.html | ☆★★每天进步一点点,加油!★★☆ | 

您可能还感兴趣的文章!

发表评论

电子邮件地址不会被公开。 必填项已用*标注