概要
CloudWatch LogsはAWSでは一番簡単に用意できる検索可能なログ基盤だと思います。
一方で
- 詳細な検索がしにくい(クエリやUI的に)
- ログが大量に増えると料金も嵩んでくる
- Terraformや操作ミス(保持期間の誤設定など)で間違って消してしまうリスク
といった問題もあるので、そういった場合の対策としてS3やLambdaに渡してデータを保存・変換させたりする手法が一般的です。
CloudWatch Logsではロググループを指定して簡単にS3へエクスポートできる機能も提供されているので、それを実行してみます。
手順
S3バケットの用意
バケット作成
デフォルト設定でサクッと作っちゃいます。
権限周りは後で設定するので既存のバケットでももちろんOKです。
バケットポリシーの設定
CloudWatch LogsからS3へエクスポートするための権限をバケットポリシーで設定します。
これがないとCloudWatch Logsからエクスポートする際に権限が足りずエラーになります。
東京リージョンap-northeast-1
にあるtest-bucket
というバケット名だとして、以下のポリシーをアタッチします。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "logs.ap-northeast-1.amazonaws.com" }, "Action": "s3:GetBucketAcl", "Resource": "arn:aws:s3:::test-bucket" }, { "Effect": "Allow", "Principal": { "Service": "logs.ap-northeast-1.amazonaws.com" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::test-bucket/*", "Condition": { "StringEquals": { "s3:x-amz-acl": "bucket-owner-full-control" } } } ] }
S3の「アクセス権限→バケットポリシー」で設定します。
CloudWatch Logsからエクスポート
ロググループの指定
CloudWatch LogsでS3にエクスポートしたいロググループを指定し、アクションからエクスポートをクリックします。
エクスポート期間の設定
どの期間のログをエクスポートするか指定します。
カレンダーでサクッと指定できます。
今回は1ヶ月分にしました。
実行
実行を押すと「エクスポート中」という表示がされます。
注意としてエクスポートは1度に1回しかできません。並行して複数エクスポートということはできません。
確認
S3バケットをみるとこのようにテストファイルとエクスポートファイルがあります。
ストリーム毎にディレクトリが切られて保存されます。
保存形式はデフォルトで.gz
になってます。ファイルサイズは32MB
毎のようですね。
まとめ
簡単にCloudWatch LogsからS3へエクスポートすることができました。
次回はKinesis Firehoseを使ってリアルタイムにS3へ流す仕組みを作ってみます。