Ubuntuでjournalctlを使ってsystemdのログ(ジャーナル)を表示させる方法です。
私が普段使う頻度が高いオプションを選んで解説しています。
journalctlでログを表示
「journalctl」コマンドを実行するとsystemdのログ(ジャーナル)を1画面分ずつ表示させることができます。
「スペース」で次の1画面分が表示され、「Enter」で1行先のログ表示させることができ、矢印キーの上下で1行分づつ戻したり先のログを表示させたりすることができます。
ログの表示を終了させるには「Q」キーを押下してください。
画面の左下の「lines 行数-行数」部分で、現在表示されているログ行数の範囲を確認できます。
$ sudo journalctl
Oct 04 09:37:11 localhost kernel: Linux version 6.8.0-36-generic (buildd@lcy02->
Oct 04 09:37:11 localhost kernel: Command line: BOOT_IMAGE=/boot/vmlinuz-6.8.0->
Oct 04 09:37:11 localhost kernel: KERNEL supported cpus:
Oct 04 09:37:11 localhost kernel: Intel GenuineIntel
Oct 04 09:37:11 localhost kernel: AMD AuthenticAMD
Oct 04 09:37:11 localhost kernel: Hygon HygonGenuine
Oct 04 09:37:11 localhost kernel: Centaur CentaurHauls
Oct 04 09:37:11 localhost kernel: zhaoxin Shanghai
Oct 04 09:37:11 localhost kernel: BIOS-provided physical RAM map:
Oct 04 09:37:11 localhost kernel: BIOS-e820: [mem 0x0000000000000000-0x00000000>
Oct 04 09:37:11 localhost kernel: BIOS-e820: [mem 0x000000000009fc00-0x00000000>
Oct 04 09:37:11 localhost kernel: BIOS-e820: [mem 0x00000000000f0000-0x00000000>
Oct 04 09:37:11 localhost kernel: BIOS-e820: [mem 0x0000000000100000-0x00000000>
lines 1-13 ### 表示しているログの行数範囲
--no-pagerで一気に表示
「--no-pager」オプションを使用するとログの表示を停止させずに、最初から最後までのログを連続で表示させることができます。
ログが停止せずに表示され続けるので、目でログの内容を確認するのが難しくなるので目視でのログ確認には向きません。
「Ctrl」+「C」でログの表示を中断させることができます。
-f 最新のログをリアルタイムに表示
「-f」オプションを使用すると最新のログを表示させることができ、ログが追加されるとリアルタイムに追加表示されます。
「Ctrl」+「C」でログの表示を中断させることができます。
-r ログの表示順を最新のものからに変更
「-r」オプションを使用すると、ログの表示順番を最新のものからに変更することできます。
$ sudo journalctl -r Oct 25 11:40:12 xxx-xxx-xxx-xxx sudo[130596]: pam_unix(sudo:session): session opened for user root(uid=0) by tamohiko(uid=1000) Oct 25 11:40:12 xxx-xxx-xxx-xxx sudo[130596]: tamohiko : TTY=pts/0 ; PWD=/home/tamohiko ; USER=root ; COMMAND=/usr/bin/journalctl -r Oct 25 11:40:10 xxx-xxx-xxx-xxx sudo[130589]: pam_unix(sudo:session): session closed for user root Oct 25 11:40:03 xxx-xxx-xxx-xxx systemd[1]: Finished sysstat-collect.service - system activity accounting tool. Oct 25 11:40:03 xxx-xxx-xxx-xxx systemd[1]: sysstat-collect.service: Deactivated successfully. lines 1-5
-g 検索内容 ログを検索して表示
「-g」オプションを使用するとログの検索を行うことができます。
sudo journalctl -g 検索文字
使用例として「systemd-logind」という文字列で検索を行ってみます。
$ sudo journalctl -g systemd-logind Oct 04 09:37:14 xxx-xxx-xxx-xxx systemd[1]: Starting systemd-logind.service - User Login Management... Oct 04 09:37:15 xxx-xxx-xxx-xxx systemd[1]: Started systemd-logind.service - User Login Management. Oct 04 09:41:47 xxx-xxx-xxx-xxx systemd[1]: Stopping systemd-logind.service - User Login Management... Oct 04 09:41:47 xxx-xxx-xxx-xxx systemd[1]: systemd-logind.service: Deactivated successfully. Oct 04 09:41:47 xxx-xxx-xxx-xxx systemd[1]: Stopped systemd-logind.service - User Login Management. lines 1-5
指定したユニットのログを表示 -u, --unit=
「-u」オプションを使用すると、指定したユニットのログを表示させることができます。
sudo journalctl -u ユニット名
「ssh」ユニットを指定していログを表示させてみます。
$ sudo journalctl -u ssh Oct 04 09:37:29 xxx-xxx-xxx-xxx systemd[1]: Starting ssh.service - OpenBSD Secure Shell server... Oct 04 09:37:29 xxx-xxx-xxx-xxx sshd[6246]: Server listening on :: port 22. Oct 04 09:37:29 xxx-xxx-xxx-xxx systemd[1]: Started ssh.service - OpenBSD Secure Shell server. Oct 04 09:37:39 xxx-xxx-xxx-xxx sshd[6249]: Invalid user xxx from xxx.xxx.xxx.xxx port 45552 Oct 04 09:37:46 xxx-xxx-xxx-xxx sshd[6249]: Connection closed by invalid user tamohiko xxx.xxx.xxx.xxx port 45552 [preauth]
指定したプライオリティのログを表示 -p, --priority=
「-p」オプションを使用すると、ログのプライオリティを指定して表示させることができます。
プライオリティは下記のレベルから1つまたは範囲を指定することができ、1つ指定した場合は指定したプライオリティとそれより重要なプライオリティのログが表示されます。
例えば、「crit」を指定した場合は「crit」「alert」「emerg」レベルのログが表示されます。
- emerg (0)
- alert (1)
- crit (2)
- err (3)
- warning (4)
- notice (5)
- info (6)
- debug (7)
プライオリティの指定は、文字または数字で行うことができます。
sudo journalctl -p プライオリティ
「alert」のログを表示させたい場合は、「alert」か「1」のどちらかの方法で指定することができます。
$ sudo journalctl -p alert $ sudo journalctl -p 1
範囲指定は下記のように表示させたいプライオリティの指定を行います。
sudo journalctl -p プライオリティ..プライオリティ
「alert」から「err」の範囲を指定してログを表示させたい場合は、下記どちらかの方法で指定することができます。
$ sudo journalctl -p alert..err $ sudo journalctl -p 1..3
指定した日時のログを表示 -S, --since= -U, --until=
下記のオプションを使用すると、日時を指定してログを表示させることもできます。
- 以降(〜から): -S, --since=
- 以前(〜まで): -U, --until=
実際の使用方法は下記のようになります。
sudo journalctl -S "日時" # 指定した日時からのログを表示 sudo journalctl -U "日時" # 指定した日時までのログを表示 sudo journalctl -S "日時" -U "日時" # -Sと-Uで指定した範囲のログを表示
使用例
-S "日時", --since="日時"
「2024-10-28 11:00:00」」以降のログを表示させたい場合は、下記のようにコマンドを実行します。
以降なので、「2024-10-28 11:00:00」からのログが表示されています。
$ sudo journalctl -S "2024-10-28 11:00:00" Oct 28 11:00:03 xxx-xxx-xxx-xxx systemd[1]: Starting sysstat-collect.service - system activity accountin> Oct 28 11:00:03 xxx-xxx-xxx-xxx systemd[1]: sysstat-collect.service: Deactivated successfully. Oct 28 11:00:03 xxx-xxx-xxx-xxx systemd[1]: Finished sysstat-collect.service - system activity accountin> Oct 28 11:00:12 xxx-xxx-xxx-xxx kernel: [UFW BLOCK] IN=eth0 OUT= MAC=xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx> Oct 28 11:00:35 xxx-xxx-xxx-xxx kernel: [UFW BLOCK] IN=eth0 OUT= MAC=xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx> lines 1-5 ##### 以下省略 #####
-U "日時", --until="日時"
「20204-10-28 11:00:00」以前のログを表示させたい場合は、下記のようにコマンドを実行します。
以前を指定しているので、ログの最初から「20204-10-28 11:00:00」までのログが表示されています。
$ sudo journalctl -U "2024-10-28 11:00:00" Oct 04 09:37:11 localhost kernel: Linux version 6.8.0-36-generic (buildd@lcy02-amd64-077) (x86_64> Oct 04 09:37:11 localhost kernel: Command line: BOOT_IMAGE=/boot/vmlinuz-6.8.0-36-generic root=UU> Oct 04 09:37:11 localhost kernel: KERNEL supported cpus: Oct 04 09:37:11 localhost kernel: Intel GenuineIntel Oct 04 09:37:11 localhost kernel: AMD AuthenticAMD ##### 中略 ##### Oct 28 10:59:45 xxx-xxx-xxx-xxx kernel: [UFW BLOCK] IN=eth0 OUT= MAC=xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx>
-S "日時" -U "日時"
「2024-10-28 10:50」から「2024-10-28 11:00」までの範囲でログを表示させたい場合は、以下のようにコマンドを実行します。
$ sudo journalctl -S "2024-10-28 10:50" -U "2024-10-28 11:00" Oct 28 10:50:03 xxx-xxx-xxx-xxx systemd[1]: Starting sysstat-collect.service - system activity accountin> Oct 28 10:50:03 xxx-xxx-xxx-xxx systemd[1]: sysstat-collect.service: Deactivated successfully. Oct 28 10:50:03 xxx-xxx-xxx-xxx systemd[1]: Finished sysstat-collect.service - system activity accountin> Oct 28 10:50:09 xxx-xxx-xxx-xxx kernel: [UFW BLOCK] IN=eth0 OUT= MAC=xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx> Oct 28 10:50:44 xxx-xxx-xxx-xxx kernel: [UFW BLOCK] IN=eth0 OUT= MAC=xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx> ##### 中略 ##### Oct 28 10:58:56 xxx-xxx-xxx-xxx kernel: [UFW BLOCK] IN=eth0 OUT= MAC=xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx> Oct 28 10:59:05 xxx-xxx-xxx-xxx kernel: [UFW BLOCK] IN=eth0 OUT= MAC=xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx> Oct 28 10:59:11 xxx-xxx-xxx-xxx kernel: [UFW BLOCK] IN=eth0 OUT= MAC=xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx> Oct 28 10:59:23 xxx-xxx-xxx-xxx kernel: [UFW BLOCK] IN=eth0 OUT= MAC=xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx> Oct 28 10:59:45 xxx-xxx-xxx-xxx kernel: [UFW BLOCK] IN=eth0 OUT= MAC=xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx> lines 32-36/36 (END)
日時の指定方法
日時は下記の書式で指定することができます。
絶対日時
絶対日時の形式で指定する場合の書式です。
YYYY-MM-DD HH:MM:SS
例えば、「2024年10月20日の15時00分00秒」を指定する場合は下記のように指定します。
"2024-10-20 15:00:00"
年月日や時間については省略して指定することもできますが、省略した場合はそれぞれ下記の内容が指定されたことになります。
- 年月日を省略(HH:MM:SS): 当日の指定した時間
- 時間部分を省略(YYYY-MM-DD): 指定した日付の00:00:00
- 秒部分を省略(YYYY-MM-DD HH:MM): 指定した日付と時分の00秒
相対日時
文字でも日時を指定することができます。
※tomorrowはどのように時に使うのかが私にはわかりませんでした…
- 昨日: yesterday
- 今日: today
- 明日: tomorrow
- 現在: now
「-」をつけて日数や時間を指定すると「〜前」といった時間指定ができます。
「-」のかわりに、最後にagoをつけてるという指定方法もあります。
- 数字秒前: -数字 seconds (数字 seconds ago)
- 数字分前: -数字 minutes (数字 minutes ago)
- 数字時間前: -数字 hours (数字 hours ago)
- 数字日前: -数字 days (数字 days ago)
- 数字週間前: -数字 weeks (数字 weeks ago)
2時間から1時間前までのログを表示するには、以下のように日時を指定してコマンドを実行します。
$ sudo journalctl -S "-2 hours" -U "-1 hour"
未来の時間も指定できますが…
「+」をつけて時間を指定すると「〜分後」みたいな指定できるみたいですが、未来のログってどのような時に指定すればよいのか使い方が今いちわかっていません。
- 数字秒後: +数字 seconds
- 数字分後: +数字 minutes
- 数字時間後: +数字 hours
- 数字日後:+数字 days
- 数字週間後: +数字 weeks
オプションの複合指定もできます
これまで説明してきたオプションについては複合指定することができるので、うまく組み合わせて使用するとログの解析が捗ります。
下記のオプションを組み合わせて、「2024-10-28 00:00:00」から「2024-10-28 04:00:00」までの「cron」に関するログを表示させてみます。
- -u ユニットを指定してログを表示
- -S 〜以降のログを表示
- -U 〜以前のログを表示
$ sudo journalctl -u cron -S "2024-10-28 00:00:00" -U "2024-10-28 04:00:00" Oct 28 00:00:01 xxx-xxx-xxx-xxx CRON[169672]: pam_unix(cron:session): session opened for user root(uid=> Oct 28 00:00:01 xxx-xxx-xxx-xxx CRON[169673]: (root) CMD (test -x /usr/bin/certbot -a \! -d /run/system> Oct 28 00:00:01 xxx-xxx-xxx-xxx CRON[169672]: pam_unix(cron:session): session closed for user root Oct 28 00:05:02 xxx-xxx-xxx-xxx CRON[169739]: pam_unix(cron:session): session opened for user root(uid=> Oct 28 00:05:02 xxx-xxx-xxx-xxx CRON[169740]: (root) CMD (command -v debian-sa1 > /dev/null && debian-s> lines 1-5
「-r」オプションも組み合わせると、表示順番を逆にして時間が新しいログから表示させるということもできます。
$ sudo journalctl -u cron -S "2024-10-28 00:00:00" -U "2024-10-28 04:00:00" -r Oct 28 03:55:01 xxx-xxx-xxx-xxx CRON[172146]: pam_unix(cron:session): session closed for user root Oct 28 03:55:01 xxx-xxx-xxx-xxx CRON[172147]: (root) CMD (command -v debian-sa1 >/dev/null && debian-s> Oct 28 03:55:01 xxx-xxx-xxx-xxx CRON[172146]: pam_unix(cron:session): session opened for user root(uid=> Oct 28 03:45:01 xxx-xxx-xxx-xxx CRON[172065]: pam_unix(cron:session): session closed for user root Oct 28 03:45:01 xxx-xxx-xxx-xxx CRON[172066]: (root) CMD (command -v debian-sa1 > /dev/null && debian-s> lines 1-5
「-f」オプションを組み合わせると、リアルタイムでログの監視などもできるので便利です。
コメント