Elastic Beanstalk:Amazon Linux 2 平台上的日志任务自定义

lbr*_*uun 11 linux amazon-web-services docker amazon-elastic-beanstalk

我想知道如何在新的 Elastic Beanstalk 平台(基于 Amazon Linux 2 的平台)中进行日志任务自定义。具体来说,我正在比较:

  • :在 64 位 Amazon Linux/2.14.3 上运行的单容器 Docker
  • 新功能:在 64 位 Amazon Linux 2/3.0.0 上运行的单容器 Docker

(我的问题实际上与 Docker 无关,我推测任何新的 Elastic Beanstalk 平台都存在问题)。

以前我可以按照亚马逊的配方,意思是把一个文件放进/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"]
Run Code Online (Sandbox Code Playgroud)

Dockerrun.aws.json

{
  "AWSEBDockerrunVersion": "1",
  "Logging": "/var/mydaemon"
}
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

.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
Run Code Online (Sandbox Code Playgroud)

如果我做旧的平台上“全日志”行动我会得到我的一个ZIPdeeperlogs包括里面var/log/eb-docker/containers/eb-current-app。在新平台上我没有。

调查

如果您查看磁盘,您会发现新的 Elastic Beanstalk 根本没有/opt/elasticbeanstalk/tasks文件夹,与旧的不同。唔。

lbr*_*uun 0

Amazon 已在2020 年 8 月 4 日发布的Elastic Beanstalk AL2 平台版本中修复了此问题。

它已得到修复,因此基于 AL2 的平台上的日志任务自定义现在可以按照其一贯的方式工作(即在预生成的 AL2018 平台上),因此您可以按照官方文档来实现这一点。

已成功测试平台“Docker running on 64bit Amazon Linux 2/3.1.0”。如果您(仍然)使用“在 64 位 Amazon Linux 2/3.0.x 上运行的 Docker” ,那么您必须使用Marcin 的答案中描述的未记录的解决方法,但升级平台版本可能会更好。