Linux journalctl コマンド完全ガイド|実践事例で使い方を徹底解説!

最終更新日 2025年3月10日

スポンサーリンク

journalctl コマンドの基本と使い方

Linuxのログ管理において、journalctl コマンドはシステムログを簡単に確認できる強力なツールです。トラブルシューティングやパフォーマンス分析をする際に、ログを適切に確認できることはエンジニアにとって必須のスキルです。

本記事では、journalctl の基本構文から頻出オプション、出力結果の読み取り方までをわかりやすく解説します。

  1. journalctl コマンドの基本構文を理解しよう
  2. journalctl コマンドの頻出オプション一覧|活用シーン別に解説
  3. その他の全オプション一覧とオプションの解説
  4. journalctl コマンドの出力結果の読み取り方
  5. journalctl のよく出力されるログ20選とその意味
  6. まとめ

journalctl コマンドの基本構文を理解しよう

journalctl コマンドは「systemd」のログを管理するためのコマンドです。
デフォルトでは /var/log/journal/ に保存されているバイナリ形式のログを読み取り、人間が読める形式に変換して出力します。

基本的な構文

journalctl [オプション] [フィルタ]

オプションを指定しない場合、すべてのログ を時系列順で出力します。

新人エンジニア
新人エンジニア

journalctl を実行したら大量のログが表示されてしまいました。どうすればいいですか?

先輩エンジニア
先輩エンジニア

基本構文だけだと全ログが表示されるから、オプションを使って適切に絞り込むのがポイントだよ。たとえば最新のログだけ見たいなら journalctl -n 50 で直近50件のログを表示できるよ。

journalctlコマンドの基本

基本構文

journalctl [オプション] [フィルタ]

オプションを指定しない場合、すべてのログを時系列順で出力します。

ログの保存場所

デフォルトでは/var/log/journal/に保存されています。

バイナリ形式のログを人間が読める形式に変換して出力します。
journalctlコマンドの基本
スポンサーリンク

journalctl コマンドの頻出オプション一覧|活用シーン別に解説

journalctl には便利なオプションが多数あり、状況に応じて適切に使い分けることが重要です。
以下に実務でよく使うオプションを一覧で紹介します。

オプション説明
-n [数]最新の [数] 件のログを表示
-fリアルタイムでログを監視(tail -f のような動作)
-u [サービス]指定したサービスのログのみを表示
--since / --until指定した時間範囲のログを表示
-p [優先度]指定した重要度のログのみ表示 (0=緊急, 7=デバッグ)
新人エンジニア
新人エンジニア

特定のサービスのログだけ確認するにはどうすればいいですか?

先輩エンジニア
先輩エンジニア

journalctl -u nginx のように -u オプションを使えば、そのサービスのログだけを表示できるよ。例えば、Nginxのログをリアルタイムで確認するなら journalctl -u nginx -f を使うと便利だよ。

新人エンジニア
新人エンジニア

エラーや警告だけを表示するにはどうすればいいですか?

先輩エンジニア
先輩エンジニア

-p オプションを使えば、指定した優先度以上のログだけを表示できるよ。例えば、エラー以上のログを見たいなら journalctl -p 3 ってやればOK。

頻出オプション一覧

-n [数]

最新の[数]件のログを表示

-f

リアルタイムでログを監視(tail -fのような動作)

-u [サービス]

指定したサービスのログのみを表示

--since / --until

指定した時間範囲のログを表示

-p [優先度]

指定した重要度のログのみ表示 (0=緊急, 7=デバッグ)
頻出オプション一覧
スポンサーリンク

その他の全オプション一覧とオプションの解説

オプション実行例説明
--system, --userjournalctl --systemシステム全体のログを表示(--user は現在のユーザーのログのみ)
-M, --machine=journalctl -M my-container特定のコンテナ(仮想環境)のログを表示
-m, --mergejournalctl -mローカル+リモート(外部サーバー)のすべてのログを統合して表示
-D DIR, --directory=DIRjournalctl -D /var/log/journal指定したディレクトリ(フォルダ)のジャーナルファイルを使用
-i GLOB, --file=GLOBjournalctl -i /var/log/journal/*指定したパターン(ワイルドカード)に一致するログファイルのみ使用
--root=ROOTjournalctl --root=/mnt/system-root指定したディレクトリのログを読み取る(例:別のシステムのログ)
--image=IMAGEjournalctl --image=disk.imgディスクイメージ(バックアップファイル)のログを読み取る
--namespace=NAMESPACEjournalctl --namespace=my_logs指定したジャーナルのネームスペース(区分)を使用
-S, --since=journalctl --since "2024-03-01"指定した日付以降のログを表示
-U, --until=journalctl --until "2024-03-05"指定した日付以前のログを表示
-b, --bootjournalctl -b -11つ前のブート(再起動)のログを表示
-u, --unit=UNITjournalctl -u nginx特定の systemd ユニット(例:nginx)のログを表示
-t, --identifier=SYSLOG_IDENTIFIERjournalctl -t sshd指定した syslog ID(ログを記録したプログラム)のログを表示
-p, --priority=journalctl -p 3指定した優先度(ログの重要度レベル)のログのみを表示(3=エラー 以上)
-g, --grep=journalctl -g "failed"メッセージ(ログの内容)の正規表現検索("failed" を含むログのみ表示)
-k, --dmesgjournalctl -kカーネルメッセージ(Linuxのシステムコア部分のログ)のみ表示
-o, --output=journalctl -o json-pretty出力フォーマットを変更(例:JSON 形式で見やすく表示)
-n, --lines=journalctl -n 50最新の50件のログを表示
-r, --reversejournalctl -r新しいエントリを先に表示(時系列を逆順に)
-f, --followjournalctl -fリアルタイムでログを表示(tail -f のように)
--disk-usagejournalctl --disk-usageジャーナルファイルのディスク使用量を表示
--vacuum-size=journalctl --vacuum-size=500Mジャーナルファイルを500MB以下に削減
--vacuum-time=journalctl --vacuum-time=7d7日より古いジャーナルファイルを削除
--vacuum-files=journalctl --vacuum-files=55つ以上のジャーナルファイルを削除
--verifyjournalctl --verifyジャーナルファイルの整合性(壊れていないか)をチェック
--syncjournalctl --syncジャーナルデータをディスクに即時書き込み
--rotatejournalctl --rotate現在のジャーナルファイルをアーカイブし、新しいファイルを作成
--flushjournalctl --flushメモリ上のログデータをディスクへ書き込む
--list-bootsjournalctl --list-boots過去のブート(再起動)の履歴を一覧表示
--list-invocationsjournalctl --list-invocations -u nginx特定のユニットの起動履歴を表示
--headerjournalctl --headerジャーナルファイルのヘッダー情報(構造情報)を表示
活用シーン別オプション

サービスログの確認

journalctl -u nginx のように-uオプションを使えば、そのサービスのログだけを表示できます。

リアルタイム監視

Nginxのログをリアルタイムで確認するなら journalctl -u nginx -f が便利です。

エラーログの抽出

-pオプションを使えば、指定した優先度以上のログだけを表示できます。

エラー以上のログを見たいなら journalctl -p 3 を使います。
活用シーン別オプション
スポンサーリンク

journalctl コマンドの出力結果の読み取り方

journalctl の出力結果は「時刻」「ホスト」「プロセス情報」「メッセージ」の4つの要素で構成されます。
ログを正しく解析するために、各要素の意味を理解しましょう。

出力フォーマット

Mar 09 12:34:56 server-name systemd[1]: Started Nginx HTTP Server.
Mar 09 12:35:01 server-name sshd[10234]: Failed password for root from 192.168.1.10 port 54321 ssh2

出力の各項目

  • 日時(Mar 09 12:34:56) → ログが記録されたタイムスタンプ
  • ホスト名(server-name) → ログを出力したマシンのホスト名
  • プロセス情報(systemd[1] / sshd[10234]) → 実行したプロセス名とPID
  • メッセージ内容(Started Nginx HTTP Server / Failed password…) → ログの具体的な内容
新人エンジニア
新人エンジニア

journalctl のログが読みにくいです。何か改善できますか?

先輩エンジニア
先輩エンジニア

-o オプションを使うとフォーマットを変更できるよ。例えば、JSON 形式で見たいなら journalctl -o json-pretty を試してみて。

新人エンジニア
新人エンジニア

システムが再起動したタイミングのログを見たいんですが、どうすればいいですか?

先輩エンジニア
先輩エンジニア

journalctl -b を使うと、現在のブート(起動)後のログだけを表示できるよ。前回のブートのログを見たいなら journalctl -b -1 ってやればいいよ。

出力結果の読み取り方

日時

Mar 09 12:34:56 → ログが記録されたタイムスタンプ

ホスト名

server-name → ログを出力したマシンのホスト名

プロセス情報

systemd[1] / sshd[10234] → 実行したプロセス名とPID

メッセージ内容

Started Nginx HTTP Server → ログの具体的な内容
出力結果の読み取り方
スポンサーリンク

journalctl のよく出力されるログ20選とその意味

ログの例意味(説明と補足)
Mar 09 12:34:56 server systemd[1]: Started Nginx HTTP Server.Nginx サーバーが起動した(systemd によるサービス管理の開始ログ)
Mar 09 12:35:01 server sshd[10234]: Failed password for root from 192.168.1.10 port 54321 ssh2SSH のログイン失敗(不正アクセスの可能性)
Mar 09 13:00:10 server kernel: CPU1: Core temperature above threshold, cpu clock throttledCPU の温度が閾値を超えた(サーバーの負荷問題が疑われる)
Mar 09 14:10:32 server systemd[1]: Failed to start MySQL Server.MySQL サーバーの起動に失敗(設定ミスやポート競合が原因の可能性)
Mar 09 14:45:23 server systemd[1]: Stopped Apache HTTP Server.Apache サーバーが停止した(手動または障害による可能性)
Mar 09 15:22:11 server systemd[1]: nginx.service: Main process exited, code=exited, status=1/FAILURENginx が異常終了(設定ミスやポート競合の可能性)
Mar 09 16:05:47 server kernel: Out of memory: Killed process 12345 (java)メモリ不足により Java プロセスが強制終了(OOM-Killer による)
Mar 09 16:50:30 server journalctl: No space left on deviceディスク容量不足(ログ肥大化や不要ファイル削除が必要)
Mar 09 17:14:09 server systemd[1]: Reached target Multi-User System.マルチユーザーモードに到達(システム起動完了)
Mar 09 17:45:02 server systemd-logind[123]: New session 42 of user john.ユーザー “john” が新しいセッションを開始(ログイン成功)
Mar 09 18:10:29 server kernel: EXT4-fs error (device sda1): ext4_find_entry:1456: inode #2ファイルシステムエラー(ディスクの不良や fsck が必要)
Mar 09 18:34:20 server systemd[1]: Unit apache2.service entered failed state.Apache サーバーが異常終了(設定エラーやクラッシュの可能性)
Mar 09 19:01:55 server kernel: eth0: Link is Downネットワークインターフェース(eth0)が切断(物理的な断線や設定変更の可能性)
Mar 09 19:25:48 server kernel: eth0: Link is Upネットワークインターフェース(eth0)が接続(復旧または再接続)
Mar 09 20:02:33 server systemd[1]: Starting Cleanup of Temporary Directories...一時ディレクトリ(/tmp)のクリーンアップ開始
Mar 09 20:30:00 server systemd[1]: Shutting down system.システムがシャットダウンを開始(手動またはスケジュールによる可能性)
Mar 09 21:10:45 server audit[1234]: ANOM_PROMISCUOUS dev=eth0ネットワークインターフェースがプロミスキャスモードに(パケットキャプチャや不正アクセスの兆候)
Mar 09 21:40:12 server systemd[1]: Mounted /var/log./var/log ディレクトリがマウントされた(システム起動時の処理)
Mar 09 22:15:50 server crond[4567]: (root) CMD (/usr/bin/backup.sh)root ユーザーによる cron ジョブの実行(スケジュールされたバックアップ処理)
よく出力されるログとその意味

サービス起動

Started Nginx HTTP Server → Nginxサーバーが起動した

ログイン失敗

Failed password for root → SSHのログイン失敗(不正アクセスの可能性)

温度警告

CPU temperature above threshold → CPUの温度が閾値を超えた

メモリ不足

Out of memory: Killed process → メモリ不足によりプロセスが強制終了
よく出力されるログとその意味
スポンサーリンク

まとめ

journalctl コマンドは Linux システムのログ管理において不可欠なツール です。
基本構文を理解し、適切なオプションを活用することで、トラブルシューティングやシステム監視がスムーズに行えます。特に 特定のサービスのログを絞り込んだり、リアルタイム監視を行う方法をマスターすることが重要 です。

実際の運用では、

  • ログのフィルタリング (-u, -p, --since) を適切に活用する
  • 出力フォーマット (-o json-pretty) を変えて見やすくする
  • 特定のログのみ監視 (-f でリアルタイム監視)

といったテクニックを身につけましょう。

出力フォーマットの変更

JSON形式

journalctl -o json-pretty で見やすいJSON形式で表示できます。

起動時のログ

journalctl -b で現在の起動後のログだけを表示できます。

過去の起動ログ

前回の起動のログを見たいなら journalctl -b -1 を使います。
出力フォーマットの変更

journalctl コマンドの活用事例

journalctl を適切に活用すれば、トラブルシューティングの効率を大幅に向上させられます。
実際の業務では、システムの不具合や障害対応の際に journalctl を活用することで、迅速な原因特定と解決が可能です。ここでは、実際の業務での成功事例を紹介します。

  1. ケース1:Nginx の突然の停止を特定し、迅速に復旧
  2. ケース2:SSH の不正アクセスを特定し、対策を実施

ケース1:Nginx の突然の停止を特定し、迅速に復旧

ある日、運用している Web サーバーで Nginx が突然停止 しました。再起動しても数分後には停止する状況でした。

対応手順

1.サービスの状態を確認

systemctl status nginx

「Main process exited, code=exited, status=1」というエラーが表示

2.journalctl で詳細なログを取得

journalctl -u nginx --since "1 hour ago"

「no space left on device」エラーを発見

3.ディスク容量を確認

df -h

ログファイルが肥大化し、ディスクがいっぱいになっていたことが判明

4.不要なログを削除し、Nginx を再起動

rm -rf /var/log/nginx/* systemctl restart nginx 

正常稼働を確認

新人エンジニア
新人エンジニア

Nginx の動作が不安定ですが、どこから調べればいいですか?

先輩エンジニア
先輩エンジニア

まず systemctl status nginx で概要を確認して、詳細なログは journalctl -u nginx でチェックしよう。

ケース1:Nginxの突然の停止

状態確認

systemctl status nginx で「Main process exited, code=exited, status=1」エラーを確認

ログ取得

journalctl -u nginx --since "1 hour ago" で「no space left on device」エラーを発見

ディスク確認

df -h でログファイルが肥大化し、ディスクがいっぱいになっていたことを確認

対応策実施

不要なログを削除し、Nginxを再起動して正常稼働を確認
ケース1:Nginxの突然の停止
スポンサーリンク

ケース2:SSH の不正アクセスを特定し、対策を実施

最近、SSH のログイン試行が急増 し、不正アクセスの可能性が浮上しました。

対応手順

1.journalctl で SSH の失敗ログを確認

journalctl -u sshd -p 3 --since "yesterday"

「Failed password for root from 192.168.1.10」 のログが多数記録

2.該当 IP アドレスをブロック

sudo iptables -A INPUT -s 192.168.1.10 -j DROP

3.Fail2Ban を導入し、自動ブロックを設定

sudo apt install fail2ban
新人エンジニア
新人エンジニア

SSH のログイン試行が多い気がしますが、どこを見ればわかりますか?

先輩エンジニア
先輩エンジニア

journalctl -u sshd -p 3 でエラーログを確認できるよ。試行回数が多い IP はブロックしよう。

ケース2:SSHの不正アクセス対応

ログ確認

journalctl -u sshd -p 3 --since "yesterday"

不正アクセス特定

「Failed password for root from 192.168.1.10」を多数確認

IPブロック

sudo iptables -A INPUT -s 192.168.1.10 -j DROP

自動防御設定

Fail2Banを導入し、自動ブロックを設定
ケース2:SSHの不正アクセス対応
スポンサーリンク

journalctl コマンドの失敗事例|よくあるミスと対策

journalctl の使い方を誤ると、トラブルシューティングの時間がかかる原因になります。
ここでは、実際に起こった失敗事例とその対策を紹介します。

  1. ケース1:ログを適切に絞り込まず、大量のログを表示してしまった
  2. ケース2:誤ったサービス名を指定し、ログが取得できなかった

ケース1:ログを適切に絞り込まず、大量のログを表示してしまった

運用中のアプリケーションで障害が発生し、journalctl でログを調査しようとしたところ、大量のログが表示されてしまい、量が多くネットワークトラフィックを圧迫してしまいました。

失敗したコマンド

journalctl

数十万行のログが出力され、目的のログを見つけられなかった

正しい方法

1.直近のログのみ表示

journalctl -n 50

2.特定の時間帯のログを検索

journalctl --since "2024-03-01 12:00:00" --until "2024-03-01 14:00:00"
新人エンジニア
新人エンジニア

journalctl を実行したらログが多すぎて見切れません!

先輩エンジニア
先輩エンジニア

-n 50--since を使って、必要な範囲だけ表示しよう。

失敗事例1:大量ログの表示

問題

単に journalctl を実行し大量ログを表示

影響

数十万行のログが出力され目的のログを見つけられない

対策1

journalctl -n 50 で直近のログのみ表示

対策2

時間指定で絞り込み --since "2024-03-01 12:00:00"
失敗事例1:大量ログの表示
スポンサーリンク

ケース2:誤ったサービス名を指定し、ログが取得できなかった

特定のサービスのエラーログを調査しようとして、誤ったサービス名を指定してしまった経験があります。

失敗したコマンド

journalctl -u nginx.service

「No entries found」エラー発生

正しい方法 サービス名を正しく指定

journalctl -u nginx

systemctl list-units --type=service で正しい名前を確認可能

新人エンジニア
新人エンジニア

特定のサービスのログが取れません!

先輩エンジニア
先輩エンジニア

systemctl list-units --type=service で正しい名前を確認しよう。

失敗事例2:誤ったサービス名指定

問題

誤ったサービス名を指定してしまった

エラー

「No entries found」エラーが発生

対策

systemctl list-units --type=service で正しい名前を確認

失敗したコマンド例: journalctl -u nginx.service

正しいコマンド例: journalctl -u nginx
失敗事例2:誤ったサービス名指定
スポンサーリンク

まとめ|journalctl コマンドを使いこなすために

journalctl コマンドは Linux システムのトラブルシューティングに不可欠なツールです。
しかし、適切にフィルタリングしないと、目的のログを素早く取得できず、調査に時間がかかることになります。

journalctl を効果的に活用するポイント

  • -u [サービス名] で特定のサービスのログを取得
  • -p [優先度] を活用し、エラーレベルごとに絞り込む
  • --since-n [件数] でログの範囲を限定する
  • 正しいサービス名を確認し、誤った指定をしない
  • リアルタイム監視 (-f オプション) を活用する
新人エンジニア
新人エンジニア

journalctl を使いこなせば、トラブル対応がもっと速くなりますか?

先輩エンジニア
先輩エンジニア

間違いなく速くなるよ!適切なフィルタリングとオプションを活用すれば、ログ解析のスピードが格段に上がる。

journalctl を活用し、システムトラブルに素早く対応できるエンジニア を目指しましょう!

システム監視のベストプラクティス
ゴリタンが愛用しているLinuxの教科書たち
https://amzn.to/4hBQa2y
https://a.r10.to/hkpc1F

この記事も参考になるかも!
この記事を書いた人!

ゴリタン

インフラエンジニアとして、ネットワークとサーバーの運用・保守・構築・設計に幅広く携わり、
現在は大規模政府公共データの移行プロジェクトを担当。

CCNPやLPICレベル3、AWSセキュリティスペシャリストなどの資格を保有しています。

あなたにオススメの広告
スポンサーリンク
Linux教科書