このチュートリアルでは、Google Cloud コンソールを使用して、Python スタートガイドでキャッチされなかった例外を報告し、追跡する方法について説明します。
Error Reporting は、各エラーの発生件数、スタック トレース、発生履歴を表示する一元管理されたダッシュボードを提供します。エラー発生時のアラートを設定することもできます。
このページは複数ページからなるチュートリアルの一部です。最初からの説明や設定手順を確認するには、Python Bookshelf アプリに移動してください。
設定の構成
このセクションでは、5-logging ディレクトリのコードを使用します。ファイルを編集し、このディレクトリでコマンドを実行します。
config.pyファイルを編集用に開き、次の値を置き換えます。-
[PROJECT_ID]の値をプロジェクト ID に設定します。これは Google Cloud コンソールに表示されます。 [DATA_BACKEND]の値を、構造化データの使用チュートリアルで使用したものと同じ値に設定します。- Cloud SQL または MongoDB を使用している場合は、
Cloud SQLまたはMongoセクションの値を、「構造化データの使用」ステップで使用したものと同じ値に設定します。 [CLOUD_STORAGE_BUCKET]の値を Cloud Storage バケット名に設定します。-
OAuth2 configurationセクションで、[GOOGLE_OAUTH2_CLIENT_ID]と[GOOGLE_OAUTH2_CLIENT_SECRET]の値を、以前に作成したアプリケーション クライアント ID とシークレットに設定します。 config.pyファイルを保存して閉じます。
Cloud SQL を使用する場合:
- 編集する
app.yamlファイルを開きます。 -
cloudsql-instanceの値を、config.pyファイルの[CLOUDSQL_CONNECTION_NAME]と同じ値に設定します。形式project:region:cloudsql-instanceを使用します。 この行全体のコメントを解除します。 app.yamlファイルを保存して閉じます。
依存関係のインストール
仮想環境を作成して依存関係をインストールするには、次のコマンドを使用します。
Linux / macOS
virtualenv -p python3 env
source env/bin/activate
pip install -r requirements.txt
Windows
virtualenv -p python3 env
env\scripts\activate
pip install -r requirements.txt
ローカルマシンでのアプリの実行
ローカル ウェブサーバーを起動します。
python main.pyブラウザに次のアドレスを入力します。
http://localhost:8080
Ctrl+C キーを押してワーカーを終了し、次にローカル ウェブサーバーを終了します。
App Engine フレキシブル環境へのアプリのデプロイ
サンプルアプリをデプロイします。
gcloud app deployブラウザに次の URL を入力します。
https://PROJECT_ID.REGION_ID.r.appspot.com次のように置き換えます。
PROJECT_ID: 実際の Google Cloud プロジェクト IDREGION_ID: App Engine がアプリに割り当てるコード
アプリを更新する場合は、アプリをデプロイしたときと同じコマンドを入力して、更新バージョンをデプロイします。デプロイするとアプリの新しいバージョンが作成され、デフォルト バージョンに設定されます。アプリの古いバージョンはそのまま残ります。それらに関連付けられた仮想マシン(VM)インスタンスも同様です。すべてのアプリ バージョンと VM インスタンスが課金対象のリソースとなります。コストを抑えるには、アプリのデフォルト以外のバージョンを削除します。
アプリのバージョンを削除するには:
- In the Google Cloud console, go to the Versions page for App Engine.
- Select the checkbox for the non-default app version that you want to delete.
- アプリのバージョンを削除するには、[削除] をクリックします。
課金対象のリソースをクリーンアップする方法の詳細については、このチュートリアルの最後のステップにあるクリーンアップ セクションをご覧ください。
エラーのシミュレーション
Error Reporting の動作を確認するには、コードに意図的に誤りを挿入し、 Google Cloud コンソールの Error Reporting ページで例外を探します。
bookshelf/crud.pyで、未定義の変数にアクセスしてインデックス ビューでReferenceErrorを生成するオペレーションを追加します。@crud.route("/") def list(): x[3]
アプリをデプロイします。
gcloud app deploy
インデックス ページにアクセスします。
gcloud app browse
メッセージ
An internal error occurredを表示できます。-
Google Cloud コンソールで [Error Reporting] ページに移動します。
このページは、検索バーを使用して見つけることもできます。
エラーの一覧が表示されます。
エラーをクリックすると、エラーが最後に検出された日時、エラーが発生した回数、発生回数のヒストグラム、スタック トレースなどのエラーに関する情報が表示されます。
コードの説明
キャッチされなかった例外を報告するには、Flask の errorhandler デコレータを使用してから、Python 用 Cloud クライアント ライブラリを使用して Error Reporting に例外を報告します。
クライアントはトレースバック情報を自動的に追加し、ヘルパー関数を使用して Flask リクエストから関連するリクエストの詳細を抽出します。これにより、アプリで発生しキャッチされなかった InternalServerError HTTP 500 例外の関連するスタック トレースと HTTP コンテキストが Error Reporting に入力されます。
クリーンアップ
このチュートリアルで使用したリソースについて、Google Cloud アカウントに課金されないようにするには、リソースを含むプロジェクトを削除するか、プロジェクトを維持して個々のリソースを削除します。
課金をなくす最も簡単な方法は、チュートリアル用に作成したプロジェクトを削除することです。
プロジェクトを削除するには:
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.