
Tenho um aplicativo Tomcat no Elastic Beanstalk e quero enviar logs para o Cloudwatch Logs. Para isso, configurei o log4j para gravar no arquivo e, em seguida .ebextension
, amazon-cloudwatch-agent
é instalado e executado.
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: |
{...
}
Infelizmente, sempre que implanto o aplicativo no Elastic Beanstalk, o agente é encerrado e preciso reiniciá-lo manualmente via ssh.
Responder1
Se você definir o streaming de log padrão como desabilitado na configuração do ambiente, o Beanstalk interromperá o agente cloudwatch durante a implantação. Infelizmente, isso acontece logo após a execução do comando ebextension para iniciar o agente.
Para resolver esse problema usei um gancho postdeploy da plataforma, que é executado após a implantação e, portanto, substitui o desligamento do agente do padrão do beanstalk.
Basta colocar um script de shell contendo o comando start em ./platform/hooks/postdeploy/ em seu pacote de aplicativos.