systemd のログを確認する journalctl

2016年2月14日

SSD に優しい設定ってなんだろう? をFedora 19 にもやってみようと思って設定していた。

そうすると /var/log に journal というディレクトリがあり、800MB 近いログが溜まっている。journal と見て、一瞬ファイルシステムのモノかとギョッとしたけど調べたら systemd のログということがわかった。

サーバーとして使った事ないから systemd はよく判らなかった。
とりあえず分かる範囲で調べる。

先ずは journal を more で見てみる… バイナリでしたw journal のログを確認するためのコマンドは journalctl というらしい。

ヘルプの表示

$ sudo journalctl -h # or journalctl --help

バージョンの確認

試しに打ってみるとこんな感じだったので、204 ってことなのかな。

$ sudo journalctl --version
systemd 204
+PAM +LIBWRAP +AUDIT +SELINUX +IMA +SYSVINIT +LIBCRYPTSETUP +GCRYPT +ACL +XZ

ページ機能なし

デフォルトでは | less
でページングしている形になるが、このオプションをつけると全部表示される。
特定の単語を探して grep する時とかに有効そう。

$ sudo journalctl --no-pager

出力を plain text にする

出力が plain text で表示される。
デフォルトのコンソール表示ではエスケープシーケンスが入っていて、文字に装飾がついている。

$ sudo journalctl --full

出力を完全表示

ログを省略せず表示させ、コンソールで見た時用に文字の装飾が入っている。

$ sudo journalctl -a  # or journalctl --all

ログの最新(末尾)を表示し状態を更新し続ける

昔の tail -f /var/log/message みたいなもんかな。

$ sudo journalctl -f  # or journalctl --follow

ログの最新(末尾) 1000 件を表示する

昔の tail -n 1000 /var/log/message | less みたいなもんかな。

$ sudo journalctl -e  # or journalctl --pager-end

ログの最新(末尾)から指定した件数を表示する

昔の tail -n 件数 /var/log/message | less みたいなもんかな。
デフォルトでは 10 件表示。

$ sudo journalctl -n  # or journalctl --lines

末尾から 20 件表示する例。

$ sudo journalctl -n 20  # or journalctl --lines=20

全ログの出力

Show all stored output lines, even in follow mode. Undoes the effect
of –lines=.

ってヘルプに書いてあるけど、手元の環境で違いがでない。
恐らく、全てのログを出力するのではないかな。 ちなみに –lines
は無効化するっぽい。

$ sudo journalctl --no-tail

出力を反転させる

デフォルトでは古い順でログが出力されるが、新しい順に表示させる。

$ sudo journalctl -r  # or journalctl --reverse

出力フォーマットを変える

  • short: デフォルトの出力形式
  • short-monotonic: タイムスタンプが経過時間になり、表示が簡素化される
  • verbose: 全ての行に対して詳細なログを表示する
  • export: journal を plain-text (Journal Export Format 形式)
    で出力する
  • json: 1データ 1行づつ JSON 形式で出力する
  • json-pretty: JSON 形式だが、人に見やすい形(複数行)に成形されている
  • json-sse: Server-Sent Events に向いた JSON

JSON 形式での出力するコマンド例

$ sudo journalctl -o json# or journalctl --output=json
  • short での出力例
    -- Logs begin at 水 2014-03-12 19:30:12 JST, end at 木 2014-03-13 02:35:59 JST. --
     3月 12 19:30:12 localhost.localdomain systemd-journal[66]: Allowing runtime journal files to grow to 245.7M.
     3月 12 19:30:12 localhost.localdomain kernel: Initializing cgroup subsys cpuset
     3月 12 19:30:12 localhost.localdomain kernel: Initializing cgroup subsys cpu
     3月 12 19:30:12 localhost.localdomain kernel: Initializing cgroup subsys cpuacct
    
  • short-monotonic での出力例
    -- Logs begin at 水 2014-03-12 19:30:12 JST, end at 木 2014-03-13 02:36:23 JST. --
    [    2.177326] localhost.localdomain systemd-journal[66]: Allowing runtime journal files to grow to 245.7M.
    [    0.000000] localhost.localdomain kernel: Initializing cgroup subsys cpuset
    [    0.000000] localhost.localdomain kernel: Initializing cgroup subsys cpu
    [    0.000000] localhost.localdomain kernel: Initializing cgroup subsys cpuacct
    
  • verbose での出力例
    -- Logs begin at 水 2014-03-12 19:30:12 JST, end at 木 2014-03-13 02:37:00 JST. --
    水 2014-03-12 19:30:12 JST [s=7cf0970b1bb44465b08531345d8fa9f3;i=1;b=de10f6f7c322406eb35df53b2218ed1b;m=21392e;t=4f46652629b05;x=79feb053e18e37af]
            PRIORITY=6
            _TRANSPORT=driver
            MESSAGE=Allowing runtime journal files to grow to 245.7M.
            _PID=66
            _UID=0
            _GID=0
            _COMM=systemd-journal
            _EXE=/usr/lib/systemd/systemd-journald
            _CMDLINE=/usr/lib/systemd/systemd-journald
            _SYSTEMD_CGROUP=/system/systemd-journald.service
            _SYSTEMD_UNIT=systemd-journald.service
            _SELINUX_CONTEXT=kernel
            _BOOT_ID=de10f6f7c322406eb35df53b2218ed1b
            _MACHINE_ID=7725dfc225d14958a625ddaaaea5962b
            _HOSTNAME=localhost.localdomain
    水 2014-03-12 19:30:12 JST [s=7cf0970b1bb44465b08531345d8fa9f3;i=2;b=de10f6f7c322406eb35df53b2218ed1b;m=2139b0;t=4f46652629b87;x=5512d805b7c27a94]
            PRIORITY=6
            _BOOT_ID=de10f6f7c322406eb35df53b2218ed1b
            _MACHINE_ID=7725dfc225d14958a625ddaaaea5962b
            _HOSTNAME=localhost.localdomain
            _SOURCE_MONOTONIC_TIMESTAMP=0
            _TRANSPORT=kernel
            SYSLOG_IDENTIFIER=kernel
            MESSAGE=Initializing cgroup subsys cpuset
    
  • export での出力例
    __CURSOR=s=7cf0970b1bb44465b08531345d8fa9f3;i=1;b=de10f6f7c322406eb35df53b2218ed1b;m=21392e;t=4f46652629b05;x=79feb053e18e37af
    __REALTIME_TIMESTAMP=1394620212878085
    __MONOTONIC_TIMESTAMP=2177326
    _BOOT_ID=de10f6f7c322406eb35df53b2218ed1b
    PRIORITY=6
    _TRANSPORT=driver
    MESSAGE=Allowing runtime journal files to grow to 245.7M.
    _PID=66
    _UID=0
    _GID=0
    _COMM=systemd-journal
    _EXE=/usr/lib/systemd/systemd-journald
    _CMDLINE=/usr/lib/systemd/systemd-journald
    _SYSTEMD_CGROUP=/system/systemd-journald.service
    _SYSTEMD_UNIT=systemd-journald.service
    _SELINUX_CONTEXT=kernel
    _MACHINE_ID=7725dfc225d14958a625ddaaaea5962b
    _HOSTNAME=localhost.localdomain
    
    __CURSOR=s=7cf0970b1bb44465b08531345d8fa9f3;i=2;b=de10f6f7c322406eb35df53b2218ed1b;m=2139b0;t=4f46652629b87;x=5512d805b7c27a94
    __REALTIME_TIMESTAMP=1394620212878215
    __MONOTONIC_TIMESTAMP=2177456
    _BOOT_ID=de10f6f7c322406eb35df53b2218ed1b
    PRIORITY=6
    _MACHINE_ID=7725dfc225d14958a625ddaaaea5962b
    _HOSTNAME=localhost.localdomain
    _SOURCE_MONOTONIC_TIMESTAMP=0
    _TRANSPORT=kernel
    SYSLOG_IDENTIFIER=kernel
    MESSAGE=Initializing cgroup subsys cpuset
    
  • json での出力例
    { "__CURSOR" : "s=7cf0970b1bb44465b08531345d8fa9f3;i=1;b=de10f6f7c322406eb35df53b2218ed1b;m=21392e;t=4f46652629b05;x=79feb053e18e37af", "__REALTIME_TIMESTAMP" : "1394620212878085", "__MONOTONIC_TIMESTAMP" : "2177326", "_BOOT_ID" : "de10f6f7c322406eb35df53b2218ed1b", "PRIORITY" : "6", "_TRANSPORT" : "driver", "MESSAGE" : "Allowing runtime journal files to grow to 245.7M.", "_PID" : "66", "_UID" : "0", "_GID" : "0", "_COMM" : "systemd-journal", "_EXE" : "/usr/lib/systemd/systemd-journald", "_CMDLINE" : "/usr/lib/systemd/systemd-journald", "_SYSTEMD_CGROUP" : "/system/systemd-journald.service", "_SYSTEMD_UNIT" : "systemd-journald.service", "_SELINUX_CONTEXT" : "kernel", "_MACHINE_ID" : "7725dfc225d14958a625ddaaaea5962b", "_HOSTNAME" : "localhost.localdomain" }
    { "__CURSOR" : "s=7cf0970b1bb44465b08531345d8fa9f3;i=2;b=de10f6f7c322406eb35df53b2218ed1b;m=2139b0;t=4f46652629b87;x=5512d805b7c27a94", "__REALTIME_TIMESTAMP" : "1394620212878215", "__MONOTONIC_TIMESTAMP" : "2177456", "_BOOT_ID" : "de10f6f7c322406eb35df53b2218ed1b", "PRIORITY" : "6", "_MACHINE_ID" : "7725dfc225d14958a625ddaaaea5962b", "_HOSTNAME" : "localhost.localdomain", "_SOURCE_MONOTONIC_TIMESTAMP" : "0", "_TRANSPORT" : "kernel", "SYSLOG_IDENTIFIER" : "kernel", "MESSAGE" : "Initializing cgroup subsys cpuset" }
    { "__CURSOR" : "s=7cf0970b1bb44465b08531345d8fa9f3;i=3;b=de10f6f7c322406eb35df53b2218ed1b;m=2139c8;t=4f46652629b9e;x=8db8687f57d40c13", "__REALTIME_TIMESTAMP" : "1394620212878238", "__MONOTONIC_TIMESTAMP" : "2177480", "_BOOT_ID" : "de10f6f7c322406eb35df53b2218ed1b", "PRIORITY" : "6", "_MACHINE_ID" : "7725dfc225d14958a625ddaaaea5962b", "_HOSTNAME" : "localhost.localdomain", "_SOURCE_MONOTONIC_TIMESTAMP" : "0", "_TRANSPORT" : "kernel", "SYSLOG_IDENTIFIER" : "kernel", "MESSAGE" : "Initializing cgroup subsys cpu" }
    { "__CURSOR" : "s=7cf0970b1bb44465b08531345d8fa9f3;i=4;b=de10f6f7c322406eb35df53b2218ed1b;m=2139dd;t=4f46652629bb3;x=afad3e41687089bf", "__REALTIME_TIMESTAMP" : "1394620212878259", "__MONOTONIC_TIMESTAMP" : "2177501", "_BOOT_ID" : "de10f6f7c322406eb35df53b2218ed1b", "PRIORITY" : "6", "_MACHINE_ID" : "7725dfc225d14958a625ddaaaea5962b", "_HOSTNAME" : "localhost.localdomain", "_SOURCE_MONOTONIC_TIMESTAMP" : "0", "_TRANSPORT" : "kernel", "SYSLOG_IDENTIFIER" : "kernel", "MESSAGE" : "Initializing cgroup subsys cpuacct" }
    { "__CURSOR" : "s=7cf0970b1bb44465b08531345d8fa9f3;i=5;b=de10f6f7c322406eb35df53b2218ed1b;m=2139ee;t=4f46652629bc4;x=78eecee17b32a43a", "__REALTIME_TIMESTAMP" : "1394620212878276", "__MONOTONIC_TIMESTAMP" : "2177518", "_BOOT_ID" : "de10f6f7c322406eb35df53b2218ed1b", "_MACHINE_ID" : "7725dfc225d14958a625ddaaaea5962b", "_HOSTNAME" : "localhost.localdomain", "_SOURCE_MONOTONIC_TIMESTAMP" : "0", "_TRANSPORT" : "kernel", "SYSLOG_IDENTIFIER" : "kernel", "PRIORITY" : "5", "MESSAGE" : "Linux version 3.13.5-103.fc19.x86_64 (mockbuild@bkernel01.phx2.fedoraproject.org) (gcc version 4.8.2 20131212 (Red Hat 4.8.2-7) (GCC) ) #1 SMP Mon Mar 3 18:46:36 UTC 2014" }
    
  • json-pretty での出力例
    {
            "__CURSOR" : "s=7cf0970b1bb44465b08531345d8fa9f3;i=1;b=de10f6f7c322406eb35df53b2218ed1b;m=21392e;t=4f46652629b05;x=79feb053e18e37af",
            "__REALTIME_TIMESTAMP" : "1394620212878085",
            "__MONOTONIC_TIMESTAMP" : "2177326",
            "_BOOT_ID" : "de10f6f7c322406eb35df53b2218ed1b",
            "PRIORITY" : "6",
            "_TRANSPORT" : "driver",
            "MESSAGE" : "Allowing runtime journal files to grow to 245.7M.",
            "_PID" : "66",
            "_UID" : "0",
            "_GID" : "0",
            "_COMM" : "systemd-journal",
            "_EXE" : "/usr/lib/systemd/systemd-journald",
            "_CMDLINE" : "/usr/lib/systemd/systemd-journald",
            "_SYSTEMD_CGROUP" : "/system/systemd-journald.service",
            "_SYSTEMD_UNIT" : "systemd-journald.service",
            "_SELINUX_CONTEXT" : "kernel",
            "_MACHINE_ID" : "7725dfc225d14958a625ddaaaea5962b",
            "_HOSTNAME" : "localhost.localdomain"
    }
    {
            "__CURSOR" : "s=7cf0970b1bb44465b08531345d8fa9f3;i=2;b=de10f6f7c322406eb35df53b2218ed1b;m=2139b0;t=4f46652629b87;x=5512d805b7c27a94",
            "__REALTIME_TIMESTAMP" : "1394620212878215",
            "__MONOTONIC_TIMESTAMP" : "2177456",
            "_BOOT_ID" : "de10f6f7c322406eb35df53b2218ed1b",
            "PRIORITY" : "6",
            "_MACHINE_ID" : "7725dfc225d14958a625ddaaaea5962b",
            "_HOSTNAME" : "localhost.localdomain",
            "_SOURCE_MONOTONIC_TIMESTAMP" : "0",
            "_TRANSPORT" : "kernel",
            "SYSLOG_IDENTIFIER" : "kernel",
            "MESSAGE" : "Initializing cgroup subsys cpuset"
    }
    
  • json-sse での出力例
    data: { "__CURSOR" : "s=7cf0970b1bb44465b08531345d8fa9f3;i=1;b=de10f6f7c322406eb35df53b2218ed1b;m=21392e;t=4f46652629b05;x=79feb053e18e37af", "__REALTIME_TIMESTAMP" : "1394620212878085", "__MONOTONIC_TIMESTAMP" : "2177326", "_BOOT_ID" : "de10f6f7c322406eb35df53b2218ed1b", "PRIORITY" : "6", "_TRANSPORT" : "driver", "MESSAGE" : "Allowing runtime journal files to grow to 245.7M.", "_PID" : "66", "_UID" : "0", "_GID" : "0", "_COMM" : "systemd-journal", "_EXE" : "/usr/lib/systemd/systemd-journald", "_CMDLINE" : "/usr/lib/systemd/systemd-journald", "_SYSTEMD_CGROUP" : "/system/systemd-journald.service", "_SYSTEMD_UNIT" : "systemd-journald.service", "_SELINUX_CONTEXT" : "kernel", "_MACHINE_ID" : "7725dfc225d14958a625ddaaaea5962b", "_HOSTNAME" : "localhost.localdomain"}
    
    data: { "__CURSOR" : "s=7cf0970b1bb44465b08531345d8fa9f3;i=2;b=de10f6f7c322406eb35df53b2218ed1b;m=2139b0;t=4f46652629b87;x=5512d805b7c27a94", "__REALTIME_TIMESTAMP" : "1394620212878215", "__MONOTONIC_TIMESTAMP" : "2177456", "_BOOT_ID" : "de10f6f7c322406eb35df53b2218ed1b", "PRIORITY" : "6", "_MACHINE_ID" : "7725dfc225d14958a625ddaaaea5962b", "_HOSTNAME" : "localhost.localdomain", "_SOURCE_MONOTONIC_TIMESTAMP" : "0", "_TRANSPORT" : "kernel", "SYSLOG_IDENTIFIER" : "kernel", "MESSAGE" : "Initializing cgroup subsys cpuset"}
    
    data: { "__CURSOR" : "s=7cf0970b1bb44465b08531345d8fa9f3;i=3;b=de10f6f7c322406eb35df53b2218ed1b;m=2139c8;t=4f46652629b9e;x=8db8687f57d40c13", "__REALTIME_TIMESTAMP" : "1394620212878238", "__MONOTONIC_TIMESTAMP" : "2177480", "_BOOT_ID" : "de10f6f7c322406eb35df53b2218ed1b", "PRIORITY" : "6", "_MACHINE_ID" : "7725dfc225d14958a625ddaaaea5962b", "_HOSTNAME" : "localhost.localdomain", "_SOURCE_MONOTONIC_TIMESTAMP" : "0", "_TRANSPORT" : "kernel", "SYSLOG_IDENTIFIER" : "kernel", "MESSAGE" : "Initializing cgroup subsys cpu"}
    

メッセージのカタログを表示する

メッセージにカタログに沿ったログを出力する。
ログの形式はメール(RFC822)に類似している。

$ sudo journalctl -x  # or journalctl --catalog
Journal Message Catalogs の出力例

3月 13 12:05:29 localhost.localdomain systemd-journal[66]: Journal started
-- Subject: The Journal has been started
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- The system journal process has been starting up, opened the journal
-- files for writing and is now ready to process requests.
 3月 13 12:05:29 localhost.localdomain systemd[1]: Started Setup Virtual Console.
-- Subject: Unit systemd-vconsole-setup.service has finished start-up
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit systemd-vconsole-setup.service has finished starting up.
--
-- The start-up result is done.

root ではない時にアクセス出来ない警告を表示しない(未検証)

試して見てるんだけど再現しない。
複数ユーザーで使っていたら判るんだろうけど。

$ journalctl -q  # or journalctl --quiet

リモートを含む全てのログを合わせる(未検証)

手元に環境が無いから試せてないけどそういう意味じゃないかな?

$ journalctl -m  # or journalctl --merge

ブートログを表示する

ブートログを表示する。デフォルトでは直近のブートログ。

$ journalctl -b  # or journalctl --this-boot

相対値での取得も可能。

$ journalctl -b 2 # 2回前のブートログの時

絶対値での取得も可能な模様(未確認)

$ journalctl -b _BOOT_ID=xxxxx  # ブートIDで絶対値取得できるらしい

ユニットを指定してログを表示する

指定したユニットのログを表示します。

$ journalctl -u ユニット名  # or journalctl --unit=ユニット名

firewall のログを取得する例

$ journalctl -u firewalld.service  # or journalctl --unit=firewalld.service

ちなみに、ユニットのリストは systemctl で取得可能。
全ての情報を取得する例。

$ systemctl -a # systemctl --all

$ systemctl -t service # systemctl --type=service # service だけ取得する例

少しづつ確かめて書き足して行こうっと