【GCP入門編・第23回】 Stackdriver Error Reporting でアプリケーションのエラーを収集しよう!
投稿日:2018/10/03 | 最終更新日:2020/09/10
GCP のサービスの一部であり、監視やログ収集など、 Web アプリケーションの運用に便利な機能を多く備えた Stackdriver には、 Web アプリケーションのエラーを収集して通知する、 Stackdriver Error Reporting という機能が存在します。
この記事では、 Stackdriver Error Reporting を利用して、 App Engine 上にデプロイされたエラーの収集や通知の設定について解説します。
目次
この記事の目的
- Stackdriver Error Reporting の機能や特徴を知ろう。
- アプリケーションのエラーを収集して通知の設定をしてみよう。
Stackdriver Error Reporitng とは
Stackdriver Error Reporting は、 Stackdriver のサービスの中でも比較的新しいサービスです。2016年の3月にベータ版がリリースされました。
その名の通り、アプリケーションのエラーをレポートし、デプロイした Web アプリケーションのバグ修正や障害の対応に役立てる情報を提供するためのサービスとなっており、先行するサービスとしては New Relic が挙げられるでしょう。
Stackdriver Error Reporitng の特徴
Stackdriver Error Reporting の特徴としては、 App Engine であれば特別な設定なしにすぐに利用可能なところがあります。もちろん、 Compute Engine にデプロイしたアプリケーション中でも利用可能なのですが、 その場合は自分で Stackdriver Logging agent や Stackdriver Error Reporting API を使用して、エラーを送信する必要があります。
どちらの方法を用いても、アプリケーション内部で発生したエラーをリアルタイムにモニタリングすることや、通知を受け取ること、 Issue Tracker との連携などを行うことが可能です。
現状、プログラミング言語としては Java 、 Python 、 JavaScript 、 Ruby 、 C# 、 PHP そして Go がサポートされています。
Stackdriver Error Reporting で App Engine のエラーを収集する
それでは、実際に Stackdriver Error Reporing を使って、 App Engine 上にデプロイしたアプリケーションのエラーを収集してみます。
今回使うサンプルアプリケーションは【GCP入門編・第5回】App Engine でのアプリケーション起動法!で使用した hello-world アプリケーションです。
まず、こちらのアプリケーションがエラーを出力するように修正してから App Engine にデプロイし、 Stackdriver Error Reporting でどのようにエラーが表示されるかを確認していきます。
先ほどの記事を参考に、 hello-world アプリケーションのディレクトリを作成し、依存ライブラリのインストールを行ってください。ここまでの作業で、ディレクトリの構成は以下の通りになっています。
hello_world
├ README.md
├ app.yaml
├ appengine_config.py
├ main.py
├ main_test.py
├ requirements.txt
└ lib/
次に、 main.py
を編集し、エラーが発生するように変更します。以下のように main.py
を書き換えます。
# Copyright 2016 Google Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# [START app]
import logging
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
raise Exception("Bang!")
return 'Hello World!'
@app.errorhandler(500)
def server_error(e):
# Log the error and stacktrace.
logging.exception('An error occurred during a request.')
return 'An internal error occurred.', 500
# [END app]
hello 関数が exception を raise するように変更していますので、アプリケーションをブラウザで開いたら例外が発生するようになっています。
変更が完了したら、 gcloud コマンドでデプロイします。
gcloud app deploy
デプロイが完了したら、以下のコマンドでアプリケーションを開いてみます。以下のように、 “An internal error occurred.” というメッセージが表示されるかと思います。
次に Stackdriver Error Reporting でこのエラーを確認してみます。 GCP のコンソールを開き、左側のメニューをクリックして表示されたメニューから、 [Error Reporting] をクリックします。
以下のように、先ほど追加した “Bang!” というエラーが表示されているかと思います。
[Exception: Bang!] と表示されている箇所をクリックすると、エラーの詳細が以下のように表示されます。
この画面に表示されているように、エラーの起こった回数や HTTP のステータス、エラーの起こった回数と時間を示すグラフ、スタックトレースが表示され、エラーについて詳しく調べることが可能です。
次に、エラーに対する通知を設定してみましょう。通知を設定するには、まず先ほどのエラーの詳細ページの右上にあるメニューボタンをクリックし、 [Turn on new error notification on this project] をクリックします。
すると、通知が設定されます。通知は今のところメールのみとなっており、ドキュメントには Gmail の転送機能を使って Slack にも送れる、と書いてあります。このあたりは、今後の改善を待ちたいところです。
おわりに
いかがでしたか。サービスがリリースされてからまだ時間が立っていないこともあり、まだまだこれからのサービスといった感はありますが、 App Engine 上にデプロイしてあればエラーの通知が自動で行える、という点は十分に便利なのではないでしょうか。
今後より便利になっていくであろう Stackdriver Error Reporting を、今のうちから使い始めてみてはいかがでしょうか。
弊社トップゲートでは、 GCP 、または G Suite 導入をご検討をされているお客様へ「Google Meet で無料個別相談会」を実施いたします。導入前に懸念点を解決したい方、そもそも導入した方がいいのかをお聞きしたい方はお気軽にお申し込みください!
弊社トップゲートでは、GCPを活用したトレーニングも開催しておりますので、ご興味ございましたらお気軽にお問い合わせください!
メール登録者数3万件!TOPGATE MAGAZINE大好評配信中!
GCP、G Suite、TOPGATEの最新情報満載!
同じシリーズの記事
-
【GCP入門編・第31回】 GCP のネットワークにサブネットを追加する
-
【GCP入門編・第30回】 Cloud CDNで静的ファイルの配布を行う
-
【GCP入門編・第29回】Cloud Load Balancing で Web アプリケーションにロードバランサーを設定する
-
【GCP入門編・第28回】インスタンスグループを使って複数のインスタンスを管理する
-
【GCP入門編・第27回】インスタンステンプレートを使って、よく使うインスタンスを素早く立ち上げよう!
-
【GCP入門編・第26回】 Cloud DNS でドメインの DNS レコードを作成しよう!
-
【GCP入門編・第25回】 Cloud SQL for MySQL で Master-Slave 構成を組もう!
-
【GCP入門編・第24回】 Stackdriver Debugger で本番環境のデバッグを行おう!
-
【GCP入門編・第23回】 Stackdriver Error Reporting でアプリケーションのエラーを収集しよう!
-
【GCP入門編・第22回】 Stackdriver Logging で収集したログに対して、フィルタの実行や警告を設定しよう!
-
【GCP入門編・第21回】 Stackdriver Logging でアプリケーションのログを収集しよう!
-
【GCP入門編・第20回】 手間いらずでログ管理ができる Stackdriver Logging のご紹介!
-
【GCP入門編・第19回】 Stackdriver Monitoring でメールや Slack による通知を設定しよう!
-
【GCP入門編・第18回】 Stackdriver Monitoring で Google App Engine の監視をしよう!
-
【GCP入門編・第17回】 Stackdriver Monitoring で Google Compute Engine を監視しよう!
-
【GCP入門編・第16回】アプリのパフォーマンスを視覚的に確認できる Stackdriver Monitoring を紹介!
-
【GCP入門編・第15回】 GCP から AWS までモニタリングできる Google Stackdriver を紹介!
-
【GCP入門編・第14回】 Cloud Functions を使ってサーバレスアーキテクチャを体験しよう!
-
【GCP入門編・第13回】 Cloud Datalab でデータの可視化を行ってみよう!
-
【GCP入門編・第12回】 BigQuery を使って気軽にビッグデータの解析を行ってみよう!
-
【GCP入門編・第11回】 Google Cloud Dataproc を使ってデータを解析しよう!
-
【GCP入門編・第10回】スケーラブルな NoSQL データベースサービス Cloud Bigtable を使ってみよう!
-
【GCP入門編・第9回】 Cloud Shell で、いつでもどこでも Google Cloud Platform (GCP) が操作可能に!
-
【GCP入門編・第8回】 Container Registry での Docker イメージの使用方法!
-
【GCP入門編・第7回】知らなきゃ損! Google Container Engine (GKE) での Dockerイメージを使ったコンテナの起動方法!
-
【GCP入門編・第6回】これは簡単! Google App Engine での Cloud Datastore の利用方法!
-
【GCP入門編・第5回】 Google App Engine の魅力とは? Google App Engine (GAE) でのアプリケーション起動方法!
-
【GCP入門編・第4回】すぐ出来なくても大丈夫!サンプルアプリで Google Compute Engine (GCE) の動作練習!
-
【GCP入門編・第3回】難しくない! Google Compute Engine (GCE) でのインスタンス起動方法!
-
【GCP入門編・第2回】まずは、ここから! Google Cloud Platform (GCP) の事前準備!
-
【GCP入門編・第1回】エンジニア必読!今さら聞けない、Google Cloud Platform (GCP) とは?