我的用例是定期处理S3访问日志(具有这18个字段)并推送到RDS中的表。我使用AWS数据管道来执行此任务,每天运行以处理前一天的日志。
我决定将任务分成两个活动 1. Shell命令活动:处理s3访问日志并创建csv文件 2. Hive活动:从csv文件读取数据并插入RDS表。
我的输入s3存储桶有很多日志文件,因此在暂存时由于内存不足导致第一次活动失败。但是,我不想上传所有日志,前一天的日志对我来说已经足够了。我在互联网上搜索但没有得到任何解决方案。我如何实现这一目标?我的解决方案是最佳的吗?有没有比这更好的解决方案?任何建议都会有所帮助
先谢谢
答案 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提取并在预配置的仪表板中查看。