繁体   English   中英

对于 AWS Elastic Beanstalk 中的多容器 Docker 配置,增强型运行状况概览未正确报告

[英]Enhanced Health Overview not reporting properly for Multi-container Docker configuration in AWS Elastic Beanstalk

我上传了一个具有multi-containers docker platform的项目,其中两个容器在aws elastic-beanstalk中说xyzabc xyz包含 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 的健康部分中的数据。
在此处输入图片说明

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

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

但是,我仍然看不到增强健康概览部分的变化。

这个 AWS 支持站点

Elastic Beanstalk 控制台,验证增强的运行状况报告已启用:

  1. 选择Configuration ,然后在Web Tier下的Health面板上,选择编辑齿轮。
  2. Health Reporting 下,确保将System type设置为Enhanced

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

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

  1. 选择Configuration ,然后在Web Tier下的Software Configuration面板上,选择编辑齿轮。

  2. Container Options 中,确保您选择了代理服务器 如果代理服务器设置为none ,则不会在/var/log/nginx/healthd/下生成应用程序日志文件,并且健康报告不会生成要显示的数据。

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

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

该平台不附带代理服务器,因此您需要确保从其容器中以正确格式生成日志,并配置healthd以读取它们。 要在多healthd Docker 环境中使用增强的健康监控,您需要配置healthd以使用这些日志。

要将日志提供给运行状况代理,请确保以下各项:

  • 日志格式正确

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

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

  • 日志每小时轮换一次

  • 日志不会被截断

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

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

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

如果您无法在 Enhanced Health Overview 中看到服务器的信息,请检查实例上的healthd服务状态并确保它正在运行。 如果它没有运行,请重新启动该服务。

此示例代码显示了如何检查 healthd 服务状态:

$ ps aux | grep healthd

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

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

除了@char 的回答,特别是针对多容器 docker 环境,您需要挂载日志位置,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 awseb-logs-nginx-proxyawseb-logs-<container_name>

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM