Linux管理・運用の基本
システム管理者のための実践ガイド
システム管理者のための実践ガイド
Linuxシステムにおけるログは、トラブルシューティングやシステムの状況を把握する上で非常に重要な情報源です。従来のLinuxシステムでは、ログは/var/log
ディレクトリ内のテキストファイルに保存されており、cat
やgrep
などのコマンドを使って参照していました。しかし、現代のLinuxシステムで主流となっているsystemdは、journaldという仕組みでログを管理します(これをジャーナルログと呼びます)。この記事では、このジャーナルログを操作するためのjournalctl
コマンドの高度な使い方に焦点を当て、効率的なログ管理術を解説します。
journalctl
コマンドを使った基本的なログ表示とフィルタリング方法journalctl
コマンドは、オプションを指定せずに実行すると、システム起動時からのすべてのジャーナルログを最新のものから表示します。ログはless
コマンドと同じように、スペースキーで次のページへ、↑↓キーでスクロールできます。
journalctl
の真価は、強力なフィルタリング機能にあります。特定の条件に合致するログだけを絞り込むことで、迅速に問題の原因を特定できます。
オプション | 説明 | 例 |
---|---|---|
-u |
指定したユニット(サービス)のログを表示します。 | journalctl -u sshd.service |
-p |
指定した優先度(priority)以上のログを表示します。 | journalctl -p err |
-k |
カーネルログのみを表示します。 | journalctl -k |
-b |
指定したブートIDまたはオフセットのログを表示します。 | journalctl -b -1 |
_PID= |
指定したプロセスIDのログを表示します。 | journalctl _PID=1234 |
_UID= |
指定したユーザーIDのログを表示します。 | journalctl _UID=1000 |
💡 特定のサービスのログをエラーレベルに絞り込む
たとえば、Webサーバーのhttpd
サービスで発生しているエラーだけを確認したい場合は、以下のように-u
と-p
オプションを組み合わせて使用します。
journalctl -u httpd.service -p err
-p
オプションで指定する優先度には、数値と文字列の両方が利用できます。
数値 | 文字列 | 意味 |
---|---|---|
0 | emerg |
緊急(システムが使用不能) |
1 | alert |
警告(直ちに対処が必要) |
2 | crit |
危機的(ハードウェアエラーなど) |
3 | err |
エラー(アプリケーションのエラーなど) |
4 | warning |
警告 |
5 | notice |
注意(重要な正常動作の通知) |
6 | info |
情報 |
7 | debug |
デバッグ(詳細な情報) |
💡 最新のログや、古い順で表示したい
トラブル対応時には、最新のログだけをすぐに確認したいことがよくあります。
# 最新100件のみ表示
journalctl -n 100
# 新しい順(逆順)で表示
journalctl -r
💡 前回の起動時からのログを表示したい
システムを再起動した後に前回発生したエラーを確認したい場合は、-b -1
オプションを使用します。-1
は1つ前のブートを表し、-2
は2つ前、と続きます。ブートIDを確認したい場合は、journalctl --list-boots
を実行します。
# 前回の起動時からのログを表示
journalctl -b -1
# 全ブートIDとタイムスタンプを確認
journalctl --list-boots
-2 c54c8d... 2025-08-20 10:00:00 JST—2025-08-20 12:00:00 JST
-1 9e24a7... 2025-08-20 14:30:00 JST—2025-08-21 09:00:00 JST
0 5f0b1a... 2025-08-21 11:15:00 JST—now
ログの確認では、「いつ」発生したかが非常に重要です。journalctl
は、柔軟な期間指定オプションを提供しています。
オプション | 説明 | 例 |
---|---|---|
--since |
指定した日時以降のログを表示します。 | journalctl --since "2025-08-22 10:00:00" |
--until |
指定した日時までのログを表示します。 | journalctl --until "2025-08-22 11:00:00" |
--since/--until |
組み合わせることで、特定の期間のログを表示できます。 | journalctl --since "yesterday" --until "now" |
💡 昨日の朝9時から今日までログを確認する
時間指定は非常に柔軟です。「yesterday」「today」「tomorrow」のようなキーワードや、「-1h」(1時間前)、「-30min」(30分前)のような相対的な時間指定も可能です。特定のサービスに対して期間を指定してログを表示することもできます。
# Webサーバーの昨日のログを確認
journalctl -u httpd.service --since "yesterday"
ログは常に新しいものが追加されます。サーバーの状況をリアルタイムで監視したい場合は、tail -f
コマンドのようにjournalctl
を連続的に実行できます。
journalctl -f
: リアルタイム監視-f
(follow) オプションを使用すると、新しいログエントリが追加されるたびに、そのログを標準出力に表示し続けます。特定のサービスのログを監視したい場合は、-u
オプションと組み合わせます。
# すべてのログをリアルタイムで監視
journalctl -f
# sshdサービスのログをリアルタイムで監視
journalctl -u sshd.service -f
💡 他のコマンドと組み合わせてさらに便利に
journalctl
の出力を他のコマンドにパイプして、さらに絞り込むことも可能です。
# ログの中から「error」という文字列を含む行だけを抽出
journalctl | grep "error"
journalctl -o
: 出力形式の変更ログの出力形式をカスタマイズしたい場合は、-o
(output) オプションを使用します。これにより、ログを人間が読みやすい形式だけでなく、機械が処理しやすいJSON形式などで出力できます。json
形式は、ログ収集基盤(例:FluentdやLogstash)との連携に非常に便利です。また、-o verbose
を使うと、フィルタリングに利用できるすべてのフィールドを確認できます。
オプション | 説明 |
---|---|
short |
従来のsyslogのような短い形式で表示します(デフォルト)。 |
json |
ログをJSON形式で出力します。 |
json-pretty |
JSON形式を整形して出力します。 |
verbose |
すべてのフィールドを表示します。 |
ジャーナルログは、/run/log/journal
(再起動で消える)または/var/log/journal
(永続化される)に保存されます。デフォルトでは、/var/log/journal
ディレクトリが存在しない場合、ログは再起動時に消去されます。永続的に保存したい場合は、このディレクトリを作成します。
# 永続化ディレクトリの作成
sudo mkdir -p /var/log/journal
# systemdにディレクトリの存在を認識させる
sudo systemd-tmpfiles --create --prefix /var/log/journal
⚠️ セキュリティ上の注意点
ジャーナルログは通常、rootユーザーとsystemd-journal
グループに所属するユーザーのみが読み取れます。一般ユーザーでログを読みたい場合は、以下のコマンドでグループに追加します。
sudo usermod -aG systemd-journal ユーザー名
ジャーナルログのディスク使用量を管理するには、/etc/systemd/journald.conf
ファイルで設定を変更します。
[Journal]
# ジャーナルログが使用するディスク容量の最大値を指定
SystemMaxUse=100M
# 単一のログファイルの最大サイズ
SystemMaxFileSize=10M
# 揮発的なログ(/run/log/journal)の最大容量
RuntimeMaxUse=50M
SystemMaxUse
: 永続的なジャーナルログが使用するディスク容量の最大値を指定します。この値を超えると、古いログから削除されます。SystemMaxFileSize
: 1つのジャーナルファイルが持つことができる最大サイズを指定します。RuntimeMaxUse
: /run/log/journal
に保存される一時的なログの最大容量を指定します。設定を変更した後は、sudo systemctl restart systemd-journald
でサービスを再起動して変更を反映させます。
手動でジャーナルログを削除したい場合は、--vacuum-size
または--vacuum-time
オプションを使用します。--vacuum-size
は指定した容量になるまで、--vacuum-time
は指定した期間より古いログを削除します。
# 合計容量が50Mになるまでログを削除
sudo journalctl --vacuum-size=50M
# 1週間以上前のログを削除
sudo journalctl --vacuum-time=1w
この記事では、Linuxシステムにおけるログ管理の中心であるjournalctl
コマンドの高度な活用方法を解説しました。
journalctl
は、ただログを表示するだけでなく、サービス名や期間、優先度といった多様な条件でフィルタリングできる強力なツールです。また、リアルタイムでの監視や、ログの永続化、容量制限、さらにはセキュリティ設定まで、幅広い管理機能を提供します。これらの機能を使いこなすことで、Linuxシステムのトラブルシューティングや運用効率が格段に向上します。
この記事が、ジャーナルログの理解と活用の一助となれば幸いです。ご覧いただきありがとうございました。
次回は、サーバー多重化や仮想化環境に必須となる、ネットワークの拡張機能について深掘りします。Bonding、VLAN、ブリッジといったネットワーク詳細設定の基本から応用までを徹底的に解説する予定です。