このチュートリアルでは、 Python のスタートガイド チュートリアルでキャッチされなかった例外を、Google Cloud コンソールを使用して報告し、追跡する方法について説明します。
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 インスタンスが課金対象のリソースとなります。コストを抑えるには、アプリのデフォルト以外のバージョンを削除します。
アプリのバージョンを削除するには:
- コンソールで、App Engine の [**バージョン**] ページに移動します。 Google Cloud
- デフォルト以外で削除するアプリのバージョンのチェックボックスをオンにします。 削除します。
- アプリのバージョンを削除するには、 [Delete] をクリックします。
課金対象のリソースをクリーンアップする方法の詳細については、このチュートリアルの最後のステップの クリーンアップ セクションをご覧ください。
エラーのシミュレーション
Error Reporting の動作を確認するには、コードに意図的に誤りを挿入し、 コンソールの Error Reporting ページで例外を探します。 Google Cloud
bookshelf/crud.pyで、未定義の変数にアクセスしてインデックス ビューでReferenceErrorを生成するオペレーションを追加します。@crud.route("/") def list(): x[3]
アプリをデプロイします。
gcloud app deploy
インデックス ページにアクセスします。
gcloud app browse
メッセージ
An internal error occurredを表示できます。-
コンソールで [Error Reporting] ページに移動します。 Google Cloud
このページは、検索バーを使用して見つけることもできます。
エラーの一覧が表示されます。
エラーをクリックすると、エラーが最後に検出された日時、エラーが発生した回数、発生回数のヒストグラム、スタック トレースなどのエラーに関する情報が表示されます。
コードの説明
キャッチされなかった例外を報告するには、コードはまず Flask の errorhandler
デコレータを使用してから、
Python 用
Cloud クライアント ライブラリを使用して Error Reporting に例外を報告します。
クライアントはトレースバック情報を自動的に追加し、ヘルパー関数を使用して Flask リクエストから関連するリクエストの詳細を抽出します。これにより、アプリで発生しキャッチされなかった InternalServerError HTTP 500 例外の関連するスタック トレースと HTTP コンテキストが Error Reporting に入力されます。
クリーンアップ
このチュートリアルで使用したリソースについて、Google Cloud アカウントに課金されないようにするには、リソースを含むプロジェクトを削除するか、プロジェクトを維持して個々のリソースを削除します。
課金をなくす最も簡単な方法は、チュートリアル用に作成したプロジェクトを削除することです。
プロジェクトを削除するには:
- コンソールで [**リソースの管理**] ページに移動します。 Google Cloud
- プロジェクト リストで、削除するプロジェクトを選択し、[削除] をクリックします。
- ダイアログでプロジェクト ID を入力し、 [Shut down] をクリックしてプロジェクトを削除します。