Amazon CloudWatch Logs
用户指南
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。请点击 Amazon AWS 入门,可查看中国地区的具体差异

使用 AWS CLI 将数据导出到 Amazon S3

下面的示例使用导出任务将所有数据从名为“my-log-group”的 CloudWatch Logs 日志组导出到名为“my-exported-logs”的 Amazon S3 存储桶中。此示例假定您已创建了一个名为“my-log-group”的日志组。

步骤 1:创建 Amazon S3 存储桶

我们建议您使用专为 CloudWatch Logs 创建的存储桶。 但是,如果要使用现有存储桶,请跳至第 2 步。

注意

Amazon S3 存储桶必须与要导出的日志数据处于同一个区域内。CloudWatch Logs 不支持将数据导出至其他区域中的 Amazon S3 存储桶。

使用 AWS CLI 创建 Amazon S3 存储桶

在命令提示符处,运行以下 create-bucket 命令,其中 LocationConstraint 是您要将日志数据导出到的区域:

Copy
aws s3api create-bucket --bucket my-exported-logs --create-bucket-configuration LocationConstraint=us-west-2

下面是示例输出:

Copy
{ "Location": "/my-exported-logs" }

第 2 步:在 Amazon S3 存储桶上设置权限

默认情况下,所有 Amazon S3 存储桶和对象都是私有的。仅资源所有者 (创建了存储桶的 AWS 账户) 能够访问存储桶及其包含的任何对象。不过,资源所有者可以选择通过编写访问策略来向其他资源和用户授予访问权限。

要设置 Amazon S3 存储段上的权限

  1. 创建一个名为 policy.json 的文件并添加以下访问策略,将 Resource 更改为您的 S3 存储桶的名称,并将 Principal 更改为您要将日志数据导出到的区域的终端节点。使用文本编辑器以创建此策略文件。请勿使用 IAM 控制台。

    Copy
    { "Version": "2012-10-17", "Statement": [ { "Action": "s3:GetBucketAcl", "Effect": "Allow", "Resource": "arn:aws:s3:::my-exported-logs", "Principal": { "Service": "logs.us-west-2.amazonaws.com" } }, { "Action": "s3:PutObject" , "Effect": "Allow", "Resource": "arn:aws:s3:::my-exported-logs/*", "Condition": { "StringEquals": { "s3:x-amz-acl": "bucket-owner-full-control" } }, "Principal": { "Service": "logs.us-west-2.amazonaws.com" } } ] }
  2. 使用 put-bucket-policy 命令将您刚添加的策略设置为存储桶上的访问策略。此策略可让 CloudWatch Logs 将日志数据导出至您的 Amazon S3 存储桶中。存储桶拥有者将对所有导出的对象拥有完全权限。

    Copy
    aws s3api put-bucket-policy --bucket my-exported-logs --policy file://policy.json

    警告

    如果现有存储桶已附加一个或多个策略,请将 CloudWatch Logs 访问的语句添加到这些策略。我们建议您评估生成的权限集,确保它们适合访问存储桶的用户。

第 3 步:创建导出任务

创建从日志组导出日志的导出任务后,导出任务可能需要几秒到几小时的时间才能完成,具体取决于要导出的数据大小。

使用 AWS CLI 创建导出任务

在命令提示符处,使用以下 create-export-task 命令创建导出任务:

Copy
aws logs create-export-task --task-name "my-log-group-09-10-2015" --log-group-name "my-log-group" --from 1441490400000 --to 1441494000000 --destination "my-exported-logs" --destination-prefix "export-task-output"

下面是示例输出:

Copy
{ "task-id": "cda45419-90ea-4db5-9833-aade86253e66" }

第 4 步:说明导出任务

创建导出任务后,您可以获取任务的当前状态。

使用 AWS CLI 描述导出任务

在命令提示符处,使用以下 describe-export-tasks 命令:

Copy
aws logs describe-export-tasks --task-id "cda45419-90ea-4db5-9833-aade86253e66"

下面是示例输出:

Copy
{ "ExportTasks": [ { "Destination": "my-exported-logs", "DestinationPrefix": "export-task-output", "ExecutionInfo": { "CreationTime": 1441495400000 }, "From": 1441490400000, "LogGroupName": "my-log-group", "Status": { "Code": "RUNNING", "Message": "Started Successfully" }, "TaskId": "cda45419-90ea-4db5-9833-aade86253e66", "TaskName": "my-log-group-09-10-2015", "To": 1441494000000 }] }

您可以三种不同的方式使用 describe-export-tasks 命令:

  • 无任何筛选器:按照与创建时间相反的顺序列出所有导出任务。

  • 筛选任务 ID:仅列出具有指定 ID 的导出任务 (如果有)。

  • 筛选任务状态:列出具有指定状态的导出任务。

例如,使用以下命令筛选 FAILED 状态:

Copy
aws logs describe-export-tasks --status-code "FAILED"

下面是示例输出:

Copy
{ "ExportTasks": [ { "Destination": "my-exported-logs", "DestinationPrefix": "export-task-output", "ExecutionInfo": { "CompletionTime": 1441498600000 "CreationTime": 1441495400000 }, "From": 1441490400000, "LogGroupName": "my-log-group", "Status": { "Code": "FAILED", "Message": "FAILED" }, "TaskId": "cda45419-90ea-4db5-9833-aade86253e66", "TaskName": "my-log-group-09-10-2015", "To": 1441494000000 }] }

第 5 步:取消导出任务

您可以取消处于 PENDING (等待完成) 或 RUNNING (正在运行) 状态的导出任务。

使用 AWS CLI 取消导出任务

在命令提示符处,使用以下 cancel-export-task 命令:

Copy
aws logs cancel-export-task --task-id "cda45419-90ea-4db5-9833-aade86253e66"

请注意,您可以使用 describe-export-tasks 命令验证任务是否已成功取消。