Skip to main content

第24章:ログ運用の基本(見る・絞る・追う)🧾🔎

この章は「なんか動かない😇」ってなった瞬間に、最短で原因に当たりに行くための“ログの型”を身につけます🔥 Compose運用だとログはほぼ毎回見るので、ここを雑にすると時間が溶けます🫠


1) まず知っておく:Composeのログはこう見える👀

docker compose logs は、複数サービスのログをまとめて表示できます。タイミング依存の不具合(API→DB接続とか)を追うときにめちゃ強いです💪 -f で追いかけ(follow)すると、各サービスのログが1本の流れで混ざって出るので、因果関係を見つけやすいです。(Docker Documentation)

ログの基本コマンドと主要オプションはこのへん👇(公式の docker compose logs)(Docker Documentation)

  • -f, --follow:リアルタイム追尾🐾
  • --tail N:末尾N行だけ(まずこれ)✂️
  • --since 10m:直近10分だけ(時間で絞る)⏱️
  • --until ...:ここまで(事故った瞬間を切り出す)🧠
  • -t, --timestamps:タイムスタンプを付ける🕒
  • --no-color:色なし(コピペ・保存・検索向き)🧼
  • --no-log-prefixapi | みたいなプレフィックス無し(加工しやすい)🧹
  • --index:同一サービスを複数起動してるときの番号指定(後で説明)🔢

2) “見る→絞る→追う”の最短ルート🏎️💨

ここからは、現場で使う順番でいきます😎

(A) まず「全体を薄く見る」🫧

最初はだいたい末尾だけでOKです。いきなり全部見るとノイズで死にます🪦

docker compose logs --tail=80

「どのサービスが怪しい?」を当てるフェーズです🎯 この時点で Error / Failed / refused / timeout / ECONNRESET みたいな単語が見えたら勝ち🏁


(B) 怪しいサービスに「絞る」🔎

サービス名を付けると、そのサービスだけ見られます。(Docker Documentation)

docker compose logs --tail=200 api

複数サービスを並べて見るのもアリ(API↔DB↔Redisの関係が見える)👀

docker compose logs --tail=200 api db redis

(C) “事故った時間帯”に「絞る」⏱️

「さっき落ちた」「5分前からおかしい」みたいなときは --since が超便利です。(Docker Documentation)

docker compose logs --since=10m --tail=200 api

さらに「時系列で追う」ならタイムスタンプも付けます🕒

docker compose logs --since=10m --timestamps api

(D) 最後に「追う(リアルタイム監視)」👂

症状が再現するなら、追尾しながら触るのが最強です。(Docker Documentation)

docker compose logs -f api

「全体の流れ」を見るならこう👇(混ざって出るのがポイント)

docker compose logs -f

3) Windowsでの“ログ検索”の型(PowerShell)🪟🔍

Windowsなら PowerShell の Select-String(短縮 sls)で絞り込みが楽です✨

まずは “ERRORっぽい行だけ”

docker compose logs --tail=500 --no-color | sls -Pattern "ERROR|FATAL|Exception|Unhandled"

特定サービス+特定キーワード

docker compose logs --tail=500 --no-color api | sls -Pattern "connect|timeout|ECONN|refused"

リアルタイム追尾しながら検索(再現実験向け)🧪

docker compose logs -f --no-color api | sls -Pattern "WARN|ERROR|Exception"

--no-color は「検索結果が色コードでぐちゃぐちゃ問題」を避けるのに効きます🧼(Docker Documentation)


4) “コピペしやすいログ”を作る小技🧹📋

プレフィックスや色が邪魔なときはこれ👇(公式オプションです)(Docker Documentation)

docker compose logs --tail=200 --no-color --no-log-prefix api

「チームで貼る」「AIに投げる」「Issueに貼る」みたいなときに読みやすくなります🤖📌


5) Docker Desktopでログを見る(GUI派の逃げ道)🧊🖥️

CLIがしんどい日もあります🙂 Docker Desktop の Containers 画面からログを見ると、

  • Ctrl + F で検索できる🔎
  • タイムスタンプ表示できる🕒
  • ログをまとめてコピーできる📋
  • 複数コンテナのフィルタもできる🎛️

みたいな“便利機能”が揃ってます。(Docker Documentation)


6) ちょい発展:同じサービスを複数起動してる時(index)👯‍♂️

Workerを増やしたりすると、同じサービスが複数コンテナになります。 このとき --index で「何番のコンテナのログを見るか」を指定できます。(Docker Documentation)

例:workerが3つあるときに2番だけ見るイメージ👇

docker compose logs --index=2 --tail=200 worker

7) ログの“仕組み”を最低限だけ理解する🧠🔧

ログは基本「stdout/stderr」が正義📣

Dockerは基本、コンテナの 標準出力/標準エラー を集めてログにします。 デフォルトの json-file ドライバは、ログをJSON形式で保存して、各行に stdout/stderr とタイムスタンプを持たせます。(Docker Documentation)

ログが肥大化してディスクが死ぬ問題💀💾

Dockerはログドライバ(logging driver)という仕組みで保存します。 デフォルトは json-file で、ローテーション設定なしだとディスクを食い尽くすことがあるので、状況によっては local ドライバ推奨、という注意が公式にあります。(Docker Documentation) local はパフォーマンスとディスク効率を意識した内部保存で、デフォルトでローテーション&圧縮が入ります。(Docker Documentation)

ちなみに json-file / local どっちも「ログファイルを外部ツールで直接いじるのは避けてね」系の注意があります(Dockerの管理が壊れる可能性)。(Docker Documentation)


8) “ログ爆発”を防ぐ:Compose側でローテ設定🧯🌀

Composeの services: では logging: を書けます(driver と options)。(Docker Documentation) json-filemax-sizemax-file は公式にある定番ローテ設定です。(Docker Documentation)

例(APIだけログをローテさせる)👇

services:
api:
# ...(image/buildなど)
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"

ポイント👇

  • まずは 10MB×3世代 みたいに小さく始めると安全🛟
  • 本番は別途ログ基盤に送ることが多いけど、学習段階でも「ディスクを守る」のは大事🔥

9) ミニ演習:ログで“犯人”を特定する練習🕵️‍♂️🎯

次の順でやると、だいたいのトラブルは捌けるようになります✨

  1. 末尾だけ見る
docker compose logs --tail=80
  1. 怪しいサービスだけ増やす
docker compose logs --tail=200 api
  1. 時間で切り取る(「直近だけ」にする)
docker compose logs --since=10m --timestamps api
  1. 再現させて追尾
docker compose logs -f api

まとめ:この章のゴール🏁🎉

  • docker compose logs「末尾 → サービス絞り → 時間絞り → 追尾」 の順で使える✅ (Docker Documentation)
  • Windowsでは Select-String で検索してスピードUPできる✅
  • ログが肥大化したら logging:(もしくはドライバ見直し)で守れる✅ (Docker Documentation)

次の章は、ログを見つつ「じゃあ中に入って状態確認するか!」の デバッグの型 に進みます🕵️‍♂️🧩