对于 64 位 Amazon Linux 2,设置略有不同。
为了传送日志,AWS CloudWatch 代理安装在 /opt/aws/amazon-cloudwatch-agent 中,Elastic Beanstalk 配置在 /opt/aws/amazon-cloudwatch-agent/etc/beanstalk.json 中。假设有一个名为 stdouterr.log 的文件,它被设置为记录容器的输出,这是配置的 sn-p:
{
"file_path": "/var/log/eb-docker/containers/eb-current-app/stdouterr.log",
"log_group_name": "/aws/elasticbeanstalk/EB-ENV-NAME/var/log/eb-docker/containers/eb-current-app/stdouterr.log",
"log_stream_name": "{instance_id}"
}
但是,当我查找 file_path 时,它并不存在,而是我有一个文件路径来编码当前 docker 容器 ID /var/log/eb-docker/containers/eb-current-app/eb-e4e26c0bc464-stdouterr.log。
这个日志文件是由eb-docker-log服务启动的脚本/opt/elasticbeanstalk/config/private/eb-docker-log-start创建的,这个文件的默认内容是:
EB_CONFIG_DOCKER_CURRENT_APP=`cat /opt/elasticbeanstalk/deployment/.aws_beanstalk.current-container-id | cut -c 1-12`
mkdir -p /var/log/eb-docker/containers/eb-current-app/
docker logs -f $EB_CONFIG_DOCKER_CURRENT_APP >> /var/log/eb-docker/containers/eb-current-app/eb-$EB_CONFIG_DOCKER_CURRENT_APP-stdouterr.log 2>&1
要临时修复日志记录,您可以手动运行(替换 docker ID),然后日志将开始出现在 CloudWatch 中:
ln -sf /var/log/eb-docker/containers/eb-current-app/eb-e4e26c0bc464-stdouterr.log /var/log/eb-docker/containers/eb-current-app/stdouterr.log
为了使这个永久存在,我添加了一个.ebextension 来修复eb-docker-log 服务,因此它重新创建了这个链接,因此在.ebextensions 的源代码中创建一个名为fix-cloudwatch-logging.config 的文件并将其内容设置为:
files:
"/opt/elasticbeanstalk/config/private/eb-docker-log-start" :
mode: "000755"
owner: root
group: root
content: |
EB_CONFIG_DOCKER_CURRENT_APP=`cat /opt/elasticbeanstalk/deployment/.aws_beanstalk.current-container-id | cut -c 1-12`
mkdir -p /var/log/eb-docker/containers/eb-current-app/
ln -sf /var/log/eb-docker/containers/eb-current-app/eb-$EB_CONFIG_DOCKER_CURRENT_APP-stdouterr.log /var/log/eb-docker/containers/eb-current-app/stdouterr.log
docker logs -f $EB_CONFIG_DOCKER_CURRENT_APP >> /var/log/eb-docker/containers/eb-current-app/eb-$EB_CONFIG_DOCKER_CURRENT_APP-stdouterr.log 2>&1
commands:
fix_logging:
command: systemctl restart eb-docker-log.service
cwd: /home/ec2-user
test: "[ ! -L /var/log/eb-docker/containers/eb-current-app/stdouterr.log ] && systemctl is-active --quiet eb-docker-log"