こんばんは、七色メガネです。今回は GAE でのエラーを検知して Slack で通知を行う方法について学習します。
今回やること
1:GAE でのエラーを Logging で確認する
2:上記 Logging 中での任意のエラーに対して Metrics(ログベースの指標) を作成する
3:ログベースの指標を用いて Monitoring で Alert 設定を行い、 Slack に通知を行うようにする
4:Slack に通知が飛ぶことを確認する
実践
前準備
今回の検証にあたっては、次の2つの前準備が必要です。
- GAE にサービスが存在すること
- 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 を作成するには、次の手順をふむ。
- Logging でフィルターを実行する。
- Logging でログベースの指標を作成する。
- ログベースの指標から、Monitoring Alert を作成する。
- 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入門 サービスの全体像からクラウドネイティブアプリケーション構築まで