[英]Enhanced Health Overview not reporting properly for Multi-container Docker configuration in AWS Elastic Beanstalk
我上传了一个具有multi-containers docker platform
的项目,其中两个容器在aws elastic-beanstalk
中说xyz
和abc
。 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 的健康部分中的数据。
到目前为止,我为解决此问题所做的工作:
/var/log/containers/xyz
(健康代理读取日志的位置)的 ec2 实例主机中创建的文件也被正确映射到xyz
docker 容器中 tomcat 的日志文件的位置(即/usr/local/tomcat/logs
) .但是,我仍然看不到增强健康概览部分的变化。
从Elastic Beanstalk 控制台,验证增强的运行状况报告已启用:
- 选择Configuration ,然后在Web Tier下的Health面板上,选择编辑齿轮。
- 在Health Reporting 下,确保将System type设置为Enhanced 。
64 位 Amazon Linux 2016.xx vx.xx 运行 Node.js 平台:
确保配置了正确的代理服务器:
选择Configuration ,然后在Web Tier下的Software Configuration面板上,选择编辑齿轮。
在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-proxy
是awseb-logs-<container_name>
。
这是在 OP 的配置中正确记录的,但这是我缺少的部分,它是总答案的一部分。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.