如何将我自己的日志添加到 Amazon Elastic Beanstalk 上的日志轮换/S3 备份?
Posted
技术标签:
【中文标题】如何将我自己的日志添加到 Amazon Elastic Beanstalk 上的日志轮换/S3 备份?【英文标题】:How to add my own log to log rotation/S3 backup on Amazon Elastic Beanstalk? 【发布时间】:2018-05-07 08:41:00 【问题描述】:我们有一个基于 Amazon Elastic Beanstalk 的 php 应用程序。该应用程序启用了日志轮换和备份到 S3。 Apache 访问和错误日志确实会每小时正确轮换和备份一次。
但是,应用程序也会创建自己的日志文件。我想用它做同样的事情——它应该每小时旋转一次并备份到 S3。按照here 的说明,我创建了以下文件:
.ebextensions/publish-logs.config
files:
"/opt/elasticbeanstalk/tasks/publishlogs.d/cloud-init.conf" :
mode: "000755"
owner: root
group: root
content: |
/var/app/current/log/*.log
然后我将新版本上传到亚马逊。
结果 - 我看到日志文件在第一次轮换时备份到 S3 ONCE。它没有被压缩,只是复制。在那之后,什么都没有。没有新的 S3 备份。没有旋转。下载捆绑日志时,文件就在那里,现在大约 80MB(几天累积)。
亚马逊的文档非常少。但它确实说:
当您配置应用程序的日志文件以进行日志轮换时,应用程序不需要创建日志文件的副本。 Elastic Beanstalk 将 logrotate 配置为为每次轮换制作应用程序日志文件的副本。
我做错了什么?
【问题讨论】:
【参考方案1】:为此,您需要配置 logrotate,这有点棘手。由于高度取决于您使用的实例。但是让我试试。将这两个 files
添加到您的配置中。首先为 logrotate 创建配置,然后配置 cron 以使用该配置运行 logrotate。
files:
"/etc/logrotate.d/logrotate.elasticbeanstalk.php.conf":
mode: "000655"
owner: root
group: root
content: |
/var/app/current/log/*.log
rotate 14
size 100M
daily
compress
delaycompress
"/etc/cron.daily/cron.logrotate.elasticbeanstalk.php.conf":
mode: "000655"
owner: root
group: root
content: |
#!/bin/sh
test -x /usr/sbin/logrotate || exit 0
/usr/sbin/logrotate /etc/logrotate.d/logrotate.elasticbeanstalk.php.conf
/sbin/service awslogs restart
试一试。如果失败 - 请提供您正在使用的 AMI ID
【讨论】:
真的需要第二部分吗?文档说You can find Elastic Beanstalk configuration files for logrotate in /etc/logrotate.elasticbeanstalk.hourly/ ... The configuration files are invoked by cron jobs in /etc/cron.hourly/
- 这表明我不需要配置cron,对吗? (我实际上希望它们每小时轮换一次)
哦,顺便说一句,我说的文档是docs.aws.amazon.com/elasticbeanstalk/latest/dg/…
今天晚些时候我会检查,并提供详细解释
没关系,我想是的。我设法通过 ssh 连接到其中一个盒子,看看亚马逊自己做了什么。一切都在那里,就像你描述的那样。我仍在尝试使该配置正常工作,但应该很快就会完成。以上是关于如何将我自己的日志添加到 Amazon Elastic Beanstalk 上的日志轮换/S3 备份?的主要内容,如果未能解决你的问题,请参考以下文章
如何将日志从 Amazon S3 存储桶导入到 cloudwatch
如何将我自己的 XML 配置文件添加到 Windows 服务 C#