言語
日本語
English

Caution

お使いのブラウザはJavaScriptが無効になっております。
当サイトでは検索などの処理にJavaScriptを使用しています。
より快適にご利用頂くため、JavaScriptを有効にしたうえで当サイトを閲覧することをお勧めいたします。

Linux & Mac & Bashコマンド辞典

  1. トップページ
  2. Linux & Mac & Bashコマンド辞典
  3. journalctl

journalctl

『journalctl』は systemd が管理するジャーナル(構造化ログ)を参照するコマンドです。『-u』でサービスを絞り込み、『-p』でエラーレベルを指定し、『--since』、『--until』で時刻範囲を絞るなど、大量のログから必要な情報をすばやく取り出せます。『-f』オプションを使うとリアルタイムにログをフォローできるため、障害調査やデプロイ直後の動作確認に役立ちます。

構文

# -----------------------------------------------
#  journalctl の基本構文
# -----------------------------------------------

# journalctl [オプション] [マッチ条件 ...]
#   → systemd ジャーナルのログを表示します
#   → オプションを何も付けない場合はすべてのログを表示します(古い順)

# -----------------------------------------------
#  サービス単位で絞り込む
# -----------------------------------------------

# journalctl -u {ユニット名}
#   → 指定した systemd ユニット(サービス)のログのみ表示します
#   例: journalctl -u nginx.service

# journalctl -u {ユニット名} -f
#   → サービスのログをリアルタイムにフォローします(tail -f 相当)
#   例: journalctl -u php-fpm.service -f

# -----------------------------------------------
#  表示件数を絞る
# -----------------------------------------------

# journalctl -n {行数}
#   → 最新の N 行だけ表示します
#   例: journalctl -n 50

# journalctl -u {ユニット名} -n {行数}
#   → サービスを絞った上で最新 N 行を表示します
#   例: journalctl -u nginx.service -n 100

# -----------------------------------------------
#  優先度(ログレベル)で絞り込む
# -----------------------------------------------

# journalctl -p {レベル}
#   → 指定した優先度以上のログのみ表示します
#   優先度: emerg(0) alert(1) crit(2) err(3) warning(4) notice(5) info(6) debug(7)
#   例: journalctl -p err          # err 以上(err/crit/alert/emerg)
#   例: journalctl -p warning      # warning 以上

# -----------------------------------------------
#  時刻範囲で絞り込む
# -----------------------------------------------

# journalctl --since "{日時}" --until "{日時}"
#   → 開始日時・終了日時を指定してログを絞り込みます
#   日時フォーマット: "YYYY-MM-DD HH:MM:SS" または "today" "yesterday" "-1h" 等
#   例: journalctl --since "2026-03-25 08:00:00" --until "2026-03-25 09:00:00"
#   例: journalctl --since "today"
#   例: journalctl --since "-30min"

# -----------------------------------------------
#  起動セッションで絞り込む
# -----------------------------------------------

# journalctl -b
#   → 現在の起動セッション(最後に再起動してから)のログを表示します

# journalctl -b -1
#   → ひとつ前の起動セッションのログを表示します

# -----------------------------------------------
#  カーネルログ
# -----------------------------------------------

# journalctl -k
#   → カーネルメッセージ(dmesg 相当)を表示します

# -----------------------------------------------
#  ページャを無効にして全出力する
# -----------------------------------------------

# journalctl --no-pager
#   → less などのページャを使わずにすべて標準出力に出力します
#   → grep や他のコマンドにパイプで渡す場合に使用します
#   例: journalctl -u nginx.service --no-pager | grep "error"

# -----------------------------------------------
#  出力フォーマットを変える
# -----------------------------------------------

# journalctl -o {フォーマット}
#   → 出力形式を指定します
#   フォーマット: short(デフォルト)short-precise json cat verbose 等
#   例: journalctl -u nginx.service -o json
#   例: journalctl -u nginx.service -o short-precise  # マイクロ秒まで表示

構文一覧

オプション説明
-u {ユニット名}指定した systemd ユニット(サービス)のログのみ表示します。『.service』サフィックスは省略可能です。
-fログをリアルタイムにフォローします。『tail -f』相当の動作です。『Ctrl+C』で終了します。
-n {行数}最新の N 行だけ表示します。デフォルトは最新 10 行です。
-p {レベル}指定した優先度以上のログのみ表示します。『err』を指定するとエラー・クリティカル・アラート・緊急ログだけ抽出できます。
--since "{日時}"指定した日時以降のログを表示します。"today" "yesterday" "-1h" などの相対指定も使えます。
--until "{日時}"指定した日時以前のログを表示します。『--since』と組み合わせて時刻範囲を絞り込みます。
-b現在の起動セッションのログのみ表示します。『-b -1』でひとつ前の起動セッションを参照できます。
-kカーネルメッセージのみ表示します。『dmesg』コマンドと同等の情報です。
--no-pagerページャを使わずにすべてを標準出力に出力します。『grep』などへのパイプで活用します。
-o {フォーマット}出力形式を指定します。『json』でスクリプト処理向けの JSON 出力、『short-precise』でマイクロ秒単位のタイムスタンプになります。
--disk-usageジャーナルが使用しているディスク容量を表示します。
--vacuum-time={期間}指定した期間より古いジャーナルを削除します。例:--vacuum-time=7d(7日より古いログを削除)。

使用例

# -----------------------------------------------
#  nginx.service のログを確認する
# -----------------------------------------------

# nginx サービスの最新 20 行を表示します
journalctl -u nginx.service -n 20

# nginx サービスのログをリアルタイムにフォローします
# デプロイ直後やリクエスト確認時に使います
journalctl -u nginx.service -f

実行するコマンドは次の通りです。

$ journalctl -u nginx.service -n 5
Mar 25 08:01:14 kakarot nginx[1423]: 2026/03/25 08:01:14 [notice] 1423#1423: signal process started
Mar 25 08:01:14 kakarot systemd[1]: Reloading A high performance web server and a reverse proxy server...
Mar 25 08:01:14 kakarot systemd[1]: Reloaded A high performance web server and a reverse proxy server.
Mar 25 08:02:35 kakarot nginx[1502]: 192.168.1.10 - - [25/Mar/2026:08:02:35 +0900] "GET / HTTP/1.1" 200 612
Mar 25 08:03:10 kakarot nginx[1502]: 192.168.1.10 - - [25/Mar/2026:08:03:10 +0900] "GET /api/power-level HTTP/1.1" 200 128
エラーログのみ抽出する
# -----------------------------------------------
#  err 以上の優先度でエラーを抽出します
# -----------------------------------------------

# 現在の起動セッションのエラーログをすべて表示します
journalctl -b -p err

# nginx サービスのエラーだけ取り出します
journalctl -u nginx.service -p err --no-pager

# php-fpm サービスの warning 以上のログを確認します
journalctl -u php-fpm.service -p warning --no-pager

実行するコマンドは次の通りです。

$ journalctl -u nginx.service -p err --no-pager
Mar 25 07:45:02 kakarot nginx[1201]: 2026/03/25 07:45:02 [error] 1201#1201: *3 connect() failed (111: Connection refused) while connecting to upstream
Mar 25 07:58:44 kakarot nginx[1201]: 2026/03/25 07:58:44 [error] 1201#1201: *7 open() "/var/www/html/favicon.ico" failed (2: No such file or directory)
時刻範囲を指定してログを絞り込む
# -----------------------------------------------
#  --since / --until で時刻範囲を絞ります
# -----------------------------------------------

# 今日の 07:00 〜 08:00 のログを表示します
journalctl --since "2026-03-25 07:00:00" --until "2026-03-25 08:00:00"

# 直近 30 分のログを表示します
journalctl --since "-30min"

# 直近 30 分の nginx エラーを絞り込みます
journalctl -u nginx.service --since "-30min" -p err --no-pager

実行するコマンドは次の通りです。

$ journalctl --since "2026-03-25 07:00:00" --until "2026-03-25 08:00:00" -u nginx.service --no-pager
Mar 25 07:00:05 kakarot systemd[1]: Started A high performance web server and a reverse proxy server.
Mar 25 07:00:05 kakarot nginx[987]: 2026/03/25 07:00:05 [notice] 987#987: using the "epoll" event method
Mar 25 07:00:05 kakarot nginx[987]: 2026/03/25 07:00:05 [notice] 987#987: nginx/1.24.0
Mar 25 07:45:02 kakarot nginx[1201]: 2026/03/25 07:45:02 [error] 1201#1201: *3 connect() failed (111: Connection refused) while connecting to upstream
JSON 出力でログをスクリプト処理する
# -----------------------------------------------
#  -o json でログを JSON 形式で出力します
# -----------------------------------------------

# nginx サービスの最新 3 件を JSON で出力します
# jq コマンドと組み合わせてフィールドを抽出できます
journalctl -u nginx.service -n 3 -o json --no-pager | jq '._HOSTNAME, .MESSAGE'

実行するコマンドは次の通りです。

$ journalctl -u nginx.service -n 3 -o json --no-pager | jq '._HOSTNAME, .MESSAGE'
"kakarot"
"2026/03/25 08:02:35 [notice] 1502#1502: signal process started"
"kakarot"
"192.168.1.10 - - [25/Mar/2026:08:02:35 +0900] \"GET / HTTP/1.1\" 200 612"
"kakarot"
"192.168.1.10 - - [25/Mar/2026:08:03:10 +0900] \"GET /api/power-level HTTP/1.1\" 200 128"
ジャーナルのディスク使用量を確認して古いログを削除する
# -----------------------------------------------
#  ジャーナルの容量管理
# -----------------------------------------------

# ジャーナルが使用しているディスク容量を確認します
journalctl --disk-usage

# 7 日より古いジャーナルを削除します
sudo journalctl --vacuum-time=7d

# ジャーナルサイズを 500MB 以下に抑えます
sudo journalctl --vacuum-size=500M

実行するコマンドは次の通りです。

$ journalctl --disk-usage
Archived and active journals take up 124.0M in the file system.
$ sudo journalctl --vacuum-time=7d
Vacuuming done, freed 56.0M of archived journals from /var/log/journal/.

概要

『journalctl』は systemctl と同じく systemd の中核コマンドの一つです。systemd は各サービス(systemd ユニット)のログをバイナリ形式のジャーナルに蓄積しており、『journalctl』がその読み出しインターフェースになります。『-u』によるサービス絞り込みと『-p err』によるエラー抽出を組み合わせると、障害発生時に素早く原因を特定できます。『-f』によるリアルタイムフォローはデプロイ直後のアプリケーション動作確認にも有効です。ログが増えてディスクを圧迫する場合は『--vacuum-time』、『--vacuum-size』で定期的に整理することをお勧めします。『/etc/systemd/journald.conf』を編集すると保存期間やサイズ上限を恒久的に設定できます。

記事の間違いや著作権の侵害等ございましたらお手数ですがまでご連絡頂ければ幸いです。