「tail -f /var/log/messages でログを追っていたけど、systemd環境ではうまく表示されない」
RHEL7/CentOS7以降のLinuxでは、ログ管理の仕組みがsyslogからsystemd-journaldに大きく変わりました。従来の/var/log/messagesに加えて、journalctlコマンドによるログ確認が必須スキルです。
この記事では、journalctlコマンドの基本操作から、サービス別のログ抽出、日時指定、優先度フィルタ、ジャーナルの容量管理まで、実務で必要な使い方を網羅します。
・journalctlと従来のsyslogの違い(なぜjournalctlが必要か)
・-u/-f/-n/--since/--untilなど実務で使う主要オプションの使い方
・-pオプションでエラー以上のログだけを素早く抽出する方法
・ジャーナルを永続化して再起動後もログを保持する設定方法
・容量肥大化を防ぐvacuum設定とjournald.confの設定例
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
なぜ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
ログの末尾(最新部分)から確認したい場合は、
-e オプションを使います。# 末尾(最新)にジャンプした状態で表示 journalctl -e
2. 特定サービスのログを確認する(-u)
最も頻繁に使うオプションです。-u(--unit)でサービス名を指定すると、そのサービスのログだけを抽出できます。# httpdのログだけ表示 journalctl -u httpd # sshdのログだけ表示 journalctl -u sshd # NetworkManagerのログだけ表示 journalctl -u NetworkManager # MariaDBのログを確認 journalctl -u mariadb # Postfixのログを確認 journalctl -u postfix
.service を省略できます。httpd.service と httpd は同じ結果です。「サービスが起動しない」「突然停止した」といったトラブル時は、まずjournalctl -u サービス名で確認するのが鉄則です。
【注意】サービス名が分からない場合は、
systemctl list-units --type=service で一覧を確認してください。3. リアルタイムでログを監視する(-f)
tail -f /var/log/messagesの代わりに使えるオプションです。新しいログが出力されるたびに画面にリアルタイム表示されます。# 全ログをリアルタイム監視 journalctl -f # 特定サービスだけリアルタイム監視 journalctl -f -u httpd # 複数サービスを同時に監視 journalctl -f -u httpd -u php-fpm
Ctrl + C で監視を停止してください。4. 末尾N行だけ表示する(-n)
# 最新20行を表示(デフォルトは10行) journalctl -n 20 # sshdの最新50行を表示 journalctl -u sshd -n 50
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"
サービス指定と組み合わせれば、「今日のhttpdのエラーログだけ」といったピンポイントの絞り込みも可能です。
# 今日のhttpdのエラーだけ journalctl -u httpd -p err --since today
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 # ブート一覧を表示 journalctl --list-boots
--list-boots で過去のブート履歴を確認し、特定のブートのログを参照できます。※-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
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
容量制限も合わせて設定しておくのがおすすめです。
# /etc/systemd/journald.conf の設定例 [Journal] Storage=persistent SystemMaxUse=1G SystemMaxFileSize=100M MaxRetentionSec=90d
・SystemMaxUse:ジャーナル全体の最大サイズ
・SystemMaxFileSize:個々のジャーナルファイルの最大サイズ
・MaxRetentionSec:保持する最大期間(90dを超えたログは自動削除)
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
jq コマンドと組み合わせることで、特定のフィールドだけを抽出する高度なフィルタリングが可能です。5. 特定PIDのログを確認する
特定のプロセスが出力したログだけを確認したいときは、_PIDフィールドを指定します。# PID 1234のログを表示 journalctl _PID=1234 # カーネルメッセージだけ表示(dmesgの代替) journalctl -k
systemctl status サービス名 や ps aux | grep プロセス名 で確認できます。「No journal files were found」が出た時の対処法
journalctlを実行して以下のメッセージが表示される場合があります。$ journalctl No journal files were found.
・権限不足:一般ユーザーでジャーナルを読む権限がない。sudoを付けてsudo journalctlで実行するか、ユーザーをsystemd-journalグループに追加する
# ユーザーをsystemd-journalグループに追加(再ログイン後に有効) sudo usermod -aG systemd-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/ → 永続化済み
ジャーナルの容量が肥大化した時の対処
ジャーナルが数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
本記事のまとめ
journalctlはsystemd環境のログ管理に欠かせないコマンドです。サービスのトラブル対応から日常のログ監視まで、以下のコマンドを押さえておけば現場で困ることはありません。| やりたいこと | コマンド |
|---|---|
| 全ログを表示する | journalctl |
| 末尾(最新)から表示する | journalctl -e |
| 特定サービスのログを表示する | 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 -k |
| ジャーナルの容量を確認する | journalctl --disk-usage |
| 古いログを削除する(容量指定) | sudo journalctl --vacuum-size=500M |
| 古いログを削除する(日数指定) | sudo journalctl --vacuum-time=30d |
| JSON形式で出力する | journalctl -u サービス名 -o json |
関連記事
この記事と関連性の高い記事をまとめました。あわせて読むことで理解が深まります。・systemctlコマンドの使い方|サービスの起動・停止・自動起動設定
・logrotateでLinuxのログを自動ローテーションする方法|設定ファイルの書き方とトラブル対処
ログを見ても原因がわからない、そんな経験はありませんか?
journalctlを使いこなすには、systemdの全体像とサービス管理の知識が欠かせません。
ネットの切れ端の情報をコピペするだけでなく、現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼントしています。
「独学の時間がもったいない」「プロから直接、現場の技術を最短で学びたい」という本気の方には、2日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
登録10秒/合わなければ解除3秒 / 詳細はこちら

無料メルマガで学習を続ける
Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。
登録無料・いつでも解除できます