Linuxシステムで問題が発生したとき、最初に頼るべきはログです。
systemd を採用したモダンなLinuxディストリビューション(Ubuntu、Fedora、Debian など)では、journalctl コマンドがシステム全体のログを一元管理しています。
ここでは journalctl の基本から実践的な使い方まで学びましょう。
journalctl とは
journalctl は systemd の journal(ジャーナル)に記録されたログを表示するコマンドです。
カーネルメッセージ、サービスのログ、アプリケーションのエラーなど、さまざまなログをまとめて検索・確認できます。
# ログを最初から表示(量が多いので注意)
journalctl
デフォルトではページャー(less)が起動し、↑↓キーやスペースで読み進められます。q で終了します。
ステップ1:最新のログを確認する
# 末尾(最新)のログを表示
journalctl -e
# 末尾から N 行だけ表示
journalctl -n 50
# リアルタイムでログを流す(tail -f のような動作)
journalctl -f
-f オプションは、サービスの起動やエラー発生をリアルタイムで監視したいときに便利です。
ステップ2:特定のサービスのログを絞り込む
# nginx のログだけを表示
journalctl -u nginx
# ssh のログをリアルタイムで追う
journalctl -u ssh -f
# 複数サービスのログをまとめて表示
journalctl -u nginx -u mysql
-u は --unit の略で、systemd のユニット名を指定します。
ステップ3:時間でフィルタリングする
ログは膨大なので、時間範囲を絞るのが効率的です。
# 今日のログだけ表示
journalctl --since today
# 昨日のログ
journalctl --since yesterday --until today
# 特定の日時から現在まで
journalctl --since "2026-08-01 10:00:00"
# 時間範囲を指定
journalctl --since "2026-08-01 09:00:00" --until "2026-08-01 10:00:00"
# 1時間前から現在まで
journalctl --since "1 hour ago"
ステップ4:ログレベルで絞り込む
# エラー以上(error, critical, alert, emergency)のみ表示
journalctl -p err
# 警告以上
journalctl -p warning
# 優先度をレベル番号で指定(0=emerg〜7=debug)
journalctl -p 3
優先度の一覧:
| 番号 | 名前 | 意味 |
|---|---|---|
| 0 | emerg | システムが使用不能 |
| 1 | alert | 即座に対応が必要 |
| 2 | crit | クリティカルエラー |
| 3 | err | 通常のエラー |
| 4 | warning | 警告 |
| 5 | notice | 注意が必要な正常状態 |
| 6 | info | 情報メッセージ |
| 7 | debug | デバッグ情報 |
ステップ5:出力形式を変える
# タイムスタンプを短縮せず表示
journalctl -o short-precise
# JSON形式で出力(スクリプト処理に便利)
journalctl -o json
# JSON を整形して出力
journalctl -o json-pretty -n 5
# カーネルメッセージのみ表示(dmesg の代わり)
journalctl -k
ステップ6:ディスク使用量を確認・管理する
ジャーナルログはディスクを消費します。定期的に確認しましょう。
# ジャーナルのディスク使用量を表示
journalctl --disk-usage
# 古いログを削除(直近 1 GB だけ残す)
sudo journalctl --vacuum-size=1G
# 直近 7 日分だけ残す
sudo journalctl --vacuum-time=7d
# 直近 5 件のブート分だけ残す
sudo journalctl --vacuum-files=5
ステップ7:ブート単位でログを確認する
# 現在のブートのログのみ
journalctl -b
# 前回のブートのログ
journalctl -b -1
# 2回前のブートのログ
journalctl -b -2
# ブート一覧を表示
journalctl --list-boots
システムが突然再起動した場合、前回のブートログを調べると原因が分かることがあります。
ステップ8:テキスト検索と組み合わせる
journalctl は grep とパイプでよく組み合わせて使います。
# "error" を含む行だけ抽出
journalctl -u nginx | grep -i error
# 今日のログから "failed" を探す
journalctl --since today | grep -i failed
# 特定 PID のログを確認
journalctl _PID=1234
実践例:サービスの障害原因を調査する
実際に問題が起きたときの調査フローを見てみましょう。
# 1. エラーログを直近から確認
journalctl -p err -n 30
# 2. 問題のサービス(例: nginx)のログを確認
journalctl -u nginx --since "1 hour ago"
# 3. リアルタイムでサービスを再起動しながらログを確認
journalctl -u nginx -f &
sudo systemctl restart nginx
# 4. 前回のブートで何が起きたかを確認
journalctl -b -1 -p err
練習問題
問題1
sshd サービスの今日のログを表示するコマンドを書いてください。
問題2
ジャーナルのディスク使用量を確認した後、古いログを削除して合計 500 MB 以下にしてください。
問題3
直前のシステム起動時に記録されたエラー以上のログをすべて表示してください。
練習問題の答え
答え1
journalctl -u sshd --since today
答え2
# まず使用量を確認
journalctl --disk-usage
# 500 MB 以下になるよう古いログを削除
sudo journalctl --vacuum-size=500M
答え3
journalctl -b -1 -p err
まとめ
| オプション | 用途 |
|---|---|
-f | リアルタイム表示 |
-n N | 末尾 N 行表示 |
-u <unit> | 特定サービスのログ |
--since / --until | 時間範囲を絞る |
-p <priority> | ログレベルで絞る |
-b [N] | ブート単位で絞る |
-k | カーネルログのみ |
--disk-usage | 使用量確認 |
--vacuum-size | ログ削除 |
journalctl をマスターすると、システムトラブルの調査が格段に速くなります。
次のステップとして、grep や awk と組み合わせた高度なログ解析にも挑戦してみてください。