
我在 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 命令後不久就會執行此操作。
為了解決這個問題,我使用了平台 postdeploy 鉤子,該鉤子在部署後執行,從而覆蓋 beanstalk 預設的代理關閉。
只需將包含啟動命令的 shell 腳本放入應用程式套件的 ./platform/hooks/postdeploy/ 中即可。