使用Lambda vs Firehose和CloudWatch订阅过滤器发布到ElasticSearch

时间:2018-07-07 09:19:10

标签: elasticsearch amazon-cloudwatch amazon-kinesis-firehose

我目前正在研究CloudWatch日志的实时处理。我们每天大约生成30-40GB的日志(API网关完整请求/响应),平均每秒约有100个请求。最终,我们希望处理日志以从查询字符串和响应标头中提取统计信息,并将结果发布到ElasticSearch或S3。

我目前正在研究两个选项,并努力了解这两个选项之间的区别

使用Lambda函数目标创建CloudWatch订阅过滤器。在Lambda中处理数据并发布到ElasticSearch / S3。

创建一个CloudWatch订阅过滤器并从Firehose目的地进行订阅。使用Lambda转换函数提取数据,将其放回流中,然后让Firehose将数据发布到ElasticSearch / S3。

订阅过滤器将基本上传递包含“转换前的方法请求主体”和“端点响应标头:”的记录,以进行进一步处理。

我对如何从CloudWatch订阅过滤器触发Lambda函数一无所知。是否涉及任何批处理,或者将由订阅筛选器传递的每个单个日志事件触发?相反,我确实知道Firehose确实提供了批处理,我可以在一定程度上控制它。

有人可以提供建议吗?还有其他我可能会忽略的选择吗?感谢任何输入。

1 个答案:

答案 0 :(得分:0)

您可以使用订阅过滤器将cloudwatch日志与Amazon kinesis流连接。这样,每当新日志与订阅过滤器匹配时,它将被附加到您的运动流中。 一旦您的日志位于Kinesis流中,您将有很多选择。例如,您可以将它们发送到Kinesis Firehose Delivery Streams,并可以使用Datatransformation lambda对其进行转换,或者直接将其转换为Elastic Search e.t.c。

假设您已经有cloudwatch日志和kinesis流,则所需的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"