我上传了一个项目,该项目包含multi-containers docker platform
,在xyz
中有两个容器,分别是abc
和aws elastic-beanstalk
。 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
(运行状况代理读取日志的位置)中创建的文件也已正确映射到/usr/local/tomcat/logs
Docker容器中tomcat日志文件的位置(即xyz
)。 / li>
但是,我仍然看不到“增强健康概述”部分中的更改。
答案 0 :(得分:0)
在Elastic Beanstalk console中,确认已启用增强健康报告:
- 选择配置,然后在 Web层下的运行状况面板上,选择编辑齿轮。
- 在运行状况报告下,确保将系统类型设置为增强。
运行Node.js平台的64位Amazon Linux 2016.xx vx.x.x:
确保配置了正确的代理服务器:
选择配置,然后在 Web层下的软件配置面板上,选择编辑齿轮。
在容器选项中,确保已选择代理服务器。 如果代理服务器设置为无,则不会在
/var/log/nginx/healthd/
下生成应用程序日志文件,并且运行状况报告也不会生成要显示的数据。您还可以修改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的配置中,但这是我所缺少的部分,它是总答案的一部分。