【GCP入門編・第23回】 Stackdriver Error Reporting でアプリケーションのエラーを収集しよう!

【GCP入門編・第23回】 Stackdriver Error Reporting でアプリケーションのエラーを収集しよう!

GCP

投稿日:2018/10/03

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.” というメッセージが表示されるかと思います。

An internal error occurred.

次に Stackdriver Error Reporting でこのエラーを確認してみます。 GCP のコンソールを開き、左側のメニューをクリックして表示されたメニューから、 [Error Reporting] をクリックします。
以下のように、先ほど追加した “Bang!” というエラーが表示されているかと思います。

Bang!

[Exception: Bang!] と表示されている箇所をクリックすると、エラーの詳細が以下のように表示されます。

エラー詳細画面

この画面に表示されているように、エラーの起こった回数や HTTP のステータス、エラーの起こった回数と時間を示すグラフ、スタックトレースが表示され、エラーについて詳しく調べることが可能です。

次に、エラーに対する通知を設定してみましょう。通知を設定するには、まず先ほどのエラーの詳細ページの右上にあるメニューボタンをクリックし、 [Turn on new error notification on this project] をクリックします。

通知設定

すると、通知が設定されます。通知は今のところメールのみとなっており、ドキュメントには Gmail の転送機能を使って Slack にも送れる、と書いてあります。このあたりは、今後の改善を待ちたいところです。

おわりに

いかがでしたか。サービスがリリースされてからまだ時間が立っていないこともあり、まだまだこれからのサービスといった感はありますが、 App Engine 上にデプロイしてあればエラーの通知が自動で行える、という点は十分に便利なのではないでしょうか。

今後より便利になっていくであろう Stackdriver Error Reporting を、今のうちから使い始めてみてはいかがでしょうか。

同じシリーズの記事

GCP のメリットを最大限に活用しよう!

GCP・G Suite のご相談・
お見積り依頼はお気軽に
TEL.03-5840-8815
お問合せフォーム TEL.03-5840-8815