使用 Lambda 函数将 CloudWatch Log 中的日志归档到 S3 桶中

使用 Lambda 函数将 CloudWatch Log 中的日志归档到 S3 桶中

💡 原文中文,约4000字,阅读约需10分钟。
📝

内容提要

本文讨论了如何将CloudWatch日志存储到S3,以降低存储费用。作者建议使用S3进行数据存储和归档,并提供了创建S3桶、配置权限和创建Lambda函数的详细步骤,以便将日志导出到S3。

🔎

延伸解读

为什么要把 CloudWatch 日志搬到 S3

文章指出,CloudWatch Logs 的存储和查询费用较高,尤其是当 EC2 将大量日志持续写入 CloudWatch 时,成本会明显上升。而 S3 不仅存储成本更低,还支持归档存储和分层存储,适合大数据分析场景。因此,将日志从 CloudWatch 导出到 S3,既能降低长期存储费用,也方便数据分析同事直接取用数据。

国内与国外 S3 桶权限配置的差异

文章分别给出了国内和国外 S3 桶的权限配置示例。国内配置中,Principal 使用 logs.cn-north-1.amazonaws.com.cn,资源 ARN 使用 arn:aws-cn 前缀;国外配置中,Principal 使用 logs.us-west-2.amazonaws.com,资源 ARN 使用 arn:aws 前缀。读者需要根据自己 S3 桶所在区域选择对应的配置,避免因区域或分区不匹配导致日志导出失败。

Lambda 函数中的关键参数与时间处理

Lambda 代码示例中,需要根据实际情况修改 region、bucket_name 和 log_group_name。代码通过 UTC+8 计算当天起始时间,并转换为毫秒时间戳,用于指定导出日志的时间范围。导出任务创建后,函数会轮询任务状态,直到完成或超时。最终日志会按日期目录归档到 S3,方便后续梳理和检索。

实施前需要确认的前置条件

文章强调,在创建 Lambda 函数之前,需要先创建 S3 桶并修改权限,同时确保有一个 CloudWatch 日志组且其中至少有一天的日志。此外,还需要给 Lambda 分配 AmazonS3 读写权限和 CloudWatchLogsFullAccess 权限。这些前置条件缺一不可,否则日志导出任务可能无法正常执行。

❓

Q&A

为什么要将CloudWatch日志存储到S3?

将CloudWatch日志存储到S3可以降低存储费用,并且S3支持归档存储,方便大数据分析。

如何创建S3桶并配置权限?

创建S3桶后,需要修改权限以允许CloudWatch日志服务访问该桶,具体配置可参考国内和国外的权限示例。

Lambda函数在日志导出中起什么作用?

Lambda函数用于自动化将CloudWatch日志导出到S3,并需要分配必要的权限。

如何配置Lambda函数的权限?

Lambda函数需要AmazonS3的读写权限和CloudWatchLogsFullAccess权限,以便正常执行日志导出。

导出到S3的日志是如何按日期归档的?

导出的日志会以日期为目录进行归档,方便后续的文件管理和查找。

使用S3存储日志有哪些优势?

使用S3存储日志可以降低费用、方便数据获取,并支持分层存储以优化存储成本。

🏷️

标签

➡️

继续阅读