お役立ちガイド
クラウド時代のログ管理ベストプラクティス (AWS/GCP)
最終更新: 2026-02-06
### このガイドの目的
クラウドネイティブ(Docker, K8s, Lambda)な環境において、レガシーな「ファイルにログを吐く」運用から脱却し、取りこぼしのないログ基盤を作るための設計指針です。
### ベストプラクティス 3選
#### 1. 標準出力(Stdout/Stderr)への集約
**原則**: アプリケーションはログの「保存場所」を意識してはいけません。
**理由**: コンテナやLambdaは使い捨て(Ephemeral)です。コンテナ内のファイル `/var/log/app.log` に書いても、コンテナが死ねばログも消えます。
**実装**: 全てのログを `console.log` (Node) や `logging.StreamHandler` (Python) に流し、収集はDockerデーモンやFluent Bit(Sidecar)に任せましょう。これを「ログルーターパターン」と呼びます。
#### 2. 構造化ログ(JSON)の徹底
**原則**: `grep` ではなくクエリで検索できるようにする。
**NG例**: `[Info] 2024/02/06 User 123 login failed` (ただの文字列)
**OK例**: `{"level": "info", "ts": "2024-02-06...", "user_id": 123, "event": "login_failed"}`
**理由**: DatadogやCloudWatch Insightsで `user_id=123` と検索した時、JSONなら100%ヒットしますが、テキストgrepは誤検知やパースエラーの元です。分析コストが劇的に下がります。
#### 3. Trace IDによる分散トレーシング
**原則**: リクエストの「一連の流れ」を追えるようにする。
**課題**: マイクロサービスでは、Frontendのエラーの原因が、Backendのその奥のDBにあることが多々あります。
**解決**: ロードバランサー(ALB)が付与する `X-Amzn-Trace-Id` や、OpenTelemetryのTrace IDを、アプリ内の全てのログ出力に含めてください。これにより、一つの検索IDでシステム全体を串刺し検索できます。
### 構成例 (AWS)
- **小規模**: CloudWatch Logs Agent (EC2) / FireLens (ECS) -> CloudWatch Logs
- **中規模**: Fluent Bit -> Kinesis Firehose -> S3 (保存) + OpenSearch (検索)
- **大規模**: Datadog Agent -> Datadog (サンプリング有効化)
### 次のアクション
- [診断:監査ログ自己チェック](/diagnosis/audit-log-self-check/) で現状の構成を評価する。
この記事について
想定読者
ログ基盤の設計・運用を担当するSRE、インフラエンジニア
記事の目的
ログ管理における過剰投資を防ぎ、監査対応に必要な最低限の要件を整理する
根拠・参照情報
- •AWS CloudTrail Documentation
- •PCI DSS v4.0 Official Standard
最終更新日
2026-02-06
免責事項: 本記事は監査対応における判断支援を目的としており、法的・監査上の最終判断を保証するものではありません。 最終的な意思決定は、必ず関連規格(PCI DSS, SOC2等)の公式文書や、貴社の法務・監査部門の判断を参照してください。