在 Elastic Beanstalk 上使用 catalina.out 缓解存储问题

Posted

技术标签:

【中文标题】在 Elastic Beanstalk 上使用 catalina.out 缓解存储问题【英文标题】:Mitigating storage issues with catalina.out on Elastic Beanstalk 【发布时间】:2019-06-29 04:28:14 【问题描述】:

我遇到了一个问题,Tomcat 8 Java 8 Elastic Beanstalk 实例上的 catalina.out 日志文件正在扩展到实例中没有剩余存储空间的程度,这不允许实例继续向其发送日志CloudWatch,并阻止我部署新版本。 catalina.out 文件通过 .ebextension 转发到 CloudWatch。

有什么办法可以缓解这种情况吗?一些理论上的方法可能是通过滚动日志并删除旧版本的catalina.out,或者在实例没有剩余存储空间时滚动实例。

在回答之前,请考虑以下几点:

我知道日志不应该这么大,目前这是一个限制,无法在不久的将来或修复此问题之前修复。

我已经在使用基于不同参数的缩放,因此我无法使用基于存储空间的缩放。

我正在使用 Log4j2,但 catalina.out 由 tomcat 处理,因此配置删除的滚动文件不是一种选择(特别是通过 Log4j2,可能有一种方法可以通过 AWS 上的 Tomcat 来实现)。

除了将其内容转发到 CloudWatch 而不是直接将日志发送到 CloudWatch 之外,我还想将 catalina.out 文件保留在实例上。

无法知道日志文件将占用的最大存储空间,因为您并不总是提前知道何时使用新实例(因此扩展存储空间不是长期解决方案)。

【问题讨论】:

【参考方案1】:

将日志文件分隔在不同的分区中,临时/实例存储可以很好地做到这一点。所以即使填满,也不要破坏其他操作:https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/InstanceStorage.html

使用 CloudWatch Logs 代理发送和轮换日志:https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AgentReference.html

使用 .ebextensions 设置环境、JVM、Log4J 和容器设置:https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/ebextensions.html

【讨论】:

以上是关于在 Elastic Beanstalk 上使用 catalina.out 缓解存储问题的主要内容,如果未能解决你的问题,请参考以下文章

在 Elastic Beanstalk 上创建 cronjob 时遇到问题

让我们在 AWS Elastic Beanstalk 上加密

Elastic Beanstalk “git aws.push” 只承诺区别?

在 Elastic Beanstalk 上使用 Yarn 安装包

使用 cloudformation 在 Elastic Beanstalk 上启动 docker 多容器

使用 Postgres 在 Elastic Beanstalk 上设置 Django