ここでは、RedHat系Linux(CentOS 7)で、journaldにより収集されたログを操作するためのコマンド「journalctl」でログを確認する方法を紹介します。
目次
journaldにより収集されるログ
RedHat系Linuxでは、RHEL7系から新しいログ管理の仕組み「journald」が採用されており、サービスにより標準出力および標準エラー出力に書き込まれたメッセージ、Syslogメッセージ、カーネルログメッセージなどが収集され、独自のデータベースに保存されています。
データベースに保存されているログデータはバイナリ形式のため、収集されたログを検索・閲覧する際は、journalctlコマンドを使用する必要があります。
参考:第22章 ログファイルの表示と管理 - Red Hat Customer Portal
journalctlコマンドの使用例
journalctlでログを確認する時の利用例をいくつか紹介します。
すべてのログを表示する
オプションなしで実行した場合は、古いログから表示されます。
# journalctl
逆に最新のログから表示したいときは「-r」オプションを付けて実行します。
# journalctl -r
最新のログを表示する
最新のログを表示したいときは「-e」オプションを付けて実行し、詳細なログを表示したいときは「-x」オプションを追加します。
# journalctl -e
# journalctl -ex
ログの表示が見切れないようにする
journalctlコマンドでは、デフォルトのページャーがlessになっており、画面に収まりきらない長いログなどは画面端で見切れてしまいます。
ログが見切れないようにしたいときは「--no-pager」オプションを付けることで、catによる表示となり、ログが画面右端で折り返して表示されるようになります。
# journalctl --no-pager
ただ、上のコマンドの場合、ログが一気に流れるので、ログを確認するのは困難です。その場合は、次のようにパイプでlessに渡すことで、ログが見切れることもなくページごとで表示できます。
# journalctl --no-pager | less
最新のログから指定した行数分のみを表示する
最新のログから指定した行数分を表示したいときは「-n」オプションを利用します。下の例では、最新のログを100行分表示します。
# journalctl -n 100
オプションのパラメーターを指定せずに実行した場合は、最新のログが10行分表示されます。
# journalctl -n
最新のログをモニターしたいとき
最新のログをリアルタイムでモニターしたいときは、tailコマンドのように「-f」オプションを利用します。
# journalctl -f
カーネルログのみを表示する
カーネルに関連するログのみを表示するには「-k」オプションを利用します。
# journalctl -k
ブートログのみを表示する
OS起動時のブートログを確認したいときは「-b」オプションを利用します。ハードウェアの認識状態などを確認したいときに便利です。
# journalctl -b
パラメーターに「1」を指定した場合は、ログに記録されている一番古いブートログを確認できます。
# journalctl -b 1
パラメーターに「-2」を指定した場合は、最新の二つ前のブートログを確認できます。
# journalctl -b -2
特定サービスのログのみを表示する
特定のサービスに関するログだけを表示したいときは「-u」オプションを利用します。下の例では「sshd」に関するログだけを表示します。
# journalctl -u sshd
また、実行ファイルのパスを指定してログを絞り込むこともできます。たとえば「/usr/sbin/crond」に関連するログだけを表示したいときは、以下のようにコマンドを実行します。
# journalctl /usr/sbin/crond
特定のプロセスIDのログのみを表示する
特定のプロセスIDのログのみを表示するするときは「_PID=プロセスID」と指定して実行します。例えば、プロセスIDが11111のログのみを表示したいときは、以下のようにコマンドを実行します。
# journalctl _PID=11111
特定の重要度以上のログのみを表示する
特定の重要度以上のログのみを表示するときは「-p」オプションを利用します。オプションのパラメーターには、以下の一覧にある文字列、もしくは数値を指定します。
ログの重要度一覧
数値 | 文字列 |
---|---|
emerg | 0 |
alert | 1 |
crit | 2 |
err | 3 |
warning | 4 |
notice | 5 |
info | 6 |
debug | 7 |
下の例では、いずれの場合も、エラー以上のログのみを表示します。
# journalctl -p err
# journalctl -p 3
「エラー以上のログ」とは、エラーログとエラーより重要なログ(crit, alert, emerg)という意味です。
特定の時間範囲のログのみを表示する
指定した日時以降のログを表示したいときは「-S」オプションを利用し、指定した日時までのログを表示したいときは「-U」オプションを利用します。
日時は、以下のような指定が可能です。
- YYYY-MM-DD hh:mm:ss(時刻を省略した場合「00:00:00」とみなされます)
- now, yesterday, today, tomorrow
- 1 day ago, 3 hours ago …
- -1h30min, +30min …
次のように入力すると、2019年2月10日17時以降のログが表示されます。
# journalctl -S "2019-02-10 17:00:00"
次のように入力すると、昨日からのログが表示されます。
# journalctl -S yesterday
次のように入力すると、2019年2月1日0時15分までのログが表示されます。
# journalctl -U "2019-02-01 00:15:00"
次のように入力すると、2019年2月1日0時から2019年2月5日0時までのログが表示されます。
# journalctl -S "2019-02-01" -U "2019-02-05"
次のように入力すると、2019年2月11日23時から1時間前までのログが表示されます。
# journalctl -S "2019-02-11 23:00" -U "1 hour ago"
# journalctl -S "2019-02-11 23:00" -U -1h
あとがき
journalctlコマンドには、ここで紹介した以外にもさまざまなオプションが用意されているので、詳しくはmanページを確認することをおすすめします。