システム管理 中級

journalctlでシステムログを読む

systemdのjournalctlコマンドを使ってLinuxのシステムログを検索・フィルタリング・確認する方法を学ぶ

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

優先度の一覧:

番号名前意味
0emergシステムが使用不能
1alert即座に対応が必要
2critクリティカルエラー
3err通常のエラー
4warning警告
5notice注意が必要な正常状態
6info情報メッセージ
7debugデバッグ情報

ステップ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:テキスト検索と組み合わせる

journalctlgrep とパイプでよく組み合わせて使います。

# "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 をマスターすると、システムトラブルの調査が格段に速くなります。 次のステップとして、grepawk と組み合わせた高度なログ解析にも挑戦してみてください。