第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🧩⏳
ログ方針は難しく見えるけど、最初はこれだけで十分です🙂👍
✅ 決めるもの(最小セット)
- 何のために残す?(障害調査 / セキュリティ / 利用状況)🕵️♂️
- どれくらい残す?(期間 or 容量上限)📅📦
- どこに残す?(Docker内だけ / 外部へ転送)🏠🚚
🧠 “期間”の考え方(たたき台)
- 開発中の調査用ログ:短め(例:数日〜数週間)でOK。とにかく**回転(上限)**を入れるのが先🧯
- 本番の障害調査:最低でも「最近の事故を追える期間」
- セキュリティ/監査系:長めになりがち(ただし個人開発では“必要最小限”でOK)🔐
注意:ログは秘密(APIキー)や個人情報が混ざりやすいです😱 「残す」ほどリスクも増えるので、**“残すログを減らす/伏せる(マスク)”**もセットで考えよう🧤
3) ログ方針メモ(コピペで使えるテンプレ)📝✨
そのまま README.md に貼ってOKです👍
-
対象:
api/db/proxy -
ログの種類:
- アプリログ(info/warn/error)
- アクセスログ(HTTP)
- 監査っぽいログ(ログイン/権限変更など)
-
保存先:
- 開発:Dockerログ(
localドライバ) - 本番:必要になったら外部転送を検討(後述)
- 開発:Dockerログ(
-
保存のルール:
- 回転あり(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) ミニ演習:ログ方針を“実物”にする🎮✅
- Composeに
logging: driver: localとmax-size/max-fileを入れる🧯 docker compose up -dで起動🚀docker compose logs --tail=200 -tで確認👀- 「残すべきログ・残さないログ」をログ方針メモに1行ずつ書く📝
- 1週間後に見直す(長すぎ/短すぎを調整)🔁
10) 章末チェックリスト✅🧡
- ログを「目的」で分類できた(調査/アクセス/監査)🧠
- 保存期間 or 容量上限を決めた(たたき台でOK)📅📦
- Composeに
loggingを入れて、ログ回転が効くようにした🧯(Docker Documentation) -
docker compose logs --sinceで“直近ログだけ”を取れるようになった⏱️(Docker Documentation)
AIに頼るなら(安全運用版)🤖🛡️
こんな感じで、秘密を抜いた設定だけ投げるのが安全です👌
- 「このComposeのログ設定、ディスク爆発しない?改善案ある?」
- 「このログ方針メモ、抜けてる観点ある?」
- 「開発用としては保存期間長すぎる?短すぎる?」
次の第24章(dev/prodで分ける🚧)に行くと、**“開発ログを本番に持ち込まない”**設計がスッと入りますよ〜😄📌