内容提要
本文讨论了如何将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存储日志可以降低费用、方便数据获取,并支持分层存储以优化存储成本。