Elastic Beanstalk单容器泊坞窗 – 使用awslogslogging驱动程序

我使用单容器Dockerconfiguration在Elastic Beanstalk上运行单个Docker容器,并尝试使用awslogs日志logging驱动程序将应用程序stdout发送到CloudWatch。

EB寻找一个Dockerrun.aws.json文件来configuration容器,但据我所见,没有select使用awslogs作为容器的日志logging驱动程序(或者添加任何其他标志到docker run命令那件事)。

我已经尝试使用这里提供的答案.ebextensions/01-commands.config docker run命令,通过添加一个文件.ebextensions/01-commands.config与内容:

 commands: add_awslogs: command: 'sudo sed -i "s/docker run -d/docker run --log-driver=awslogs --log-opt awslogs-region=eu-west-2 --log-opt awslogs-group=dockerContainerLogs -d/" /opt/elasticbeanstalk/hooks/appdeploy/enact/00run.sh' 

这是有效的,因为它会修改运行脚本,并在CloudWatch中显示日志。

但EB申请死亡。 容器已经打开,但没有回应请求。

我在容器日志中发现以下错误:

“logs”命令仅支持“json-file”和“journald”日志驱动程序(got:awslogs)

我find与ECS(而不是EB)build议追加ECS_AVAILABLE_LOGGING_DRIVERS与awslogs类似的问题的答案。 但是我在EB中找不到这个configuration。

有什么想法吗?

我在这里发布我从AWS支持收到的答案:

由于Elastic Beanstalk Single Container环境将默认情况下将stdout和stderr保存在/ var / log / eb-docker / containers / eb-current-app /中,并且由于新的解决scheme堆栈允许您将日志stream式传输到cloudwatch, AWSLogs代理在实例上的configuration,我推荐做的是添加一个ebextension来将stdout和stderr日志文件添加到cloudwatchconfiguration中,并使用已configuration的代理将这些文件传输到cloudwatch日志。 而不是触及AWS不支持的预钩子,因为钩子可能会从解决scheme堆栈版本更改为另一个。

关于错误你看到“日志”命令只支持“json文件”和“日志logging”驱动程序(得到:awslogs)“这个错误是如何docker工作,当它被configuration为发送日志到其他驱动程序旁边JSON文件或journald将无法显示本地日志,因为它没有它们的本地副本。

 ### BEGIN .ebextensions/logs.config option_settings: - namespace: aws:elasticbeanstalk:cloudwatch:logs option_name: StreamLogs value: true - namespace: aws:elasticbeanstalk:cloudwatch:logs option_name: DeleteOnTerminate value: false - namespace: aws:elasticbeanstalk:cloudwatch:logs option_name: RetentionInDays value: 7 files: "/etc/awslogs/config/stdout.conf": mode: "000755" owner: root group: root content: | [docker-stdout] log_group_name=/aws/elasticbeanstalk/environment_name/docker-stdout log_stream_name={instance_id} file=/var/log/eb-docker/containers/eb-current-app/*-stdouterr.log commands: "00_restart_awslogs": command: service awslogs restart ### END .ebextensions/logs.config 

我能够扩展以前对多容器弹性beanstalk环境的回答以及注入环境名称。 我必须授予ec2angular色的正确权限才能创build日志组。 你可以看看是否正在工作:

 /var/log/awslogs.log 

这在.ebextensions / logs.config中

 option_settings: - namespace: aws:elasticbeanstalk:cloudwatch:logs option_name: StreamLogs value: true - namespace: aws:elasticbeanstalk:cloudwatch:logs option_name: DeleteOnTerminate value: false - namespace: aws:elasticbeanstalk:cloudwatch:logs option_name: RetentionInDays value: 14 files: "/etc/awslogs/config/stdout.conf": mode: "000755" owner: root group: root content: | [/var/log/containers/docker-stdout] log_group_name=/aws/elasticbeanstalk/`{ "Ref" : "AWSEBEnvironmentName" }`/docker-stdout.log log_stream_name={instance_id} file=/var/log/containers/*-stdouterr.log commands: "00_restart_awslogs": command: service awslogs restart