🏢 全国チェーン店の報告書システムで理解する!
CloudWatch Logs の集中集約 = 全国の店舗から本社への報告システム
全国に100店舗あるレストランチェーン。各店舗で毎日発生する売上、在庫、トラブル情報...
これらを
本社で一元管理
したい!でも、全部は要らない。
重要な情報だけフィルタリング
して、効率よく集めたい。
それが
Subscription Filter & Destination
の仕組みです✨
📝 各店舗の日報 = CloudWatch Logs
🔍 重要情報のみ選別 = Subscription Filter
📮 配送システム = Destination
🏛️ 本社の集約データベース = 中央ログアカウント
🎯 3つの重要コンポーネント
CloudWatch Logs
各AWSアカウント/リージョンで発生するログ。アプリケーションログ、システムログ、セキュリティログなど、すべての活動記録。
Subscription Filter
ログの中から特定のパターンにマッチするものだけを抽出。「ERROR」や「CRITICAL」など、重要なログのみを次へ送る。
Destination
フィルタされたログの送信先。Kinesis Data Streams、Lambda、別アカウントのCloudWatch Logsなどを指定可能。
🍽️ レストランチェーンの報告フロー
各店舗で日報を作成
東京店、大阪店、福岡店...それぞれの店舗で毎日の売上、在庫、顧客クレーム、設備トラブルなどを記録。
→ これが各AWSアカウントのCloudWatch Logs
重要な報告だけを選別
全ての情報を本社に送ると膨大すぎる!「売上が前日比20%以上減少」「設備故障」「食中毒リスク」など、重要な報告だけを抽出。
→ これがSubscription Filterのパターンマッチング
本社への配送システム
選別された重要報告を、専用の配送ルートで本社へ送信。各店舗から効率的にデータを集約。
→ これがDestination(Kinesis/Lambda経由)
本社で一元管理
全国の店舗から集まった重要報告を本社のデータベースで一元管理。全体の傾向分析、異常検知、レポート作成が可能に。
→ これが中央ログアカウントでの集約・分析
🏗️ アーキテクチャの全体像
CloudWatch Logs
/aws/lambda/app
Pattern: [ERROR]
重要ログのみ抽出
Kinesis Data Streams
または Lambda
CloudWatch Logs
全社統合分析
💡 ポイント:
• 複数のソースアカウントから1つの集約先へ送信可能
• 各ソースで異なるフィルターパターンを設定可能
• クロスアカウント/クロスリージョンに対応
• リアルタイムでログが転送される
⚙️ セットアップ手順(クロスアカウント)
Kinesisストリームを作成し、CloudWatch Logs Destinationを設定。
他のアカウントからログを受け取る「受け皿」を準備。
• 全国の店舗からの報告を受け取る「本社の窓口」を開設
• 配送トラックが荷物を届けられる「集約センター」を建設
Destinationに対して、ソースアカウントからのログ送信を許可するポリシーを設定。
• 「東京店」「大阪店」など、認証された店舗だけが報告を送信できるよう制限
• セキュリティゲートで身分証明を確認してから荷物を受け取る
ログストリームにSubscription Filterを設定し、重要なログだけを本社へ送信。
•
[ERROR]
→ ERRORを含むログ
•
[WARN]
→ 警告ログ
•
[level=ERROR]
→ JSONの特定フィールド
•
[..., status_code=5*]
→ 500番台エラー
📝 やっていること:
• 各店舗で「重大な問題」「緊急報告」だけを選別
• 日常業務の記録は店舗で保管、重要事項だけ本社へ送信
Kinesisから受け取ったログを、Lambda or Kinesis Firehose経由でCloudWatch LogsやS3に保存。
オプション1: Lambda → CloudWatch Logs
長期保存やコスト削減にはS3へ直接保存も可能。
📝 やっていること:
• 本社で受け取った報告を、部門別・日付別にファイリング
• すぐに参照できる形で整理し、長期保存用にもアーカイブ
🔄 2つの集約パターン
同一アカウント内集約
• 複数のLambda関数のログを1つのログストリームに
• 開発環境と本番環境のログを分けて管理
• クロスアカウントアクセスの管理不要
• コストが低い
直接Subscription Filterを作成するだけ。
クロスアカウント集約
• 部門ごとのアカウントからセキュリティチームへ
• 子会社の複数アカウントを親会社で一元管理
• セキュリティ監視の集中化
• コンプライアンス対応が容易
• アカウント間の分析・比較が可能
アクセス許可の設定が必要。
各ソースアカウントで個別設定。
💼 実際のユースケース
セキュリティ監視の集中化
全アカウントのセキュリティイベント(不正アクセス試行、権限変更など)をセキュリティチームが監視したい。
解決策:
• 各アカウントからCloudTrailログを抽出
• Filter:
[userIdentity, eventName=DeleteUser]
• セキュリティアカウントに集約
• リアルタイムアラート設定
効果:
セキュリティインシデントを即座に検知し、全社的な対応が可能に。
マルチアカウントのエラー追跡
開発・ステージング・本番の3環境でアプリケーションエラーを統合的に追跡したい。
解決策:
• 各環境のアプリケーションログを収集
• Filter:
[ERROR] [CRITICAL] [level=error]
• 運用アカウントに集約
• 環境ごとにタグ付けして分類
効果:
全環境のエラーを1つのダッシュボードで監視。環境間の問題の関連性も把握可能。
コンプライアンス監査
全アカウントのログを7年間保存し、監査に対応できる体制を構築したい。
解決策:
• 全アカウントのログを中央アカウントに集約
• Kinesis Firehose → S3 Glacierへアーカイブ
• ライフサイクルポリシーで自動移行
• Athenaで過去ログを検索可能に
効果:
低コストで長期保存を実現。監査時に必要なログをすぐに取り出せる。
リアルタイムアラート統合
複数のアカウントで発生する重大エラーを、1つのSlackチャンネルに通知したい。
解決策:
• 各アカウントから重大ログを抽出
• 中央アカウントのLambdaで受信
• Lambda → SNS → Slack統合
• アカウント情報を含めて通知
効果:
どのアカウントで問題が起きても、1つのチャンネルで把握。対応漏れを防止。
✨ 集中集約の6大メリット
• 広すぎるパターンは転送量が膨大に(コスト増)
• 狭すぎると重要なログを見逃す
• まずは ERROR と CRITICAL から始めて、徐々に調整
2. Kinesisのシャード数を適切に設定:
• 1シャードあたり 1MB/秒、1000レコード/秒
• ログの発生量に応じてスケールアップ
• Auto Scalingの活用を検討
3. ログの保持期間を設定:
• ソース側: 短期保持(1-7日)でコスト削減
• 集約先: 長期保持(30-365日以上)
• S3へのアーカイブも併用
4. メトリクスフィルターで監視:
• 集約先でメトリクスフィルターを設定
• エラー率、警告数などを可視化
• CloudWatch Alarmsで自動通知
5. タグとメタデータを活用:
• ログに送信元アカウント情報を追加
• 環境名(dev/stg/prod)をタグ付け
• 後からの検索・分析が容易に
6. 段階的にロールアウト:
• まず1つのテストアカウントで検証
• 問題なければ徐々に他のアカウントへ展開
• 各フェーズでコストと転送量を監視
7. バックアップと冗長性:
• 集約先は複数リージョンでバックアップ
• ソース側でも一定期間ログを保持
• Kinesis Firehose の障害対策を検討
🎓 まとめ
🏢 全国チェーン店の報告システム
CloudWatch Logs Subscription Filter & Destination は
全店舗から本社への効率的な報告システム
と同じ!
重要な情報だけをフィルタリングして、
中央で一元管理することで、
組織全体の可視性とセキュリティが向上します✨
各アカウントで
発生するログ
重要なログだけ
を抽出
効率的な
配送システム
本社での
一元管理
🎯 すぐに始められる3ステップ:
1️⃣ 集約先アカウントで Destination を作成
2️⃣ 送信元アカウントで Subscription Filter を設定
3️⃣ 集約されたログを CloudWatch Insights で分析開始!
マルチアカウント環境でのログ管理は
最初の設計が重要
です。
フィルターパターンとアーキテクチャを慎重に設計して、
効率的で安全なログ基盤を構築しましょう!🎉