Cloud Run エラーの通知方法まとめ
概要
Cloud Run サービスでエラーが発生したらSlack通知するための方法を調査、比較した。
比較した結果、「ログベースの指標」と「指標ベースのアラートポリシー」を組み合わせる方法が良さそうだったので、その使い方をまとめた。
前提
調査対象は Google Cloud 内で完結できる方法とした。
Sentry や Datadog などを使うとより良い方法がありそうだが、今回は調査対象外とした。
比較表
手法 | 最大通知数 | 使い方 | メリット | デメリット |
---|---|---|---|---|
Slack API | Slack APIの制限に則る(超えると制限超過エラーが通知される) | アプリケーションコードで通知処理を書く | 簡単 | Slack APIの制限に引っかかると、通知ができなくなる。 コンテナ起動エラーなどのインフラ系エラーに関しては別の仕組みで通知する必要がある |
Error Reporting | 5回/60 分[1] | エラーログのフォーマットを指定の形式に変更する[2] | 簡単 エラーのグルーピングが便利 |
制限を許容できない場合、制限を超えてエラーログが出力されたら通知する仕組みを構築する必要がある[3] |
ログベースのアラートポリシー | 20件/ 日[4] | ログベースのアラートポリシーを作成し、通知条件を設定する | 簡単 シンプル |
制限を許容できない場合、制限を超えてエラーログが出力されたら通知する仕組みを構築する必要がある |
ログベースの指標 + 指標ベースのアラートポリシー | なし | ログベースの指標を作成する 指標ベースのアラートポリシーを作成する |
通知制限が無い | エラーログ発生から通知まで1~2minの遅延がある[5] |
最大通知数の制限が無いのは「ログベースの指標 + 指標ベースのアラートポリシー」のみ。
これはエラー検知が Pull 型であることに起因していると思われる。他の形式はエラーが発生したら通知する Push型であり、最大通知数の制限が設けられている。
また、「ログベースの指標 + 指標ベースのアラートポリシー」を作れば、アプリケーションのエラーもインフラのエラーもこれ一本でカバーできる。
以降は、「ログベースの指標 + 指標ベースのアラートポリシー」の使い方を見ていく。
ログベースの指標の作成
ログベースの指標は、ログを指標(メトリクス)に変換するもの。
Google Cloud コンソールから作成するには、「Monitoring」> 左メニュー「ログベースの指標」に移動し、「指標を作成」をクリックする。
そして、次のように指標タイプやフィルタなどの項目を入力して作成する。
ポイントは次の2つ。
- 指標タイプを Counter に設定する
- フィルタで Cloud Run エラーログを検索する条件を設定する
指標ベースのアラートポリシーの作成
先ほど作成したログベースの指標に対し、閾値を超えたら通知するための設定を行う。
Google Cloud コンソールから作成するには、「Monitoring」> 左メニュー「ログベースの指標」に移動し、先ほど作成したログベースの指標でその他の操作から「指標に基づいて通知を作成する」をクリックする。
そして次のように必要な項目を入力する。
アラート条件
Select a metric:先ほど作成したログベースの指標がデフォルトで設定されている。
Transform data:ローリングウィンドウ(アラート条件が満たされているかどうかを判定する期間)に10min、ローリングウィンドウ関数に count を設定する。これで設定した metric が10min間で出力した値をカウントできる。
トリガーの設定
Condition Types:Threshold(しきい値)を選択し、しきい値を0より大きい値に設定する
通知と名前
通知チャンネルには通知したいチャンネルを指定する。ここでは便宜上、slack通知チャンネルではなくメール通知用のチャンネルを指定した。
インシデントの自動クローズ期間は、インシデントがオープン状態のまま指定した期間が経過すると、自動でインシデントがクローズされる期間。
アラートの確認
入力した内容を確認して問題なければ「ポリシーを作成」をクリックする。
作成したポリシーは、Monitoring の左メニュー「アラート」の画面から確認できる。
動作確認
まず、Cloud Run でエラーログを出力させる。
すると、アラート通知とインシデント作成が行われる。
料金
ログベースの指標
取り込んだデータ量に応じて料金が決まる(参考)
- $0.2580/MiB: 最初の150~100,000 MiB
- $0.1510/MiB: 次の100,000~250,000 MiB
- $0.0610/MiB: 250,000MiB超
月初からの取り込み量はコンソール画面で確認できる。
アラートポリシー
- アラート ポリシーの条件ごとに月額
$1.50
- 指標アラートポリシー条件のクエリによって返される 1,000,000 時系列あたり
$0.35
。- デフォルトではクエリが30s間隔で実行され1つの時系列を返すため、
1時系列/30s * 2回/min * 60min/h 24h/day * 30day/month = 86,400時系列
$0.35 * 86,400時系列 / 1,000,000 時系列 = $0.03024
- デフォルトではクエリが30s間隔で実行され1つの時系列を返すため、
今回の設定では、1つのアラートポリシーで約 $1.53/月
と推定(参考:アラートの料金)。
Discussion