journalctlコマンドの使い方|systemdログの確認・検索・管理方法


図解60p「Linuxサーバー構築入門マニュアル」無料
登録10秒/自動返信でDL/合わなければ解除3秒
HOMELinux技術 リナックスマスター.JP(Linuxマスター.JP)Linuxコマンド, LinuxコマンドF-J, システム管理コマンド > journalctlコマンドの使い方|systemdログの確認・検索・管理方法
「サーバーで障害が起きたとき、ログを確認したいのにどこを見ればいいかわからない」
「tail -f /var/log/messages でログを追っていたけど、systemd環境ではうまく表示されない」

RHEL7/CentOS7以降のLinuxでは、ログ管理の仕組みがsyslogからsystemd-journaldに大きく変わりました。従来の/var/log/messagesに加えて、journalctlコマンドによるログ確認が必須スキルです。
この記事では、journalctlコマンドの基本操作から、サービス別のログ抽出、日時指定、優先度フィルタ、ジャーナルの容量管理まで、実務で必要な使い方を網羅します。

なぜjournalctlなのか? ~ 従来のsyslogとの違い

従来のLinuxでは、rsyslogがシステムログを/var/log/messagesや/var/log/secureなどのテキストファイルに書き出していました。ログの確認はcat、grep、tail -fで事足りていたわけです。

しかし、systemd環境ではsystemd-journaldというログ収集デーモンが並行して動いています。journaldはログをバイナリ形式で保存するため、テキストエディタやcatでは読めません。代わりにjournalctlコマンドを使います。

journalctlを使うメリットは明確です。

構造化データ:サービス名、PID、優先度などがメタデータとして記録されるため、ピンポイントで絞り込める
日時指定が簡単:--sinceと--untilオプションで「昨日の深夜2時から3時」のようなフィルタが一発でできる
起動単位の管理:前回起動時のログ、前々回起動時のログなど、再起動をまたいだログ管理ができる
テキストログとの共存:rsyslogが併用されている環境では、/var/log/messagesも引き続き出力される

※RHEL/CentOSではrsyslogとjournaldが両方動いているのが一般的です。journalctlを覚えたからといって、/var/log配下のログが不要になるわけではありません。両方使えるようにしておきましょう。

journalctlの基本的な使い方

1. 全ログを表示する

引数なしでjournalctlを実行すると、システムの全ログが古い順に表示されます。

# 全ログを表示(ページャーで開く) journalctl # ページャーを使わず全出力する場合 journalctl --no-pager

ログ量が膨大なので、実務で引数なしのjournalctlを使うことはほとんどありません。次に紹介するフィルタオプションと組み合わせて使うのが基本です。

2. 特定サービスのログを確認する(-u)

最も頻繁に使うオプションです。-u(--unit)でサービス名を指定すると、そのサービスのログだけを抽出できます。

# httpdのログだけ表示 journalctl -u httpd # sshdのログだけ表示 journalctl -u sshd # NetworkManagerのログだけ表示 journalctl -u NetworkManager

「サービスが起動しない」「突然停止した」といったトラブル時は、まずjournalctl -u サービス名で確認するのが鉄則です。

3. リアルタイムでログを監視する(-f)

tail -f /var/log/messagesの代わりに使えるオプションです。新しいログが出力されるたびに画面にリアルタイム表示されます。

# 全ログをリアルタイム監視 journalctl -f # 特定サービスだけリアルタイム監視 journalctl -f -u httpd # 複数サービスを同時に監視 journalctl -f -u httpd -u php-fpm

設定変更後にサービスを再起動して動作確認するとき、別ターミナルでjournalctl -f -u サービス名を流しておくと、エラーを即座にキャッチできます。

4. 末尾N行だけ表示する(-n)

# 最新20行を表示(デフォルトは10行) journalctl -n 20 # sshdの最新50行を表示 journalctl -u sshd -n 50

「最近のログだけサッと確認したい」ときに便利です。-fと似ていますが、-nは表示して終了、-fは監視し続けるという違いがあります。

5. 日時を指定してログを絞り込む(--since / --until)

障害対応で「昨夜の何時ごろから異常が出ていたか」を調べるときに重宝するオプションです。

# 今日のログだけ表示 journalctl --since today # 昨日のログだけ表示 journalctl --since yesterday --until today # 特定日時の範囲を指定 journalctl --since "2026-03-19 02:00:00" --until "2026-03-19 03:00:00" # 1時間前からのログ journalctl --since "1 hour ago" # 特定サービスの日時指定も可能 journalctl -u httpd --since "2026-03-19 00:00:00"

日時の書式は「YYYY-MM-DD HH:MM:SS」です。today、yesterday、"1 hour ago"などの相対指定も使えるので、覚えておくと作業が早くなります。

6. 優先度でフィルタする(-p)

ログにはemerg(緊急)からdebug(デバッグ)まで8段階の優先度があります。-pオプションで指定した優先度以上のログだけを抽出できます。

# エラー以上(err + crit + alert + emerg)を表示 journalctl -p err # 警告以上を表示 journalctl -p warning # 特定サービスのエラーだけ表示 journalctl -u httpd -p err

優先度の一覧は以下の通りです。

0 emerg:システムが使用不能
1 alert:即座に対処が必要
2 crit:致命的な状態
3 err:エラー
4 warning:警告
5 notice:注意(正常だが重要)
6 info:情報
7 debug:デバッグ

障害調査ではまずjournalctl -p errで全体のエラーを俯瞰し、怪しいサービスを-uで絞り込む、という流れが効率的です。

7. 今回の起動以降のログを表示する(-b)

# 今回の起動以降のログ journalctl -b # 前回起動時のログ journalctl -b -1 # 前々回起動時のログ journalctl -b -2

「再起動したら動かなくなった」という場合に、-b(今回の起動)と-b -1(前回の起動)を比較すると、原因が見つかりやすくなります。

※-b -1以前のログを見るには、ジャーナルが永続化されている必要があります。永続化の設定は後述の「応用・実務Tips」で解説します。

応用・実務Tips

1. ジャーナルの容量を確認する(--disk-usage)

ジャーナルはバイナリファイルとしてディスクに蓄積されます。放置すると容量を圧迫するため、定期的に確認しましょう。

# ジャーナルが使用しているディスク容量を確認 journalctl --disk-usage # 出力例 # Archived and active journals take up 1.2G in the file system.

2. 古いログを削除する(--vacuum-size / --vacuum-time)

ジャーナルの容量が大きくなりすぎた場合は、以下のコマンドで古いログを削除できます。

# 500MBまで縮小(古いものから削除) sudo journalctl --vacuum-size=500M # 30日より前のログを削除 sudo journalctl --vacuum-time=30d # 直近3回分の起動ログだけ残す sudo journalctl --vacuum-files=3

本番サーバーでは、cronやsystemd timerで定期的に--vacuum-timeを実行する運用がよくあります。

3. ジャーナルを永続化する(Storage=persistent)

デフォルト設定では、ジャーナルは/run/log/journal/にメモリ上で保存されるため、再起動するとログが消えます。

永続化するには、/etc/systemd/journald.confを編集します。

# /etc/systemd/journald.conf を編集 sudo vi /etc/systemd/journald.conf # [Journal] セクションに以下を設定 Storage=persistent # 設定変更後、journaldを再起動 sudo systemctl restart systemd-journald

永続化すると、ログは/var/log/journal/に保存されるようになります。これにより、-b -1(前回起動のログ)なども参照できるようになります。

容量制限も合わせて設定しておくのがおすすめです。

# /etc/systemd/journald.conf の設定例 [Journal] Storage=persistent SystemMaxUse=1G SystemMaxFileSize=100M MaxRetentionSec=90d

SystemMaxUse:ジャーナル全体の最大サイズ
SystemMaxFileSize:個々のジャーナルファイルの最大サイズ
MaxRetentionSec:保持する最大期間

4. 出力フォーマットを変更する(-o)

# 短縮表示(デフォルト) journalctl -o short # ISO 8601形式の日時で表示(スクリプトの解析に便利) journalctl -o short-iso # JSON形式で出力(外部ツールとの連携に) journalctl -u httpd -o json # 1行1エントリのJSON形式 journalctl -u httpd -o json-pretty # 詳細な全フィールドを表示 journalctl -o verbose

ログをスクリプトで自動解析する場合は-o json、目視で全フィールドを確認したい場合は-o verboseが便利です。

5. 特定PIDのログを確認する

特定のプロセスが出力したログだけを確認したいときは、_PIDフィールドを指定します。

# PID 1234のログを表示 journalctl _PID=1234 # カーネルメッセージだけ表示(dmesgの代替) journalctl -k

_PID以外にも、_UID(ユーザーID)、_GID(グループID)、_COMM(コマンド名)などのフィールドで絞り込むことができます。

「No journal files were found」が出た時の対処法

journalctlを実行して以下のメッセージが表示される場合があります。

$ journalctl No journal files were found.

原因と対処法は以下の通りです。

権限不足:一般ユーザーでジャーナルを読む権限がない。sudoを付けてsudo journalctlで実行するか、ユーザーをsystemd-journalグループに追加する

# ユーザーをsystemd-journalグループに追加(再ログイン後に有効) sudo usermod -aG systemd-journal ユーザー名

ジャーナルディレクトリが存在しない:/var/log/journal/ディレクトリがない場合は作成する

# ディレクトリを作成してjournaldを再起動 sudo mkdir -p /var/log/journal sudo systemd-tmpfiles --create --prefix /var/log/journal sudo systemctl restart systemd-journald

ログが再起動で消える場合の対処

「再起動するとjournalctlのログが全部消えている」という場合は、ジャーナルが永続化されていません。

現在の設定を確認するには、以下のコマンドを実行します。

# ジャーナルの保存先を確認 journalctl --header | grep "File path" # /run/log/journal/ → 揮発性(再起動で消える) # /var/log/journal/ → 永続化済み

/run/log/journal/と表示された場合は、前述の「Storage=persistent」設定で永続化してください。

ジャーナルの容量が肥大化した時の対処

ジャーナルが数GBに膨れ上がってディスク容量を圧迫している場合は、以下の手順で対処します。

# 1. 現在の使用量を確認 journalctl --disk-usage # 2. 古いログを削除して500MBまで縮小 sudo journalctl --vacuum-size=500M # 3. 削除後の使用量を確認 journalctl --disk-usage # 4. 再発防止のため、journald.confに上限を設定 sudo vi /etc/systemd/journald.conf # SystemMaxUse=1G を追記 # 5. 設定を反映 sudo systemctl restart systemd-journald

再発防止には、journald.confでSystemMaxUseを設定しておくことが重要です。サーバーのディスク容量に応じて、500M~2G程度を目安に設定してください。

本記事のまとめ

journalctlはsystemd環境のログ管理に欠かせないコマンドです。サービスのトラブル対応から日常のログ監視まで、以下のコマンドを押さえておけば現場で困ることはありません。
やりたいこと コマンド
全ログを表示する journalctl
特定サービスのログを表示する journalctl -u サービス名
リアルタイムでログを監視する journalctl -f
最新N行だけ表示する journalctl -n 行数
日時を指定してログを絞り込む journalctl --since "YYYY-MM-DD HH:MM:SS"
エラー以上のログだけ表示する journalctl -p err
今回の起動以降のログを表示する journalctl -b
特定PIDのログを表示する journalctl _PID=プロセスID
ジャーナルの容量を確認する journalctl --disk-usage
古いログを削除する(容量指定) sudo journalctl --vacuum-size=500M
古いログを削除する(日数指定) sudo journalctl --vacuum-time=30d
カーネルメッセージを表示する journalctl -k

サーバーのログ管理、自信を持ってできますか?

journalctlはログ確認の基本ですが、実務ではログの読み方だけでなく、サーバー全体の構築・運用スキルが求められます。
ネットの切れ端の情報をコピペするだけでなく、現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼントしています。

「独学の時間がもったいない」「プロから直接、現場の技術を最短で学びたい」という本気の方には、2日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。



無料プレゼント
図解60p「Linuxサーバー構築入門マニュアル」
独学で詰まる前に、“型(手順書)”で最初の環境構築をサクッと終わらせましょう。
登録10秒/自動返信でDL/合わなければ解除3秒
無料で受け取る ※メールアドレスだけでもOK(必須項目は最小限)

宮崎 智広

この記事を書いた人

宮崎 智広(みやざき ともひろ)

株式会社イーネットマーキュリー代表。現役のLinuxサーバー管理者として15年以上の実務経験を持ち、これまでに累計3,100名以上のエンジニアを指導してきたLinux教育のプロフェッショナル。「現場で本当に使える技術」を体系的に伝えることをモットーに、実践型のLinuxセミナーの開催や無料マニュアルの配布を通じてLinux人材の育成に取り組んでいる。

図解60pのLinux無料マニュアル
登録10秒/自動返信でDL
無料で受け取る