增强的运行状况概述无法针对AWS Elastic Beanstalk中的多容器Docker配置正确报告

时间:2019-03-28 14:45:40

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

我上传了一个项目,该项目包含multi-containers docker platform,在xyz中有两个容器,分别是abcaws elastic-beanstalkxyz包含tomcat服务器。我的项目中有Dockerrunner.aws.json文件的以下配置。

{
  "AWSEBDockerrunVersion": 2,
  "containerDefinitions": [
    {
      "name": "xyz",
      "image": "<PLACEHOLDER_REPLACED_BY_CICD_TOOLS>",
      "essential": true,
      "memory": 2048,
      "links": [
        "abc"
      ],
      "environment": [
        {
          "name": "ENVIRONMENT",
          "value": "QA"
        },
        {
          "name": "LOG_HOME",
          "value": "/usr/local/tomcat/logs"
        },
        .
        .
        .
      ],
      "mountPoints": [
        {
          "sourceVolume": "awseb-logs-xyz",
          "containerPath": "/usr/local/tomcat/logs"
        }
      ],
      .
      .
    },
    {
      "name": "abc",
      "image": "image123",
      "essential": true,
      .
      .
      .
    }
  ]
}

但是,我无法在Elastic-Beanstalk的“健康”部分中查看数据。
enter image description here

到目前为止,我为解决此问题所做的事情:

  • 我阅读了{https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/health-enhanced-serverlogs.html),并知道弹性beantalk具有特殊的日志记录格式,可以使多容器健康页正常工作。
  • 为了进行测试,我通过访问ec2实例以相同的格式手动创建了一个错误日志文件。我在ec2实例主机中位置/var/log/containers/xyz(运行状况代理读取日志的位置)中创建的文件也已正确映射到/usr/local/tomcat/logs Docker容器中tomcat日志文件的位置(即xyz)。 / li>

但是,我仍然看不到“增强健康概述”部分中的更改。

2 个答案:

答案 0 :(得分:0)

来自this AWS support site

  

Elastic Beanstalk console中,确认已启用增强健康报告:

     
      
  1. 选择配置,然后在 Web层下的运行状况面板上,选择编辑齿轮。
  2.   
  3. 运行状况报告下,确保将系统类型设置为增强
  4.   
     

运行Node.js平台的64位Amazon Linux 2016.xx vx.x.x:

     

确保配置了正确的代理服务器:

     
      
  1. 选择配置,然后在 Web层下的软件配置面板上,选择编辑齿轮。

  2.   
  3. 容器选项中,确保已选择代理服务器。   如果代理服务器设置为,则不会在/var/log/nginx/healthd/下生成应用程序日志文件,并且运行状况报告也不会生成要显示的数据。

  4.   
     

您还可以修改Node.js日志和位置以使其与增强的运行状况日志格式兼容,然后查看healthd配置文件/etc/healthd/config.yaml

     

运行Multicontainer Docker 2.xx.x的64位Amazon Linux 2016.xx vx.x.x:

     

此平台未随附代理服务器,因此您需要确保从其容器中以正确的格式生成日志,并将healthd配置为读取它们。要在Multicontainer Docker环境中使用增强的运行状况监视,您需要配置healthd来使用这些日志。

     

要向运行状况代理提供日志,请确保以下内容:

     
      
  • 日志格式正确

  •   
  • 日志被写入/var/log/nginx/healthd/

  •   
  • 日志名称使用以下格式:application.log.$year-$month-$day-$hour

  •   
  • 日志每小时旋转一次

  •   
  • 日志不会被截断

  •   
     

注意:在Node.js平台上,如果禁用代理,则不会在/var/logs/nginx/healthd/下创建日志。您必须重新启用代理或配置您的Node.js应用程序以在/var/logs/nginx/healthd/

下生成日志      

此示例Docker-multicontainer-v2.zip代码展示了如何管理ebextensions,其中healthd配置被设置为读取另一个目录。 [...]

我认为这部分可以为您提供帮助:

  

如果在“增强健康状况概述”中看不到服务器的信息,请检查实例上的healthd服务状态并确保其正在运行。如果它没有运行,请重新启动服务。

     

此示例代码显示了如何检查运行状况良好的服务:

     

$ ps aux | grep healthd

     

以下示例代码显示了如何重新启动healthd服务:

     

[ec2-user@ip-172-31-39-182 ~]$ sudo initctl restart healthd

答案 1 :(得分:0)

除了@char's answer(专门用于多容器docker环境)之外,您还需要mount the log location,EB会自动处理其余的工作:

Elastic Beanstalk在容器实例上创建日志卷,一个 对于每个Docker容器,位于/ var / log / containers / containername。这些 卷被命名为awseb-logs-containername,应挂载到 容器文件结构中日志所在的位置

这是多容器docker示例:

{
  "name": "nginx-proxy",
  "image": "nginx:alpine",
  "essential": true,
  "memoryReservation": 8,
  "mountPoints": [{
    "sourceVolume": "awseb-logs-nginx-proxy",
    "containerPath": "/var/log/nginx"
  }],
  "portMappings": [{
    "hostPort": 80,
    "containerPort": 80
  }]
}

密钥是mountPoint的{​​{1}} awseb-logs-nginx-proxy

这已正确记录在OP的配置中,但这是我所缺少的部分,它是总答案的一部分。