[ GCP ] GAE でのエラーを Monitoring で検知して Slack に通知する

[ GCP ] GAE でのエラーを Monitoring で検知して Slack に通知する

こんばんは、七色メガネです。今回は GAE でのエラーを検知して Slack で通知を行う方法について学習します。

今回やること

1:GAE でのエラーを Logging で確認する
2:上記 Logging 中での任意のエラーに対して Metrics(ログベースの指標) を作成する
3:ログベースの指標を用いて Monitoring で Alert 設定を行い、 Slack に通知を行うようにする
4:Slack に通知が飛ぶことを確認する

実践

前準備

今回の検証にあたっては、次の2つの前準備が必要です。

  1. GAE にサービスが存在すること
  2. GAE のサービスでエラーを発生させることができること

サービスの準備自体は本記事の本旨では無いので、どうやって準備を行うかは割愛します。
過程は飛ばしますが、今回は次のような画面を持つサービスを立ち上げました。

4つのボタンがあり、それぞれ

  • 400 エラーを出す
  • 500 エラーを出す
  • 400 エラーを、severity: Info で出す
  • 400 エラーを、severity: Warning で出す

という機能を持っています。これを使って、今回の学習を行なっていきます。

なお、src は次に置いて置きますので、気になったらどうぞ。作りは雑です。

https://github.com/NanairoMegane/basic-gae2

エラーの発生と Logging での確認

では実際にエラーを発生させ、それを Logging で確認してみましょう。
今回は 500 エラーと severity: Warning のエラーを発生させてみます。

検証画面で該当のボタンを押して

Logging を開くと

意図したエラーが吐き出されていることが確認できますね。ログの左のほうにあるアイコンが severity (重大度) を示しています。500 エラーの方は severity を設定していないので「全て」を表すアイコンになっていますが、Warning エラーの方は severity: Warning でログを出力するように設定するので、アイコンが Warning を意味する「!」になっていることが確認できます。

Log をフィルターして、Monitoring 用の Alert を作成する

では Logging で確認できるエラーにフィルタをかけて、それをベースに Alert を作成しましょう。

Slack 通知などを行える Alert は Logging での機能ではなく、Monitoring の機能です。ので本来は Alert の設定は Monitoring の画面から行うのですが、Logging 画面からも作成画面に遷移できるので、今回はその方法で行います。

まずは 500 エラーに対する Alert を設定しましょう。Logging のフィルターに status:500 を入力すると 500 エラーのログだけを絞り込めます。

この状態で画面上部の 指標を作成 を押下すると、指標の設定画面に遷移します。
遷移先では、現在のフィルターに基づく 指標の詳細情報の入力を促されるので入力します。
今回は簡易な設定のみを施します。タイプはカウンターでないと通知を行えないようなので、カウンターにして置きます。

作成すると、ログベースの指標ページに遷移します。先ほど作成した指標の右側のオプションを選択すると「指標に基づいて通知を作成する」というボタンがあるので、それを押下します。ここからは Monitoring の画面に飛びます。

Alert の詳細設定画面になります。Resource や Metrics は先ほどの設定を引き継いでいるので、その他の必要項目を埋めます。必須なのは Aggregator と Threshold です。Aggregator は None, Threshold には 0.001 を設定して置きます。

設定が終わると、通知ポリシー設定画面に遷移します。現在は通知ポリシーの Condition の設定が終わった状態ですから、残りは名前と Slack の通知設定です。

Slack への通知は、Notification の設定に該当します。初回は Slack の連携設定をしなければいけないので、Add ではなく Edit の方を選択します。

Edit の先では通知先の候補がたくさん出てきますので、その中から Slack を選択して、連携設定を行なってください。この設定に関しては割愛します。

設定後、Notification の Edit ではなく Add を押すと、先ほど設定した Slack 情報が出てくるはずなので、それを選択しましょう。

これで設定は終わりです。指定した条件での Monitioring が成立しました。

Slack での通知を確認する

では Slack での通知を確認しましょう。GAE のサービス上から、再度 500 エラーを発生させるボタンを押下して、ちょっと待ってみます。20 回くらい押しました。

少し待つと、指定した Slack のチャンネルに通知が来ました。おめでとうございます!
Slack での通知を行なっていなくても、Monitioring 上で指定条件でのエラーの存在を確認することができます。

補遺:severity でのフィルターについて

上記の検証では、status でのフィルターをかけました。が、severity でのフィルタリングは、通常のフィルターではかけられないようです。

のでフィルターをかける前に、フィルター欄の右にある「高度なフィルタに変換」を押しましょう。すると、severity でのフィルタリングも可能になります。あとの設定は、status の時と同様です。

こちらも同様の設定で、 Slack 通知を確認することができました。

まとめ

・Logging ベースで Slack 通知用の Monitoring Alert を作成するには、次の手順をふむ。

  1. Logging でフィルターを実行する。
  2. Logging でログベースの指標を作成する。
  3. ログベースの指標から、Monitoring Alert を作成する。
  4. Alert に Slack への通知情報を設定する。

以上、お疲れ様でした!

参考

https://www.topgate.co.jp/gcp18-stackdriver-monitoring-gae

https://www.topgate.co.jp/gcp19-stackdriver-monitoring-notify-mail-slack

おすすめ書籍

Google Cloud Platform エンタープライズ設計ガイド

Google Cloud Platform 実践Webアプリ開発 ストーリーで学ぶGoogle App Engine

プログラマのためのGoogle Cloud Platform入門 サービスの全体像からクラウドネイティブアプリケーション構築まで

GoogleCloudPlatformカテゴリの最新記事