0

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

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

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

提前致谢

4

3 回答 3

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(非免费)。

于 2015-07-08T10:57:48.450 回答
0

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

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

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

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

于 2015-07-07T19:17:20.543 回答
0

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

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

于 2015-07-09T04:08:18.447 回答