我在 Elastic Beanstalk 上有一个 Tomcat 应用程序,我想将日志发送到 Cloudwatch Logs。为此,我设置了 log4j 来写入文件,并在 中.ebextension
安装amazon-cloudwatch-agent
并运行。
commands:
# 00_download_and_install:
# command: rpm --upgrade --force https://s3.amazonaws.com/amazoncloudwatch-agent/amazon_linux/amd64/latest/amazon-cloudwatch-agent.rpm
01_start:
command: /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -c file:/opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json -s
packages:
yum:
amazon-cloudwatch-agent: []
files:
"/opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json":
content: |
{...
}
不幸的是,每次我将应用程序部署到 Elastic Beanstalk 时,代理都会关闭,我必须通过 ssh 手动重新启动它。
答案1
如果您在环境配置中将默认日志流设置为禁用,则 Beanstalk 会在部署期间停止 cloudwatch 代理。不幸的是,它在执行用于启动代理的 ebextension 命令后不久就会这样做。
为了解决这个问题,我使用了平台后部署钩子,它在部署后执行,从而覆盖了 beanstalk 默认的代理关闭。
只需将包含启动命令的 shell 脚本放在应用程序包中的 ./platform/hooks/postdeploy/ 中即可。