web-dev-qa-db-ja.com

Elastic Beanstalk:Amazon Linux 2プラットフォームでのログタスクのカスタマイズ

新しいElastic Beanstalkプラットフォーム(Amazon Linux 2ベースのプラットフォーム)で log task customization を実行する方法を知りたいです。具体的には、私は比較しています:

  • 古い:64ビットAmazon Linux/2.14.3で実行されている単一コンテナのDocker
  • New:64ビットAmazon Linux 2/3.0.0で実行される単一コンテナのDocker

(私の質問は実際にはDocker自体とは何の関係もありません。問題は新しいElastic Beanstalkプラットフォームのいずれかに存在すると推測しています)。

以前は、Amazonのレシピに従うことができました。つまり、ファイルを/opt/elasticbeanstalk/tasks/bundlelogs.d/に入れると、そのファイルが処理されます。これはもはや真実ではありません。

これは変わりましたか?見つかりません ドキュメント 。新しいElastic Beanstalkプラットフォームでログタスクのカスタマイズに成功した人はいますか?もしそうなら、どうですか?

最小限の作業例

最小限の作業例を作成し、両方のプラットフォームにデプロイしました。

Dockerfile

FROM ubuntu
COPY daemon-run.sh /daemon-run.sh
RUN chmod +x /daemon-run.sh
EXPOSE 80
ENTRYPOINT ["/daemon-run.sh"]

Dockerrun.aws.json

{
  "AWSEBDockerrunVersion": "1",
  "Logging": "/var/mydaemon"
}

daemon-run.sh

#!/bin/bash
echo "Starting daemon" # output to stdout
mkdir -p /var/mydaemon/deeperlogs
while true; do
   echo "$(date '+%Y-%m-%dT%H:%M:%S%:z')  Hello World" >> /var/mydaemon/deeperlogs/app_$$.log
   sleep 5
done

.ebextensions/mydaemon-logfiles.config

files: 
  "/opt/elasticbeanstalk/tasks/bundlelogs.d/mydaemon-logs.conf" :
    mode: "000755"
    owner: root
    group: root
    content: |
       /var/log/eb-docker/containers/eb-current-app/deeperlogs/*.log

古いプラットフォームで「フルログ」アクションを実行すると、deeperlogsvar/log/eb-docker/containers/eb-current-appに含まれているZipが表示されます。新しいプラットフォームでは私はしません。

調査

ディスクを見ると、古いものとは異なり、新しいElastic Beanstalkには/opt/elasticbeanstalk/tasksフォルダーがまったくありません。うーん。

9
lbruun

Amazon Linux 2では、フォルダーは次のとおりです。

/opt/elasticbeanstalk/config/private/logtasks/bundle

.ebextensions/mydaemon-logfiles.configは次のようになります。

files: 
  "/opt/elasticbeanstalk/config/private/logtasks/bundle/mydaemon-logs.conf":
    mode: "000644"
    owner: root
    group: root
    content: |
       /var/mydaemon/deeperlogs/*.log

container_commands:
  append_deeperlogs_to_applogs:
    command: echo -e "\n/var/log/eb-docker/containers/eb-current-app/deeperlogs/*" >> /opt/elasticbeanstalk/config/private/logtasks/bundle/applogs

mydaemon-logfiles.configは、deeperlogsapplogsファイルに追加します。これがない場合、deeperlogsはダウンロードログのZipバンドルに含まれません。フォルダは正しい場所、つまり/var/log/eb-docker/containers/eb-current-app/deeperlogs/にあるため、どちらが魅力的ですか。ただし、applogsに明示的にリストされていない場合は、Zipバンドルの生成時にスキップされます。

単一のDocker環境(3.0.1)でテストしました。

成功した完全なログバンドルには、正しいログデータを含むdeeperlogsが含まれています。

enter image description here

enter image description here

これが役立つことを願っています。そのための参照は見つかりませんでした。 AWS documentaitonはこれを文書化していません。これは主にAmazon Linux 2ではなく、Amazon Linux 1に基づいているためです。

3
Marcin