elasticsearch - 使用 Lambda 与带有 CloudWatch 订阅过滤器的 Firehose 发布到 ElasticSearch
问题描述
我目前正在研究 CloudWatch 日志的实时处理。我们每天生成大约 30-40GB 的日志(API 网关完整请求/响应),平均每秒大约 100 个请求。最终,我们希望处理日志以从查询字符串和响应标头中提取统计信息,并将结果发布到 ElasticSearch 或 S3。
我目前正在研究两个选项并努力了解这些选项之间的区别
使用 Lambda 函数目标创建 CloudWatch 订阅过滤器。在 Lambda 中处理数据并发布到 ElasticSearch/S3。
创建 CloudWatch 订阅过滤器并从 Firehose 目标订阅。使用 Lambda 转换函数提取数据,将其放回流中,然后让 Firehose 将数据发布到 ElasticSearch/S3。
订阅过滤器将基本上传递包含“转换前的方法请求正文”和“端点响应标头:”的记录以进行进一步处理。
我对如何从 CloudWatch 订阅过滤器触发 Lambda 函数一无所知。是否涉及任何批处理,或者是否会为订阅过滤器传递的每个日志事件触发它?相反,我确实了解 Firehose 确实提供了批处理功能,我可以在一定程度上对其进行控制。
有人可以就此提供建议吗?还有其他我可能忽略的选项吗?感谢任何输入。
解决方案
您可以使用订阅过滤器将 cloudwatch 日志与 amazon kinesis 流连接起来。这样,每当新日志与订阅过滤器匹配时,它就会附加到您的 kinesis 流中。一旦您的日志位于 Kinesis 流中,您就有很多选择。例如,您可以将它们发送到 Kinesis Firehose Delivery Streams,并可能使用 Datatransformation lambda 或直接将它们转换为 Elastic Search 等
假设您已经拥有 cloudwatch 日志和 kinesis stream ,您需要的 cloudformation 资源如下:
KinesisToCloudwatchSubscription:
Type: AWS::Logs::SubscriptionFilter
Properties:
DestinationArn: !GetAtt [your_kinesis_stream, Arn]
FilterPattern: your_cloudwatch_logstream
RoleArn: A role that permits the "kinesis:PutRecord" action
LogGroupName: "/aws/lambda/your_lambda_function"
推荐阅读
- c# - 使用 .xlsm c#
- java - javafx - 延迟beetwen键释放和listview选择单元格
- android - 不同分辨率下的Android可绘制项目大小
- python - 如何使用 pygame 和 pyttsx 让动画人脸说话
- r - R:循环中的 gsub 替换名称
- javascript - 对 Array.prototype.reduce 的 polyfill 感到困惑
- javascript - 为什么按名称删除项目的方法不起作用?
- python - PyCharm virtualenv 找不到正确的 python 二进制文件
- z3 - 使用 SMTLib for z3 的 Datalog 中的循环关系
- sql - 如何在oracle中按结果对两组求和