メインコンテンツまでスキップ

第23章:“ログ”もデータ:障害調査のための保存期間を決める🪵

この章では「ログを 残す/捨てる」を感覚じゃなくルール化して、さらに Docker / Compose 側で“勝手に増え続けない”設定まで入れます💪✨ 成果物はこれ👇

  • ログ方針メモ(保存するログ・保存期間・上限・保管先)📝
  • Composeに入れたログ回転設定(=ディスク爆発を防ぐ)🧯

1) まず理解:Dockerのログはどこに溜まる?🧠📦

多くのDocker運用では、アプリが stdout/stderr に吐いたログを **Dockerの「ログドライバ」**が保存します。Docker Engineのデフォルトは json-file です。(Docker Documentation)

ただし、デフォルトの json-file は(何もしないと)ログ回転しないので、出力が多いコンテナだとディスクを食い尽くしがちです😇 Docker公式は「ディスク枯渇を防ぐために local ログドライバ推奨(回転がデフォルトで有効・効率的)」と明言しています。(Docker Documentation)

さらに local ドライバは **1コンテナあたりデフォルト100MB分のログを保持(回転&圧縮)**という“安全柵”が最初からあります。(Docker Documentation)


2) “保存期間”は、まず3つだけ決めればOK🧩⏳

ログ方針は難しく見えるけど、最初はこれだけで十分です🙂👍

✅ 決めるもの(最小セット)

  1. 何のために残す?(障害調査 / セキュリティ / 利用状況)🕵️‍♂️
  2. どれくらい残す?(期間 or 容量上限)📅📦
  3. どこに残す?(Docker内だけ / 外部へ転送)🏠🚚

🧠 “期間”の考え方(たたき台)

  • 開発中の調査用ログ:短め(例:数日〜数週間)でOK。とにかく**回転(上限)**を入れるのが先🧯
  • 本番の障害調査:最低でも「最近の事故を追える期間」
  • セキュリティ/監査系:長めになりがち(ただし個人開発では“必要最小限”でOK)🔐

注意:ログは秘密(APIキー)や個人情報が混ざりやすいです😱 「残す」ほどリスクも増えるので、**“残すログを減らす/伏せる(マスク)”**もセットで考えよう🧤


3) ログ方針メモ(コピペで使えるテンプレ)📝✨

そのまま README.md に貼ってOKです👍

  • 対象:api / db / proxy

  • ログの種類:

    • アプリログ(info/warn/error)
    • アクセスログ(HTTP)
    • 監査っぽいログ(ログイン/権限変更など)
  • 保存先:

    • 開発:Dockerログ(local ドライバ)
    • 本番:必要になったら外部転送を検討(後述)
  • 保存のルール:

    • 回転あり(max-size / max-file)
    • 上限の目安:max-size × max-file(例:10MB×5=50MB/コンテナ)📦
  • 期限:

    • 開発:短め(例:7日〜14日相当)
    • 本番:運用が始まったら実態に合わせて調整

4) いちばん大事:Composeで“ログ回転”を標準装備する🧯⚙️

Composeには logging: があり、サービスごとにログドライバとオプションを指定できます。(Docker Documentation) ここでは、Docker推奨の local を使って、回転上限も明示します💪

## compose.yaml(抜粋)
x-logging: &default-logging
driver: local
options:
max-size: "10m"
max-file: "5"

services:
api:
# build: .
image: node:20
command: ["node", "server.js"]
logging: *default-logging

db:
image: postgres:17
environment:
POSTGRES_PASSWORD: example
logging: *default-logging

💡ここがポイント

  • local は公式が推奨(回転がデフォルトで効く&効率的)🧯(Docker Documentation)
  • max-size / max-file を入れると、より“設計どおり”に制御できる📏
  • YAMLのアンカー(x-logging)で全サービスに同じ設定を配れるので、事故りにくい🙆‍♂️

5) すぐ使える:ログを見るコマンド3つ👀🧰

① 追いかける(リアルタイム)📡

docker compose logs -f

② 最後だけ見る(重い時に便利)🪶

docker compose logs --tail=200

③ 直近だけ見る(調査が速い)⏱️

docker compose logs --since=30m -t

docker compose logs--since / --tail などで絞り込みできます。(Docker Documentation)


6) “今どのログドライバ?”を確認して事故を潰す🔍😇

「設定したつもりが効いてない」あるあるを潰します✊

Docker全体のデフォルトを確認

docker info --format '{{.LoggingDriver}}'

Docker公式がこの確認方法を案内しています。(Docker Documentation)

コンテナ単体のログドライバを確認

docker inspect -f '{{.HostConfig.LogConfig.Type}}' <CONTAINER>

この確認方法も公式の例にあります。(Docker Documentation)

⚠️注意:デフォルト設定を変えても、既存コンテナには自動で反映されません(作り直しが必要)です。(Docker Documentation)


7) もっと本番っぽくするなら:外部に流す(でも今は“知るだけ”でOK)🚚🌩️

「検索できる」「長期保持したい」になったら、ログを外へ送ります。Dockerがサポートするログドライバには syslog / journald / fluentd / gelf / awslogs / gcplogs / splunk などがあります。(Docker Documentation)

ただ、初心者フェーズではまず👇が正義です😂

  • 回転(上限)を入れてディスク爆発を止める🧯
  • **必要なログだけに絞る(秘密を出さない)**🔒

8) “Docker自体が怪しい”時:Docker Desktopのログを見る🪓🧑‍🔧

アプリじゃなくてDocker Desktopが怪しい時は、Docker Desktopのログを開いて調べられます(Windows)。 PowerShellでこれ👇を実行するとログフォルダをVS Codeで開けます。(Docker Documentation)

code $Env:LOCALAPPDATA\Docker\log

9) ミニ演習:ログ方針を“実物”にする🎮✅

  1. Composeに logging: driver: localmax-size/max-file を入れる🧯
  2. docker compose up -d で起動🚀
  3. docker compose logs --tail=200 -t で確認👀
  4. 「残すべきログ・残さないログ」をログ方針メモに1行ずつ書く📝
  5. 1週間後に見直す(長すぎ/短すぎを調整)🔁

10) 章末チェックリスト✅🧡

  • ログを「目的」で分類できた(調査/アクセス/監査)🧠
  • 保存期間 or 容量上限を決めた(たたき台でOK)📅📦
  • Composeに logging を入れて、ログ回転が効くようにした🧯(Docker Documentation)
  • docker compose logs --since で“直近ログだけ”を取れるようになった⏱️(Docker Documentation)

AIに頼るなら(安全運用版)🤖🛡️

こんな感じで、秘密を抜いた設定だけ投げるのが安全です👌

  • 「このComposeのログ設定、ディスク爆発しない?改善案ある?」
  • 「このログ方針メモ、抜けてる観点ある?」
  • 「開発用としては保存期間長すぎる?短すぎる?」

次の第24章(dev/prodで分ける🚧)に行くと、**“開発ログを本番に持ち込まない”**設計がスッと入りますよ〜😄📌