我正在为 CloudFront 日志文件设置处理管道。阅读文档后,我的理解是 CF 将为每个发行版每小时创建一个日志文件,但这不是我在存储桶中看到的内容。我每个发行版(每小时)获得多个文件:
E39O6KS6J8MIZW.2015-10-09-23.083b2c12.gz
E39O6KS6J8MIZW.2015-10-09-23.1a96bb61.gz
E39O6KS6J8MIZW.2015-10-09-23.4cd34dd8.gz
E39O6KS6J8MIZW.2015-10-09-23.50c7b5b1.gz
我遗漏了什么?基本上,我想了解的是哪些驱动程序会创建新的日志文件。
答案1
您可能知道,CloudFront 是一个全球分布式系统,其中配置是集中的,但是一旦将配置推送到 50 多个边缘位置,它们就会独立运行。
这些日志大概是在每个边缘本地收集,或者在区域内收集,然后定期收集并组装成合并日志并发布到您的日志存储桶中。
日志文件名中嵌入的时间戳大约表示所含事件发生的小时数。因此,给定小时的日志通常不会在一小时内到达,甚至不会在紧接着的一小时内到达。
如果有什么因素阻碍了某些边缘的日志被及时收集(正如在全球分布式平台中所预期的那样),它们通常会在几个小时内到达,并以回溯日志文件的形式出现,该日志文件代表了日志最初记录的大致时间。
日志文件传送时间
CloudFront 每小时最多为分配提供几次访问日志。通常,日志文件包含有关 CloudFront 在给定时间段内收到的请求的信息。CloudFront 通常会在日志中出现事件后一小时内将该时间段的日志文件传送到您的 Amazon S3 存储桶。但请注意,某个时间段的部分或所有日志文件条目有时可能会延迟长达 24 小时。当日志条目延迟时,CloudFront 会将它们保存在一个日志文件中,该文件的文件名包括请求发生期间的日期和时间,而不是文件传送的日期和时间。
http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/AccessLogs.html#access-logs-timing
因此,从本质上讲,CloudFront 将创建最后一个您的分发有流量时,每小时都会生成一个日志文件,但日志基本上可以在任何时间到达...因此您无法有效地轮询存储桶以根据当前时间、前一小时的时间等来寻找某些模式。
尽快处理这些问题的一种方法是(不轮询存储桶)S3 事件通知。
无论如何,您确实需要准备好处理任何时间戳,无论何时写入,都不要假设重复,也不要忽略日志,因为它的时间戳似乎比预期的要旧。