如何将特定的日志文件从多容器Docker Elastic Beanstalk流到CloudWatch?

soa*_*gem 7 logging amazon-web-services amazon-cloudwatch docker amazon-elastic-beanstalk

我将一个Web服务部署到运行Docker Multi-Container堆栈的Elastic Beanstalk环境中。我已在该环境上启用了到CloudWatch的日志流,因此Cloudwatch中显示了大约五个不同的日志组,因此,当我从Beanstalk中单击“请求日志”时,它将加载一个网页,向我显示所有日志文件,一个接一个。我注意到该网页上的某些日志在CloudWatch中没有显示为日志组,而这些是我真正关心的日志。我的问题是如何使它们显示为CloudWatch Log Groups?

特别地,Elastic Beanstalk自动为我创建的五个日志组是:

  • /aws/elasticbeanstalk/my-web-service/var/log/docker-events.log
  • /aws/elasticbeanstalk/my-web-service/var/log/eb-activity.log
  • /aws/elasticbeanstalk/my-web-service/var/log/eb-ecs-mgr.log
  • /aws/elasticbeanstalk/my-web-service/var/log/ecs/ecs-agent.log
  • /aws/elasticbeanstalk/my-web-service/var/log/ecs/ecs-init.log

当我查看“请求日志”时生成的文件时,那五个确实存在。但是这些其他日志文件也表示为:

  • /aws/elasticbeanstalk/my-web-service/var/log/awslogs.log
  • / aws / elasticbeanstalk / my-web-service / var / log / docker
  • /aws/elasticbeanstalk/my-web-service/var/log/docker-ps.log
  • /aws/elasticbeanstalk/my-web-service/var/log/eb-commandprocessor.log
  • /aws/elasticbeanstalk/my-web-service/var/log/containers/my-svc-8edcf9cec583-stdouterr.log

我真正感兴趣的是最后一个,以stdouterr.log结尾的那个。那是我的容器化应用程序将所有日志消息写入的地方。我想看到的是CloudWatch中的一个日志组,它对应于该stdouterr.log文件。据我所知,日志文件名中的12位ID是安装在主机上的Docker映像的ID,并且每次重新启动服务器时都会更改。所以我想我可能需要在Dockerrun.aws.json配置中挂载一个卷或类似的卷?此外,我猜想我是否需要手动将日志组添加到CloudWatch?如何显示此文件?

Ste*_*hen 8

看起来您当前只有默认日志发送到Cloudwatch日志。您可以通过以下方式将其他日志添加到cloudwatch代理:.ebextensions

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

资源

  • 弄清楚了-实例配置文件角色无权推送到Cloudwatch。当我添加时,它开始工作。谢谢! (3认同)
  • 始终具有权限!:) (2认同)