amazon-cloudwatch-agent はアプリケーションがリロードされるたびにシャットダウンします

amazon-cloudwatch-agent はアプリケーションがリロードされるたびにシャットダウンします

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 のデフォルトからのエージェントのシャットダウンをオーバーライドします。

アプリケーション バンドルの ./platform/hooks/postdeploy/ に、開始コマンドを含むシェル スクリプトを配置するだけです。

関連情報