目前使用亚马逊网络服务,我成功地在 Elastic Beanstalk(具有绿色集群健康)上将多个应用程序部署为 Docker 容器。
但是,当我尝试使用控制台获取日志时,问题出现了;当我“请求日志”时,找不到任何日志。当我在请求日志后返回仪表板时,出现了一个新事件/错误:
[实例:i-123456789] 实例上的命令失败。返回代码:1 输出:bundleLogs.py --conf-path '/opt/elasticbeanstalk/tasks/bundlelogs.d/*' --location-prefix 'resources/environments/logs/bundle/' 无法在任何目标对象上执行方法 publish_contents_from_filename。有关更多详细信息,请使用控制台或 EB CLI 检查 /var/log/eb-activity.log。
为了解决这个问题,我通过 SSH 进入我的集群并使用以下命令将日志放入我的 Docker 容器中:
sudo docker exec myinstance cat /var/log/logstash_activity.log
我的日志符合预期。
为了了解有关错误的更多信息,我查看了 /var/log/eb-activity.log 并发现了以下几行:
[2015-07-06T12:54:30.137Z] INFO [26993] - [CMD-BundleLogs] : Starting activity...
[2015-07-06T12:54:30.363Z] INFO [26993] - [CMD-BundleLogs/AddonsBefore] : Starting activity...
[2015-07-06T12:54:30.363Z] INFO [26993] - [CMD-BundleLogs/AddonsBefore] : Completed activity.
[2015-07-06T12:54:30.363Z] INFO [26993] - [CMD-BundleLogs/BundleLogs] : Starting activity...
[2015-07-06T12:54:30.364Z] INFO [26993] - [CMD-BundleLogs/BundleLogs/BundleLogs] : Starting activity...
[2015-07-06T12:54:30.627Z] INFO [26993] - [CMD-BundleLogs/BundleLogs/BundleLogs] : Activity execution failed, because: bundleLogs.py --conf-path '/opt/elasticbeanstalk/tasks/bundlelogs.d/*' --location-prefix 'resources/environments/logs/bundle/'
Unable to execute method publish_contents_from_filename on any of the target objects (Executor::NonZeroExitStatus)
[2015-07-06T12:54:30.627Z] INFO [26993] - [CMD-BundleLogs/BundleLogs/BundleLogs] : Activity failed.
[2015-07-06T12:54:30.627Z] INFO [26993] - [CMD-BundleLogs/BundleLogs] : Activity failed.
[2015-07-06T12:54:30.627Z] INFO [26993] - [CMD-BundleLogs] : Completed activity. Result:
Command CMD-BundleLogs failed.
然而错误信息并没有给我带来太大的帮助。
在我的 Dockerrun.aws.json 的“Logging”字段中,我给出了路径“/var/log”,因为它是包含我的应用程序日志等的文件夹。我还尝试了值“/var/log/logstash_activity.log”,但没有成功。
为什么 Beanstalk 控制台找不到我的应用程序的日志?
答案1
老问题了,但我刚刚为我们的应用程序想出了这个。您使用什么用户策略?如果您使用只读,默认策略“AWSElasticBeanstalk只读访问” 不包括日志下载功能。在 AWS 文档中,有一个 IAM 策略示例,可以为用户创建该策略以启用此功能。
看http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/AWSHowTo.iam.managed-policies.html在“创建自定义用户策略”下。最后的示例显示了需要在 ReadOnlyAccess 策略中已提供的权限之上授予的 S3 权限,以便捆绑和下载日志。
答案2
遗憾的是,现有的答案对我没有多大帮助。这仍然与 S3 权利有关。
我必须将实例权限调整到以下状态,然后它才起作用
{
"Sid": "AllowS3ForEBLogs",
"Action": [
"s3:Get*",
"s3:List*",
"s3:PutObject"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::elasticbeanstalk-*",
"arn:aws:s3:::elasticbeanstalk-*/resources/environments/logs/*"
]
}
我的灵感来自这。