journalctl の使い方 Tips

そろそろ多くの環境が systemd になったかと思います。
systemd 環境では syslog や logrotate が systemd-journald で管理されるようになっており,journalctl を使うと便利にログを眺められます。

私は systemd 環境を主に使い出して 6 年ぐらいになるのですが途中にオプション増えたりコマンド増えたり色々ありました。そんなわけで,journalctl コマンドを使うときの便利なオプションとかのメモ,いってみよー

ブート ID の一覧と特定の起動時のログの表示

$ journalctl --list-boot

  -5 f5b4ff9349204d31b7c89cae00a765e5 Fri 2018-06-01 12:32:20 JST—Fri 2018-06-01 12:33:43 JST
  -4 1baea4095c424e6b8f50f3eff1af2161 Fri 2018-06-01 12:34:21 JST—Fri 2018-06-01 12:35:17 JST
  -3 dfb54ab05bd14c05ae83f4a767492293 Fri 2018-06-01 12:38:43 JST—Fri 2018-06-01 12:40:28 JST
  -2 336d9d0421ce44d59aadcaf2de634e92 Fri 2018-06-01 12:50:57 JST—Tue 2018-06-05 10:15:33 JST
  -1 676a0fbbf09948bcbb18e5f61d27f51b Tue 2018-06-05 11:28:20 JST—Tue 2018-06-05 13:55:23 JST
   0 92feec044ea94d88a6f95548df223f80 Wed 2018-06-06 00:51:40 JST—Wed 2018-06-06 00:57:37 JST
これまで logging した boot ID の一覧を出してくれます。これで,「あ,一昨日起動したときのログが見たいなー。一昨日起動したのは二回前の起動のときかー」ってなったら,
$ journalctl -b -2
とすればいいわけです。ちなみに,単に今起動している分のログだけ見たい場合は,
$ journalctl -b
0 とかわざわざ指定しなくて大丈夫。

dmesg

新しいマシンを買ったらとりあえず dmesg してどこかに貼り付けるとかみなさんよくやると思います。 が,うっかり dmesg 取り忘れて色々やってるとカーネルログに流されて起動時の欲しいメッセージはどっか流れていっちゃうと思います。そこで,
$ journalctl -k -b -o short-monotonic
が便利です。ちなみにオプションの意味は,-k でカーネルのログだけ表示,さきほどにも出た -b は飛ばして次の -o short-monotonic はログのタイムスタンプの形式を dmesg 同様のモノトニック時刻にするやつです。最後のオプションを指定しないとデフォルトだと wall clock time になってしまうので,何時何分のイベントだったかなどは人間に優しい出力でわかりやすいですが,dmesg のように起動してから何秒かが知りたい場合はこれを使います。

ちなみにですが,-o には json を指定するとログが json で出てきたり,short-unix だと UNIX 時間で出力されたり,色々と便利で面白い機能が多いのでおためしあれ。

おまけ

journald は関係ないですが,systemd と logging ということでついでにもうひとつ。
$ systemd-analyze
はファームウェア,カーネル,ユーザー空間で起動にどれだけ時間がかかったか見れて便利な上に,オプションとして plot を指定して図にしたり critical-chain を指定して起動時のクリティカル・チェーンを洗い出すなどが出来ます。