如何发布到一个文件并更改 AWS 中的访问日志发布频率

How to publish to one single file and change access log publication frequency in AWS

我已经设置了一个亚马逊负载均衡器来将访问日志发布到 s3。现在唯一的问题是它创建了多个文件,而不是一个包含可能一天的所有访问权限的文件。

四处寻找,我发现这个 documentation 其中指出:

Elastic Load Balancing publishes a log file for each load balancer node every 5 minutes.

这太不方便了。因为这意味着一天之内我将拥有许多包含日志条目的小日志文件,而不是包含所有日志条目的 1 个日志文件。

我已经尝试在文档中查找是否可以更改它,但到目前为止,我还没有找到如何更改的方法。

有人知道怎么做吗?如何修改发布频率(我可能想将其更改为 10 分钟而不是 5 分钟)但最重要的是如何将日志文件发布到一个文件中。

据我所知,没有绝密未记录的 API 调用可以让您更改日志频率。所以这里有几个选择:

使用雅典娜

在我看来,这是最好的解决方案:您可以编写 SQL 查询来分割数据以供分析。 Athena docs 描述了如何为 ALB 和其他数据源配置它。

使用命令行

您可以将文件下载到一个临时目录,然后将它们组合成一个文件:

mkdir /tmp/$$
aws s3 cp --recursive s3://bucket/prefix/AWSLogs/aws-account-id/elasticloadbalancing/region/yyyy/mm/dd/ /tmp/$$
zcat /tmp/$$/* > access.log
rm -rf /tmp/$$

使用 Lambda

如果您确实需要实际文件,那么在我看来,Lambda 是组合它们的最简单方法。我会在午夜触发它,识别前一天的所有文件(它们有日期戳前缀),并将它们组合成一个大文件。我可能会写 Java,因为我认为使用 Java 将数据流式传输到 S3 更容易一些(相对于 Python,这是我的主要 Lambda 语言)。

或者,您可能 Google 了解其他人对此的实施。