Elastic Beanstalk单容器Docker - 使用awslogs日志记录驱动程序

时间:2017-02-01 12:05:46

标签: amazon-web-services logging docker elastic-beanstalk

我正在使用Single Container Docker Configuration在Elastic Beanstalk上运行单个Docker容器,并尝试使用awslogs logging driver将应用程序stdout发送到CloudWatch。

EB查找Dockerrun.aws.json文件来配置容器,但据我所知,没有选项可以使用awslogs作为容器的日志记录驱动程序(或者向{添加任何其他标志) {1}}命令就此而言。)

我尝试使用[{3}}提供的答案,通过添加内容为docker run的文件来攻击docker run命令:

.ebextensions/01-commands.config

从某种意义上说,它可以修改运行脚本,并且日志会显示在CloudWatch中。

但EB申请已经死亡。容器已启动,但不响应请求。

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

  

“logs”命令仅支持“json-file”和“journald”日志记录   司机(得到:awslogs)

我找到了与ECS(非EB)相关的类似问题的答案,建议使用awslogs附加ECS_AVAILABLE_LOGGING_DRIVERS。但我没有在EB中找到此配置设置。

有什么想法吗?

2 个答案:

答案 0 :(得分:17)

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

  

由于Elastic Beanstalk Single Container环境将保存标准输出   和/ var / log / eb-docker / containers / eb-current-app /中的stderr   默认情况下,并且新的解决方案堆栈允许您选择流式传输   登录到cloudwatch,自动配置AWSLogs代理   在实例上,我建议做的是添加一个ebextension   将stdout和stderr日志文件添加到cloudwatch配置中   并使用已配置的代理将这些文件流式传输到   cloudwatch日志。而不是触摸预钩,这也不是   由AWS支持,因为钩子可能会从解决方案堆栈版本更改为   另一个。

     

关于您所看到的错误" logs"命令仅受支持   为" json-file"和" journald"记录驱动程序(got:awslogs)"这个   错误来自docker的工作方式,配置为将日志发送到   json-file或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

答案 1 :(得分:6)

我能够扩展多容器弹性beanstalk环境的前一个答案以及注入环境名称。我必须在ec2角色中授予正确的权限才能创建日志组。您可以通过查看来查看它是否正常工作:

/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