CloudWatch Logs データ転送パターン完全ガイド
「CloudWatch Logsにログを集めたいが、サービスごとに設定方法が違って混乱する」 そんなエンジニアのために、主要なAWSサービスからのログ転送パターンを網羅的に整理しました。
ログ転送パターン・サマリー
AWSサービスがCloudWatch Logsにログを送る方法は、主に以下の3パターンに分類されます。
| パターン | 概要 | 代表的なサービス | 設定の難易度 |
|---|---|---|---|
| 1. Direct Integration | サービスの管理コンソールで「送信先」を選ぶだけ | Lambda, VPC Flow Logs, API Gateway, Route 53 | ★☆☆ (簡単) |
| 2. Agent Based | サーバー内部にエージェントをインストールして送信 | EC2, On-Premises, ECS (EC2 launch type) | ★★☆ (手間) |
| 3. Export / Subscription | 一度別の場所に吐かれたログを転送設定で送る | RDS (一部), S3バケットのログ | ★★★ (複雑) |
パターン別アーキテクチャと設定方法
1. Direct Integration (ネイティブ統合)
最も簡単なパターンです。サービス自体がCloudWatch Logsへの書き出し機能を持っています。
設定例: VPC Flow Logs
VPCの画面から「フローログの作成」を選び、送信先に「CloudWatch Logs」を指定するだけです。
- 必要なもの: CloudWatch Logsへの書き込み権限を持つIAMロール。
設定例: Lambda
何もしなくてOKです。関数を作成すると自動的に /aws/lambda/<関数名> というロググループが作成され、print() や console.log() の内容が転送されます。
2. Agent Based (エージェント経由)
OSやコンテナ内部のファイルとして出力されるログを、エージェントが拾って送信します。
設定例: EC2
CloudWatch Agentをインストールし、config.json で「どのファイルを」「どのロググループに」送るか定義します。 詳細: CloudWatch Agent 完全ガイド
設定例: ECS / EKS (FireLens)
コンテナの標準出力(stdout)を、サイドカーコンテナ(Fluent Bitなど)が拾ってCloudWatchへ送ります。 ECSタスク定義で awslogs ログドライバーを指定するのが最も簡単です。
"logConfiguration": {
"logDriver": "awslogs",
"options": {
"awslogs-group": "/ecs/my-app",
"awslogs-region": "ap-northeast-1",
"awslogs-stream-prefix": "ecs"
}
}3. Database & Exports (RDS / Aurora)
RDSやAuroraは少し特殊的です。
設定方法
RDSのコンソールで「変更」をクリックし、「ログのエクスポート」セクションで送信したいログ(Postgresql log, Error log, Slow query logなど)にチェックを入れます。 ※ 注意: 再起動が必要な場合があります(パラメータグループ変更を伴う場合)。
サービス別リファレンス(主要なもの)
| サービス | ログの種類 | 設定箇所 | 備考 |
|---|---|---|---|
| EC2 | Syslog, App Logs | EC2内部 (Agent) | IAMロール権限が必要 |
| Lambda | 実行ログ | 自動 (IAMロール) | デフォルトで有効 |
| VPC | Flow Logs | VPCコンソール | ENI単位でも設定可 |
| Route 53 | Query Logs | Route 53 Resolver | クエリごとの課金に注意 |
| CloudTrail | Audit Logs | CloudTrail Trails | 「CloudWatch Logsへの送信」をONにする |
| RDS | Error, Slow Query | RDSコンソール | エンジンにより出力可能ログが異なる |
| ECS | Stdout/Stderr | タスク定義 | FargateならFireLensも利用可能 |
| WAF | ACL Traffic | WAF Logging | Kinesis Data Firehose経由になることが多い |
| S3 | Access Logs | S3バケット設定 | S3への保存が基本。CW LogsへはLambda転送が必要 |
まとめ
「ログをCloudWatchで見たい」と思ったら、まずはそのサービスが「Direct Integration」に対応しているか確認しましょう。 対応していない(EC2上のアプリログなど)場合は、Agentの導入を検討します。 S3アクセスログなどの大量データは、コストの観点からCloudWatch LogsではなくS3に直接保存し、Athenaで分析するほうが適している場合もあります。