やりたいこと
AWSのCloudWatchLogsのロググループを指定し、S3にログ情報を退避する。
環境情報
- aws-cli/2.15.5
やり方
以下のようにロググループとS3のバケットを指定し、ログの範囲をUNIX時間で与える。
$ aws logs create-export-task --task-name "test" --log-group-name "/aws/test/" --from 1746834146000 --to 1747698146000 --destination "s3-test" --destination-prefix "hoge"
すると標準出力にエクスポートを行うタスクIDが表示され
{
"taskId": "xx-xx-xx-xx-xx"
}一定時間待つとS3にログデータが格納されている。
$ aws s3 ls s3://s3-test --recursive ... 1414 hoge/xx-xx-xx-xx-xx/test.log/000000.gz ... 27 hoge/aws-logs-write-test
以下、補足です。
補足
エクスポートタスクの状況は以下のコマンドで確認ができます。
$ aws logs describe-export-tasks --task-id xx-xx-xx-xx-xx
{
"exportTasks": [
{
"taskId": "xx-xx-xx-xx-xx",
"taskName": "test",
"logGroupName": "/aws/test/",
"from": 1746834146000,
"to": 1747698146000,
"destination": "s3-test",
"destinationPrefix": "hoge",
"status": {
"code": "COMPLETED",
"message": "Completed successfully"
},
"executionInfo": {
"creationTime": 1747698375972,
"completionTime": 1747698377767
}
}
]
}また、指定したS3に出力されていたファイルはデフォルトで配置される模様。指定した時間にログがない場合は同ファイルのみが出力されます。
$ aws s3 cp s3://s3-test/hoge/aws-logs-write-test - Permission Check Successful
同作業の注意点として、S3側に事前に権限設定を追加しておかないといけない点です。S3のパーミッションにて"logs.amazonaws.com"からのPutObject権限がないと、権限エラーとなるので事前にバケット側に設定追加が必要となります。
以上、ご参考になれば幸いです。