ログ調査を始める前に確認すること
まず、調査対象がLinux上のログファイルなのか、Docker Composeで動作するサービスなのかを区別します。あわせて、発生した事象、発生時刻、関連しそうなサービス名、検索キーワードを整理しましょう。ログの保存場所や読み取り権限は環境によって異なります。実際の構成と運用ルールを確認してから操作してください。
tailでログの末尾を確認する
tailは、ログファイルの末尾を確認するときに使います。引数なしでは末尾の一定行を表示し、-nで表示行数を指定できます。
# ログの末尾を確認
tail logfile.log
# 直近100行を確認
tail -n 100 logfile.log
# 追記されるログを継続表示
tail -f logfile.log
# 期待される挙動:
# tail : 実行時点の末尾を表示して終了
# tail -f : 新しく追記された行を継続して表示一度だけ内容を確認する場合は通常のtail、アプリケーションの動作中に追加されるログを追跡する場合はtail -fを使い分けます。継続表示は通常、Ctrl+Cで終了します。
grepでエラーや警告を絞り込む
grepは、指定したパターンに一致する行を検索します。大量のログからエラーや警告だけを確認したい場合に便利です。-iを付けると、大文字・小文字の違いを無視して検索できます。
# ERRORを含む行を検索
grep 'ERROR' logfile.log
# 大文字・小文字を区別せず検索
grep -i 'error' logfile.log
# 一致した行の前後2行も表示
grep -C 2 'ERROR' logfile.log
# 直近200行からerrorを検索
tail -n 200 logfile.log | grep -i 'error'
# 期待される挙動:
# 条件に一致したログ行が表示される。
# 一致しない場合は通常、何も表示されない。検索範囲を直近のログ、対象サービス、発生時刻の周辺に絞るほど、ノイズを減らせます。前後の処理も確認したい場合はgrep -C 2のように前後の行数を指定します。
Docker Compose logsでコンテナのログを確認する
Docker Composeのプロジェクトディレクトリでdocker compose logsを実行すると、サービスのログを確認できます。特定のサービス名を指定すれば、対象を絞り込めます。
# Composeで管理するサービスのログを確認
docker compose logs
# 特定サービスのログを確認
docker compose logs SERVICE_NAME
# 特定サービスのログを継続表示
docker compose logs -f SERVICE_NAME
# 各コンテナの直近100行に絞る
docker compose logs --tail 100 SERVICE_NAME
# 期待される挙動:
# Composeで管理されている対象サービスのログが表示される。Composeのコマンドは、通常はComposeファイルを認識できるプロジェクトディレクトリで実行します。--tailで末尾の行数を絞り、-fでログを継続表示できます。表示できる範囲や形式は、コンテナのログドライバーやサービス設定にも左右されます。
エラーや警告を効率よく切り分ける手順
- 直近のログを確認し、エラーや警告が発生した時刻を特定する。
- grepでキーワードを検索し、必要に応じて前後のログを確認する。
- Docker Composeでは、アプリケーション、データベース、リバースプロキシなどのサービスごとにログを調べる。
- ログの時刻と、利用者が認識した障害発生時刻にずれがないか確認する。
- 使用したコマンド、対象ファイル、検索語、確認結果を記録する。
最初からすべてのログを読むのではなく、「どのサービスの」「いつ頃の」「どのキーワードを含む」ログかを決めてから調査すると、原因を追いやすくなります。
ログ確認時の権限と情報管理の注意点
- 読み取り権限がない場合は、権限変更の前に運用ルールや管理者の手順を確認する。
- ログに認証情報、個人情報、トークンなどが含まれる可能性を考え、共有前にマスキングする。
- tail -fやdocker compose logs -fの継続表示を不要なまま残さない。
- 本番環境では、取得範囲を絞り、負荷や情報漏えいのリスクを抑える。