使用 Lambda 或 Kinesis Firehose 将 CloudWatch Logs 传输到 S3?
Posted
技术标签:
【中文标题】使用 Lambda 或 Kinesis Firehose 将 CloudWatch Logs 传输到 S3?【英文标题】:Transfer CloudWatch Logs to S3 using Lambda or Kinesis Firehose? 【发布时间】:2021-11-05 17:02:07 【问题描述】:我正在寻找一种将 cloudwatch 日志传输到 s3 存储桶的方法。我发现我可以在 cloudwatch 中使用订阅过滤器。我看到了两个选项。
一个是 CW -> Kinesis Firehose -> S3。
另一个是 CW -> lambda -> S3。
你知道哪个更好吗?我觉得 Kinesis firehose 更容易设置,但使用 lambda 是否更便宜?
【问题讨论】:
【参考方案1】:使用 lambda 时会收费:
每 100 万个请求 0.20 美元(或 0.0000002 美元/请求) 0.00001667 GB 秒的内存(在计算期间固定)对于 Kinesis,您需要付费:
每提取 GB 0.035 美元如果设置正确,Lambda 将始终是一个更便宜的解决方案。
后面的 Kinesis 是一个 lambda。
【讨论】:
CW 上的 Kinesis Firehose 订阅过滤器可以快速轻松地设置。我最近这样做了,它工作了几天。但在我的环境中,我们必须在存储桶策略中将入站 IP 地址范围列入白名单。 Kinesis 不发布其 CIDR 范围。拉姆达也没有。我们从日志中跟踪地址范围,并添加它。但是几天后整个事情就破裂了。所以现在我要在我们的 VPC 中从 Kinesis 迁移到 Lambda。 一开始的托管解决方案是一种简单的方法。但最终你会移动它并创建一些自定义的东西,因为它太有限/太昂贵了,......【参考方案2】:使用 Firehose 将 CloudWatch Logs 发送到 S3 要简单得多。如果您使用 Lambda 执行此操作,您将需要自己处理将对象放在 S3 上,并在您的 Lambda 出现问题时有重试机制。如果您需要在实际发送日志之前对其进行处理,则更推荐使用 Lambda。
如果您采用这种方式,请务必提前计算将生成的日志数据量,并根据您的 Firehose 相应的配置。
最后,如果您不关心实时发送的日志,您还可以探索Export to S3 feature by CloudWatch。您可以设置一个定期运行的 Lambda,并为您的 CloudWatch 日志组创建一个导出。这是更便宜的解决方案,但缺点是不能实时传输日志。
【讨论】:
您可以设置事件/订阅到带有 lambda 的 cloudwatch 并实时完成。您可以使用 firehose/kinesis 执行的所有操作,也可以使用 Lambda 执行。 Firehose 和 Kinesis 的底层是 Lambdas/ec2以上是关于使用 Lambda 或 Kinesis Firehose 将 CloudWatch Logs 传输到 S3?的主要内容,如果未能解决你的问题,请参考以下文章
在 Kinesis 中使用分区键来保证具有相同键的记录由相同的记录处理器 (lambda) 处理
将 AWS Lambda 数据推送到 Kinesis Stream
任何人在使用 AWS kinesis 流、lambda 和 firehose 时都遇到过数据丢失的情况?