Ruby on rails 为什么Elastic Beanstalk在部署时删除应用程序日志
我们使用Rails应用程序运行Elastic Beanstalk(64位Amazon Linux 2016.09 v2.3.1,运行Ruby 2.3(Puma)) 应用程序日志正在写入与标准类似的Ruby on rails 为什么Elastic Beanstalk在部署时删除应用程序日志,ruby-on-rails,linux,amazon-web-services,amazon-elastic-beanstalk,Ruby On Rails,Linux,Amazon Web Services,Amazon Elastic Beanstalk,我们使用Rails应用程序运行Elastic Beanstalk(64位Amazon Linux 2016.09 v2.3.1,运行Ruby 2.3(Puma)) 应用程序日志正在写入与标准类似的/var/apps/current/log/production.rb。作为EB的标准配置,该文件被符号链接到/var/apps/containerfiles/logs/,用于循环和上传到S3 出于某种原因,production.log似乎在我们每次部署eb时都会被覆盖或截断,这似乎是无意的 我们是否对
/var/apps/current/log/production.rb。作为EB的标准配置,该文件被符号链接到/var/apps/containerfiles/logs/
,用于循环和上传到S3
出于某种原因,production.log
似乎在我们每次部署eb
时都会被覆盖或截断,这似乎是无意的
我们是否对某些内容进行了错误配置,以及您建议我们如何进行调试?我们得出了一个(可能很明显的)结论,即EB部署没有日志魔法。它只需替换/var/apps/current/
目录,包括/var/apps/current/log
。从而删除所有现有日志
因此,我们的解决方案是将日志放在一个单独的文件夹中,并修补EB以了解日志的放置位置。通过覆盖app_log_dir
(/var/app/containerfiles/logs/
)中的production.log
符号链接,我们仍然依赖EB的正常程序进行轮换并发布到S3
.ebextensions/log rotation.config
files:
"/opt/elasticbeanstalk/hooks/appdeploy/pre/01a_override_log_symlinks.sh":
mode: "000777"
content: |
#!/bin/bash
EB_APP_LOG_DIR=$(/opt/elasticbeanstalk/bin/get-config container -k app_log_dir)
CUSTOM_APPLOG_DIR=/var/log/applog
mkdir -p $CUSTOM_APPLOG_DIR
chown webapp $CUSTOM_APPLOG_DIR
chmod 777 $CUSTOM_APPLOG_DIR
cd $EB_APP_LOG_DIR
ln -sf $CUSTOM_APPLOG_DIR/production.log production.log
ln -sf $CUSTOM_APPLOG_DIR/development.log development.log
/config/environments/production.rb
...
# Specific for Rails 5!
config.paths['log'] = "/var/log/applog/#{Rails.env}.log"
...
我们得出了一个(也许是显而易见的)结论,即EB部署没有日志魔法。它只需替换/var/apps/current/
目录,包括/var/apps/current/log
。从而删除所有现有日志
因此,我们的解决方案是将日志放在一个单独的文件夹中,并修补EB以了解日志的放置位置。通过覆盖app_log_dir
(/var/app/containerfiles/logs/
)中的production.log
符号链接,我们仍然依赖EB的正常程序进行轮换并发布到S3
.ebextensions/log rotation.config
files:
"/opt/elasticbeanstalk/hooks/appdeploy/pre/01a_override_log_symlinks.sh":
mode: "000777"
content: |
#!/bin/bash
EB_APP_LOG_DIR=$(/opt/elasticbeanstalk/bin/get-config container -k app_log_dir)
CUSTOM_APPLOG_DIR=/var/log/applog
mkdir -p $CUSTOM_APPLOG_DIR
chown webapp $CUSTOM_APPLOG_DIR
chmod 777 $CUSTOM_APPLOG_DIR
cd $EB_APP_LOG_DIR
ln -sf $CUSTOM_APPLOG_DIR/production.log production.log
ln -sf $CUSTOM_APPLOG_DIR/development.log development.log
/config/environments/production.rb
...
# Specific for Rails 5!
config.paths['log'] = "/var/log/applog/#{Rails.env}.log"
...
您的部署和更新策略是什么?也许EB会创建具有新版本的新实例,当部署成功时,它会删除具有以前版本的旧实例。当您进入特定的EB应用程序>配置>更新和部署时,您可以检查部署和更新策略。@nicq我们使用的是滚动部署。我们最终的解决方案是将日志放在当前文件夹之外,因为似乎所有内容都被覆盖了。我将在下面提交答案您的部署和更新策略是什么?也许EB会创建具有新版本的新实例,当部署成功时,它会删除具有以前版本的旧实例。当您进入特定的EB应用程序>配置>更新和部署时,您可以检查部署和更新策略。@nicq我们使用的是滚动部署。我们最终的解决方案是将日志放在当前文件夹之外,因为似乎所有内容都被覆盖了。我将在下面提交一个答案777的许可不是有点极端吗?0664不是更安全吗?777的许可不是有点极端吗?0664不是更安全吗?