
Ich habe eine Tomcat-App auf Elastic Beanstalk und möchte Protokolle an Cloudwatch Logs senden. Zu diesem Zweck habe ich log4j so eingerichtet, dass es in eine Datei schreibt. In .ebextension
ist amazon-cloudwatch-agent
es installiert und wird ausgeführt.
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: |
{...
}
Leider wird der Agent jedes Mal heruntergefahren, wenn ich die App auf Elastic Beanstalk bereitstelle, und ich muss ihn manuell per SSH neu starten.
Antwort1
Wenn Sie in der Umgebungskonfiguration das Standardprotokoll-Streaming deaktivieren, stoppt Beanstalk den CloudWatch-Agenten während der Bereitstellung. Leider geschieht dies kurz nachdem der ebextension-Befehl zum Starten des Agenten ausgeführt wurde.
Um dieses Problem zu lösen, habe ich einen Plattform-Postdeploy-Hook verwendet, der nach der Bereitstellung ausgeführt wird und somit das Herunterfahren des Agenten vom Beanstalk-Standard überschreibt.
Fügen Sie einfach ein Shell-Skript mit dem Startbefehl in ./platform/hooks/postdeploy/ in Ihr Anwendungspaket ein.