第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-prefix:api |みたいなプレフィックス無し(加工しやすい)🧹--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-file の max-size と max-file は公式にある定番ローテ設定です。(Docker Documentation)
例(APIだけログをローテさせる)👇
services:
api:
# ...(image/buildなど)
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
ポイント👇
- まずは 10MB×3世代 みたいに小さく始めると安全🛟
- 本番は別途ログ基盤に送ることが多いけど、学習段階でも「ディスクを守る」のは大事🔥
9) ミニ演習:ログで“犯人”を特定する練習🕵️♂️🎯
次の順でやると、だいたいのトラブルは捌けるようになります✨
- 末尾だけ見る
docker compose logs --tail=80
- 怪しいサービスだけ増やす
docker compose logs --tail=200 api
- 時間で切り取る(「直近だけ」にする)
docker compose logs --since=10m --timestamps api
- 再現させて追尾
docker compose logs -f api
まとめ:この章のゴール🏁🎉
docker compose logsを 「末尾 → サービス絞り → 時間絞り → 追尾」 の順で使える✅ (Docker Documentation)- Windowsでは
Select-Stringで検索してスピードUPできる✅ - ログが肥大化したら
logging:(もしくはドライバ見直し)で守れる✅ (Docker Documentation)
次の章は、ログを見つつ「じゃあ中に入って状態確認するか!」の デバッグの型 に進みます🕵️♂️🧩