amazon-web-services - AWS Elastic Beanstalk 中的多容器 Docker 配置无法正确报告增强的运行状况概述
问题描述
我上传了一个项目,其中multi-containers docker platform
包含两个容器xyz
,例如abc
. 其中包含tomcat服务器。我的项目中有以下配置文件。aws elastic-beanstalk
xyz
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,
.
.
.
}
]
}
到目前为止,我为解决此问题所做的工作:
- 我阅读了(https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/health-enhanced-serverlogs.html)并了解到弹性 beantalk 具有特殊的日志记录格式,可以让多容器运行状况页面正常工作。
- 为了测试建议,我通过访问 ec2 实例手动创建了相同格式的错误日志文件。我在 ec2 实例主机的位置(健康代理读取日志的位置)创建的文件也正确映射到docker 容器中
/var/log/containers/xyz
的 tomcat 日志文件的位置(即/usr/local/tomcat/logs
) 。xyz
但是,我仍然看不到增强的健康概览部分的变化。
解决方案
从此AWS 支持站点:
在Elastic Beanstalk 控制台中,验证是否启用了增强的运行状况报告:
- 选择Configuration,然后在Web Tier下的Health面板上,选择编辑齿轮。
- 在Health Reporting下,确保System type设置为Enhanced。
运行 Node.js 平台的 64 位 Amazon Linux 2016.xx vx.xx:
确保配置了正确的代理服务器:
选择Configuration,然后在Web Tier下的Software Configuration面板上,选择编辑齿轮。
在Container Options中,确保您选择了代理服务器。如果 Proxy server 设置为none,则不会在下生成应用程序日志文件,
/var/log/nginx/healthd/
并且运行状况报告不会生成要显示的数据。您还可以修改 Node.js 日志和位置以与增强的健康日志格式兼容,然后查看
healthd
配置文件/etc/healthd/config.yaml
。运行多容器 Docker 2.xx.x 的 64 位 Amazon Linux 2016.xx vx.xx:
该平台不附带代理服务器,因此您需要确保从其容器中以正确的格式生成日志并配置
healthd
为读取它们。要在多容器 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代码显示了如何管理
healthd
配置设置为读取另一个目录的 ebextensions。[...]
我认为这部分可能会对您有所帮助:
如果您无法在增强的运行状况概览中查看服务器信息,请检查
healthd
实例上的服务状态并确保其正在运行。如果它没有运行,请重新启动服务。此示例代码显示了如何检查 healthd 服务状态:
$ ps aux | grep healthd
此示例代码显示了如何重新启动
healthd
服务:
[ec2-user@ip-172-31-39-182 ~]$ sudo initctl restart healthd
推荐阅读
- javascript - 打字稿错误 - 类型“字符串 []”不能用作索引类型
- java - 使用 javax.xml.stream.XMLStreamReader 时如何启用非 IANA 编码
- reactjs - 反应日选择器是否有时间选择?
- c++ - 如果带有 char 数组的语句无法正常工作
- c++ - C++ 构造函数和 D'tor 中的类
- corda - 是否有可能在 Corda 的 2 个不同的网络中?
- algorithm - 从全局排序顺序对 N 个不同列表进行排序的算法
- python - Kivy 时钟问题(每次都会加倍)
- html - 嵌入 YouTube 视频时可以防止 AdBlock 错误吗?
- java - spring项目资源导入问题