如何访问Google AppEngine托pipe虚拟机日志?

我正在尝试Google AppEngine的托pipe虚拟机testing版,当它在我的IDE中使用AppEngine dev服务器在本地运行时,似乎无法使其与mvn appengine:gcloud_app_run一起运行。

我始终如一地得到:

 "[INFO] INFO: default: "GET /_ah/health?IsLastSuccessful=no HTTP/1.1" 503 298" 

因此需要访问docker容器中输出的日志来诊断503。

我已经在appengine-maven-pluginconfiguration部分中使用以下行来激活日志logging(在IDE中工作良好)。

 <gcloud_app_enable_mvm_logs>true</gcloud_app_enable_mvm_logs> 

然后我尝试访问docker容器中的日志:

 ➜ ~ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 76369bc9b773 heimdall-dev.default.1:latest "/home/vmagent/jetty 5 seconds ago Up 4 seconds 0.0.0.0:49174->8080/tcp google.appengine.heimdall-dev.default.1.0.2014-11-13T210256.776274Z ➜ ~ docker logs 76369bc9b773 Info: Limiting Java heap size to: 1456M Java HotSpot(TM) 64-Bit Server VM warning: ignoring option PermSize=64M; support was removed in 8.0 Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=166M; support was removed in 8.0 2014-11-13 21:02:59.384:INFO::main: Logging initialized @372ms 2014-11-13 21:02:59.487:INFO::main: Redirecting stderr/stdout to /var/log/app_engine/STDERR.2014_11_13.log//var/log/app_engine/STDOUT.2014_11_13.log 

所以我希望日志文件能够“奇迹般地”映射到本地机器上的本地/var文件夹(即在Docker容器之外),但似乎并不是这样:

 ➜ ~ tail -f /var/log/app_engine/STDERR.2014_11_13.log tail: /var/log/app_engine/STDERR.2014_11_13.log: No such file or directory ➜ ~ tail -f /var/log/app_engine/STDOUT.2014_11_13.log tail: /var/log/app_engine/STDOUT.2014_11_13.log: No such file or directory 

这样做是正确的吗? 如果是的话,我错过了什么? 否则,访问日志的正确方法是什么?

PS:我也尝试用docker attach 76369bc9b773 ssh进入docker attach 76369bc9b773容器,但是这一直给我一个错误。

PS2:我的应用程序是基于Java 8的“基本”Spring MVC + Security + Social + DataJPA,所以我猜想在IDE + GAE Dev Server中不会发生bean初始化的问题

PS3:我跟着教程在这里: https : //github.com/GoogleCloudPlatform/appengine-java-vm-guestbook-extras并得到阶段3与mvn appengine:gcloud_app_run正常运行mvn appengine:gcloud_app_run

PS4:为了使我的应用程序在IDE中运行,因为我使用的是Spring MVC,所以我必须实现我自己的/_ah/start端点(启发来自Google App Engine本地后端错误和GAE上使用Spring3 MVC + Maven2的无映射 )但我不确定这是否是正确的做法

PS5:我看了一下在8000端口上运行的pipe理控制台,其中的日志与shell中的日志相同(即HTTP 503消息没有多less内容)

我终于设法使用docker的卷来访问appengine虚拟机的日志。 浏览python代码后,黑客入侵google-cloud-sdk的文件。

但是,由于我正在使用Mac OS X,所以在OS和Docker之间的VirtualBox层需要一些额外的东西,如下所述: http : //viget.com/extend/how-to-use-docker-在-OS-X-的缺失引导

所以,下面是我跑的命令。

1 – 必要时停止所有docker集装箱:

 ➜ ~ docker stop $(docker ps -a -q) 

2 – 如有必要,移除所有docker集装箱:

 ➜ ~ docker rm $(docker ps -a -q) 

3 – 停止boot2docker VirtualBox VM:

 ➜ ~ boot2docker down 

4 – 创build你想要在本地机器上映射的目录(确保它是你有读/写权限的地方,而不需要sudo ):

 ➜ ~ mkdir -p ~/var/log/app_engine 

5 – 将目录挂载到boot2docker VirtualBox VM中:

 ➜ ~ VBoxManage sharedfolder add boot2docker-vm -name var -hostpath ~/var/log/app_engine 

6 – 启动boot2docker VirtualBox VM:

 ➜ ~ boot2docker up 

7 – 编辑文件google-cloud-sdk / platform / google_appengine / google / appengine / tools / devappserver2 / vm_runtime_proxy.py

 265 external_logs_path = os.path.join( 266 '/var/log/app_engine', 267 self._escape_domain( 

与path到共享文件夹,在我的情况:

 265 external_logs_path = os.path.join( 266 '/Users/nicolas/var/log/app_engine', 267 self._escape_domain( 

8 – 运行应用程序:

 ➜ ~ mvn appengine:gcloud_app_run 

9 – 检查日志是否存在:

 ➜ ~ ls ~/var/log/app_engine/heimdall-dev/default/1/0/ STDERR.2014_11_16.log STDOUT.2014_11_16.log app.0.log.json app.0.log.json.1 app.0.log.json.1.lck app.0.log.json.2 app.0.log.json.2.lck app.0.log.json.lck request.2014_11_16.log 

不完全简单和容易…

必须可以通过更改权限来使默认的/var/mog/app_engine本地文件夹可用于VirtualBox虚拟机,因此不需要攻击google-cloud-sdk python文件。 但是,我还没有时间来testing呢。 当我testing时,我会更新答案。

就像你最初的答案@Nicolas的完成,我已经创build了一个小的shell脚本

  1. build立项目
  2. 启动docker
  3. 启动将显示最新日志的控制台
  4. 启动gcloud preview app命令

我现在正在和你分享.sh文件:

 #!/bin/sh mvn clean install #build via MAVEN boot2dockerstatus=$( boot2docker status ) echo $boot2dockerstatus if [ $boot2dockerstatus != 'running' ] then boot2docker start boot2docker status fi open http://localhost:8080 #ADD logs debugging on a separate window (MacOSx only) !! osascript -e 'tell app "Terminal" do script "cd /var/log/app_engine/; tail -F *.log" end tell' gcloud --verbosity debug preview app run --enable-mvm-logs "./target/<your-project-build-name-here>"