使用AWS datapipeline处理s3访问日志

时间:2015-07-07 11:40:55

标签: amazon-web-services amazon-s3 amazon-rds amazon-data-pipeline

我的用例是定期处理S3访问日志(具有这18个字段)并推送到RDS中的表。我使用AWS数据管道来执行此任务,每天运行以处理前一天的日志。

我决定将任务分成两个活动   1. Shell命令活动:处理s3访问日志并创建csv文件   2. Hive活动:从csv文件读取数据并插入RDS表。

我的输入s3存储桶有很多日志文件,因此在暂存时由于内存不足导致第一次活动失败。但是,我不想上传所有日志,前一天的日志对我来说已经足够了。我在互联网上搜索但没有得到任何解决方案。我如何实现这一目标?我的解决方案是最佳的吗?有没有比这更好的解决方案?任何建议都会有所帮助

先谢谢

3 个答案:

答案 0 :(得分:0)

您可以定义S3数据节点使用时间戳。对于例如你可以说目录路径是

s3:// yourbucket /#{format(@scheduledStartTime,' YYYY-MM-dd-HH-mm-ss')}

由于您的日志文件名称中应该有一个时间戳(或者它们可以通过带时间戳的目录进行组织)。

这只会暂存与该模式匹配的文件。

答案 1 :(得分:0)

您可能正在重新创建已由Logstash(或更确切地说是ELK堆栈)完成的解决方案。

http://logstash.net/docs/1.4.2/inputs/s3

Logstash可以使用S3文件。

这是一个从S3读取访问日志的线程

https://groups.google.com/forum/#!topic/logstash-users/HqHWklNfB9A

我们通过其AWS插件使用具有相同功能的Splunk(非免费)。

答案 2 :(得分:0)

请问为什么要将访问日志推送到RDS? ELK可能是一个很好的解决方案。您可以自己构建它或使用Logz.io中的ELK-as-a-service(我为Logz.io工作)。

它使您能够轻松定义S3存储桶,定期从存储桶读取所有日志并由ELK提取并在预配置的仪表板中查看。