宮崎智広 この記事の監修:宮崎智広(Linux実務・教育歴20年以上・受講者3,100名超)
「CentOS 7以降でログの確認方法が変わったと聞いたけど、journalctlの使い方がわからない」
「journaldとrsyslogの違いや関係性を理解したい」

この記事では、CentOS 7以降のsystemd環境で使用するjournalctlコマンドの基本的な使い方から、実務でよく使うフィルタリングの方法まで解説します。
【この記事でわかること】
・journalctlはsystemdのログ管理システム(journald)のログを表示するコマンド
・-b でブートログ、-u でサービス別ログ、--since/--until で日時フィルタリングができる
・-f でtailと同様のリアルタイム監視、-e で末尾からジャンプして最新ログを確認できる

「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
図解60P/登録10秒/解除も3秒 / 詳細はこちら

journaldとjournalctlとは

CentOS 7 / RHEL 7以降では、systemdがログ管理の仕組みとして「journald」(systemd-journald.service)を導入しました。

journaldはバイナリ形式でログをメモリまたはディスクに保存します。
そのログを参照・検索するためのコマンドが「journalctl」です。

rsyslogと比較したjournaldの特徴は以下のとおりです。

構造化ログ:サービス名・PID・優先度などのメタデータが付与されており、絞り込みが容易
強力なフィルタリング:日時・サービス・優先度など多様な条件でログを検索できる
バイナリ形式:改ざんされにくく、ログの整合性チェック機能がある

CentOS 7以降では、rsyslogとjournaldが並行して動作しています。
rsyslogは/var/log/配下のテキストファイルにも記録を続けるため、従来通りgrepで検索することも可能です。

journaldの状態を確認する

journaldはsystemdのサービスとして動作しています。

# journaldのサービス状態を確認 # systemctl status systemd-journald.service systemd-journald.service - Journal Service Loaded: loaded (/usr/lib/systemd/system/systemd-journald.service; static) Active: active (running) since 金 2017-08-04 13:39:06 JST; 46min ago Main PID: 712 (systemd-journal) Status: "Processing requests..."

Active: active (running) と表示されていれば正常に稼働しています。

journalctlコマンドの基本的な使い方

1. 全ログを表示する

# 全ログを表示する(lessで表示) # journalctl # 最新のログから表示する(末尾からジャンプ) # journalctl -e # ページネーションなしで出力する(パイプ処理向け) # journalctl --no-pager

2. ブートログを確認する(-b)

OS起動時のブートログを確認します。

# 今回のブート以降のログを表示 # journalctl -b -- Logs begin at 金 2017-08-04 13:39:02 JST, end at 金 2017-08-04 14:29:01 JST. -- 8月 04 13:39:02 Tiger kernel: Linux version 3.10.0-229.el7.x86_64 # 前回のブート時のログを表示(-b -1) # journalctl -b -1 # ブートの一覧を確認する # journalctl --list-boots -1 e6d1... Mon 2017-08-03 ... Mon 2017-08-03 ... 0 a5f2... Fri 2017-08-04 ... Fri 2017-08-04 ...

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

# httpdのログを表示する # journalctl -u httpd # sshdのログを表示する # journalctl -u sshd # 複数のサービスを同時に表示する # journalctl -u httpd -u sshd

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

tail -f のようにログをリアルタイムで追跡表示します。

# 全ログをリアルタイム表示 # journalctl -f # sshdのログをリアルタイム表示 # journalctl -f -u sshd

ログを日時でフィルタリングする(--since / --until)

journalctlには日時でログを絞り込む機能があります。

# 2017年8月4日 14:29から14:33:01までのログを表示 # journalctl --since="2017-08-04 14:29:00" --until="2017-08-04 14:33:01" # 昨日のログを表示 # journalctl --since yesterday # 1時間前から現在までのログを表示 # journalctl --since "1 hour ago" # 特定の日付以降のsshログ # journalctl -u sshd --since="2017-08-01"

ログの優先度(プライオリティ)でフィルタリングする(-p)

syslogと同じ優先度番号でフィルタリングできます。

# エラー以上のログのみ表示(0=emerg から 7=debug) # journalctl -p err # 優先度の範囲指定(warning以上をerr以下で絞る) # journalctl -p warning..err # 優先度の対応表 # 0: emerg(緊急) # 1: alert(警告) # 2: crit(致命的) # 3: err(エラー) # 4: warning(警告) # 5: notice(通知) # 6: info(情報) # 7: debug(デバッグ)

ログの表示件数を指定する(-n)

# 最新20件のログを表示 # journalctl -n 20 # 最新50件のsshログを表示 # journalctl -u sshd -n 50

journaldのログ保存設定

デフォルトの設定では、journaldは再起動するとログが失われます(Storageがvolatileの場合)。
永続化したい場合は設定ファイルを変更します。

# 設定ファイルを編集(永続化する) # vi /etc/systemd/journald.conf [Journal] Storage=persistent # auto(デフォルト)→ persistent に変更 # journaldを再起動して設定を反映 # systemctl restart systemd-journald.service

persistentを設定すると /var/log/journal/ にログが保存されます。

トラブルシュート:よくあるエラーと対処法

「Logs begin at ...」以前のログがない

journaldのデフォルト設定(Storage=auto)では、/var/log/journal/ディレクトリが存在しない場合、再起動するとログが消えます。
上記の永続化設定を行うか、rsyslogの/var/log/以下のファイルを参照してください。

ディスク使用量が増え続ける

journaldはデフォルトでディスクの10%または4GBを上限としています。
手動でログをクリアする場合は以下のコマンドを使います。

# 2週間以上前のログを削除 # journalctl --vacuum-time=2weeks # ログのサイズを500MBに制限 # journalctl --vacuum-size=500M # 現在のジャーナルディスク使用量を確認 # journalctl --disk-usage

本記事のまとめ

やりたいこと コマンド
全ログを表示する journalctl
ブートログを確認する journalctl -b
サービス別のログを確認する journalctl -u サービス名
リアルタイムでログを監視する journalctl -f
日時でフィルタリングする journalctl --since="日時" --until="日時"
エラー以上のログのみ表示する journalctl -p err
最新N件のログを表示する journalctl -n N
古いログを削除する journalctl --vacuum-time=2weeks

systemdのログ管理を含むサーバー運用を体系的に学びませんか?

journalctlを使いこなすことで、障害対応の初動スピードが格段に上がります。
ネットの切れ端の情報をコピペするだけでなく、現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼントしています。

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

無料メルマガで学習を続ける

Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。

登録無料・いつでも解除できます

暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

登録10秒/合わなければ解除3秒 / 詳細はこちら

Linux無料マニュアル(図解60P) 名前とメールで30秒登録
宮崎 智広

この記事を書いた人

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

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

趣味は、キャンプにカメラ、トラウト釣り。好きな食べ物は、ラーメンにお酒。休肝日が作れない、酒量を減らせないのが悩み。最近、ドラマ「フライトエンジェル」を観て涙腺が崩壊しました。