4

Google AppEngine の Managed VMs Beta を試していますが、AppEngine 開発サーバーを使用して IDE でローカルに実行していますが、mvn appengine:gcloud_app_run.

私は一貫して永遠に得ます:

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

そのため、docker コンテナーに出力されたログにアクセスして、その 503 を診断する必要があります。

構成セクションで次の行を使用してログを有効にしましたappengine-maven-plugin(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 コンテナーへの 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

PS4: Spring MVC を使用しているため、アプリを IDE で実行するには、独自の/_ah/startエンドポイントを実装する必要がありました ( Google App Engine Localhost Backend ErrorおよびNo mapping found using Spring3 MVC + Maven2 on GAEから着想を得ました)。それが正しいことかどうか

PS5:ポート 8000 で実行されている管理コンソールを確認しましたが、そこにあるログはシェルのものとまったく同じです (つまり、HTTP 503 メッセージ以外はほとんどありません)。

4

2 に答える 2

4

最終的に、docker のボリュームを使用して appengine VM のログにアクセスすることができました。そして、python コードを閲覧した後、google-cloud-sdk のファイルをハッキングします。

ただし、私は Mac OS X で作業しているため、ここで説明されているように、OS と Docker の間にある VirtualBox レイヤーのために必要な追加のものがいくつかあります: http://viget.com/extend/how-to-use-docker- on-os-x-the-missing-guide

したがって、以下は私が実行したコマンドです。

1 - 必要に応じてすべての Docker コンテナーを停止します。

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

2 - 必要に応じてすべての Docker コンテナーを削除します。

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

3 - boot2docker VirtualBox VM を停止します。

➜  ~ boot2docker down

4 - ローカル マシンにマップするディレクトリを作成します (必要なく読み取り/書き込み権限があるディレクトリであることを確認してください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 の 266 行目を編集します。

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

私の場合、共有フォルダーへのパスを使用します。

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 VM で使用できるようにする必要があるため、google-cloud-sdk python ファイルにハッキングする必要はありません。ただし、まだテストする時間がありません。それをテストするようになったら、答えを更新します。

于 2014-11-16T13:07:59.140 に答える
1

最初の回答 @Nicolas の完成として、小さなシェル スクリプトを作成しました。

  1. プロジェクトをビルドします
  2. ドッカーを起動
  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>" 
于 2015-03-24T15:32:10.853 に答える