我想使用AWS AccessLogs来处理网站展示次数,使用现有批量导向的ETL管道来抓取最后一小时的展示次数并使用它们进行大量的进一步转换。
AccessLog的问题在于:
但请注意,某段时间内的部分或全部日志文件条目都可以 有时会延迟最多24小时
所以我永远都不知道特定小时的所有日志何时完成。 遗憾的是,我不能使用任何流媒体解决方案,我需要使用现有的管道来抓取每小时批量数据。
所以我的问题是,是否有任何方法可以通知所有日志已在特定时间内传送到s3?
答案 0 :(得分:0)
您询问了S3,但您的引用来自CloudFront的文档。
无论哪种方式,都没关系。这只是一个警告,说日志传递可能有时会被延迟,如果它被延迟,这不是一个错误 - 这是一个庞大的分布式系统的副作用。
两种服务的运行都是一个难以理解的大规模,所以周期性地,系统的一小部分出现问题,最终可能会发现并传递一些搁浅的日志或积压的日志。很少,他们甚至可以在几天或几周后到达。
没有任何事件表明所有日志都已完成,因为在这样的系统中没有任何一个点可以识别这一点。
但这是一个外卖的概念:多数的日志将在分钟内到达,但这不能保证。一旦开始运行流量并观察日志记录的工作方式,您就会看到我所指的内容。延迟日志是例外,您应该能够相当快速地了解在处理给定挂钟时间的日志之前需要等待多长时间。只要您跟踪处理的内容,就可以在以后对存储桶进行审计,以确保您的进程正在捕获足够比例的日志。
自CloudFront支持SNI之前的几天,我一直在使用与存储区相同的区域中的EC2中的HAProxy将流量路由到我的一些S3存储桶。这使我能够使用自定义主机名和SNI,但也让我使用HAProxy实时记录所有桶流量,HAProxy可以将其日志的副本流式传输到日志收集器,以便通过UDP进行实时分析。将其写入syslog。该解决方案在性能上没有可测量的差异,HAProxy在t2级服务器上运行得非常好,因此具有成本效益。当然,您确实需要花费更多成本和维护费用,但只要您没有使用原始访问标识,您甚至可以在 CloudFront和S3之间部署HAProxy 。我的一个大型服务就是这样做的,这是Lambda @ Edge之前的一个延续。