如何在单个文件中保存一整天的完整AWS s3存储桶日志?

我有s3桶说xfile ,并说xlog

保留文件的xfile和保留文件的xlog

我有一个文件夹作为xlog/data ,我也启用了loggingxfile前缀data

我没有做任何额外的configuration,一切都在默认情况下。

所以一段时间后,我在xlog data文件夹中看到类似这样的日志 在这里输入图像说明

看来每个请求都会创build一个单独的日志文件。 这是预期的行为?

我期望有一个文件为0000至2359小时,其中包含一天的完整日志。 再过一天,应该创build单独的文件。

我错过了什么? 或者我应该如何configuration?

S3是一个分布式系统,这是它生成的大量日志文件中的至less一个因素。

S3中的对象是不可变的 – 不可能将数据直接追加到S3对象,这样做需要仿真操作:对象的字节必须复制到一个新对象中,然后再附加数据。 这将使login到一个单一的“日益增长”的日志文件几乎不可能在任何规模。 日志文件是标准的S3对象,所以这可能是个别文件原样写入的另一个原因。

这不是每个请求的一个文件,虽然它可以看起来像一个stream量低的桶。 实质上,每个日志文件都包含在时间戳之前创build的logging,但是自从最后一个日志被写入以后,不一定是logging – 日志文件偶尔会包含几个小时,几天或几周前被S3遗留在某处的logging,被释放。 这是罕见的,但logging的可能性。

事件发生后,通常需要logging故障排除的日志,因此通常需要尽快接收它们,这就是S3倾向于做的事情。

这是不可configuration的。

http://docs.aws.amazon.com/AmazonS3/latest/dev/ServerLogs.html

我的日志易于访问的解决scheme是我的日志收集桶上的S3事件通知,它将消息发送到SQS队列中。 队列使用者在具有EBS冷存储(sc1)卷的EC2实例上运行。 将每个日志文件写入存储区时,队列使用者将获取该文件,并从文件名中获取date。 然后parsing日志事件以确定它们的HTTP状态类,例如2XX,3XX,4XX,5XX或其他/不匹配,并将每个logging追加到每日主文件中。 4xx,5xx或不匹配/意外的logging会附加到较小的日常文件中,但只有错误。 用像grep这样的工具search这些本地文件就变成了一件简单的事情。