
У меня есть приложение Tomcat на Elastic Beanstalk, и я хочу отправлять логи в 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.
Просто поместите скрипт оболочки, содержащий команду запуска, в ./platform/hooks/postdeploy/ в вашем пакете приложения.