Получение журналов приложений. Команда не выполнена в экземпляре
В настоящее время, используя веб-сервисы Amazon, я успешно развернул несколько приложений на Elastic Beanstalk (с зеленым состоянием кластера) в виде контейнеров Docker.
Проблема, однако, возникает, когда я пытаюсь получить логи с консоли; когда я делаю "запрос журналов", журнал не найден. Когда я возвращаюсь на панель управления после запроса журналов, появляется новое событие / ошибка:
[Экземпляр: i-123456789] Сбой команды в экземпляре. Код возврата: 1 Вывод: bundleLogs.py --conf-path '/opt/elasticbeanstalk/tasks/bundlelogs.d/*' --location-prefix 'resources/ Environment /logs/bundle/' Невозможно выполнить метод publish_contents_from_filename для любого целевых объектов. Для более подробной информации, проверьте /var/log/eb-activity.log, используя консоль или EB CLI.
Пытаясь решить проблему, я подключился к своему кластеру по 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.
Однако сообщение об ошибке мне не сильно помогло.
В поле "Logging" моего Dockerrun.aws.json я указал путь "/var/log", поскольку именно эта папка, среди прочего, содержит журналы моего приложения. Я также попробовал значение "/var/log/logstash_activity.log" без особого успеха.
Почему консоль Beanstalk не может найти логи моих приложений?
2 ответа
Старый вопрос, но я только что понял это для наших приложений. Какую политику пользователя вы используете? Если вы используете ReadOnly, политика по умолчанию "AWSElasticBeanstalkReadOnlyAccess" не включает возможность загрузки журнала. В документации aws приведен пример политики IAM, которую пользователь может создать для включения этой функции.
См. http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/AWSHowTo.iam.managed-policies.html разделе "Создание пользовательской политики пользователя". В последнем примере показаны необходимые разрешения S3, которые необходимо предоставить поверх того, что уже предоставлено в политике ReadOnlyAccess, для объединения и загрузки журналов.
К сожалению, существующий ответ мне не сильно помог. Это все еще было связано с правами S3.
Я должен был настроить права экземпляра на следующее, и это сработало
{
"Sid": "AllowS3ForEBLogs",
"Action": [
"s3:Get*",
"s3:List*",
"s3:PutObject"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::elasticbeanstalk-*",
"arn:aws:s3:::elasticbeanstalk-*/resources/environments/logs/*"
]
}
Мое вдохновение было этим.