我想知道如何做 日志任务自定义 在新的Elastic Beanstalk平台(基于Amazon Linux 2的那个平台)。具体来说,我在比较。
(我的问题其实与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
如果我在旧平台上进行 "完整日志 "操作,我将得到一个包含我的 deeperlogs
内含 var/log/eb-docker/containers/eb-current-app
. 在新平台上,我不。
如果你在磁盘上查看,你会发现新的Elastic Beanstalk没有一个 /opt/elasticbeanstalk/tasks
文件夹,不像以前那样。嗯。
在Amazon Linux 2上,文件夹是。
/opt/elasticbeanstalk/config/private/logtasks/bundle
The .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
The mydaemon-logfiles.config
还增加 deeperlogs
变成 applogs
文件。没有它 deeperlogs
不会被包含在下载日志的压缩包中。这就很有意思了,因为该文件夹将在正确的位置,即, /var/log/eb-docker/containers/eb-current-app/deeperlogs/
. 但是,如果没有明确地列在 applogs
当生成zip bundle时,它将被跳过。
我在单个docker环境(3.0.1)中进行了测试。
完整的日志捆绑成功包含 deeperlogs
与正确的日志数据。
希望这能帮到你 我没有找到任何相关的参考资料。AWS的文档并没有记录这个,因为它主要是基于Amazon Linux 1,而不是Amazon Linux 2。