今回Google Cloudで初めてアラートを設定したのですが、Load Balancingの5xxエラーという割と基本的な設定が検索でサクっと見つからなかったので記事にしました。
(CloudRunの5xxなども同様の構成になっているので、そちらでお困りの方も参考にしてください)
結論
結論から言うと、
Google Cloud Load Balancingには直接的な5xxエラーをカウントするメトリクスは存在しません。
これがアラートの設定はメトリクス選んで閾値入れて終わりだと思ってた自分の躓きポイントです。
ではどうするかというと、既存のメトリクス(例:request_count)に5xxのフィルターを適用することで、5xxエラーの数を検知できます。
解説
LBのステータスコードはどこにある?
メトリクスには無いLoad Balancingのレスポンスステータスコードはどこにあるかというと、Cloud Monitoringの「ラベル」という部分に存在します。
例として、グローバルアプリケーションロードバランサーで出力されるメトリクスloadbalancing.googleapis.com/https/request_countの内訳を公式ドキュメントで見てみましょう。
メトリクスにはグラフに描写されている値(リクエスト数,バイト数)だけではなく、このラベルも紐づいて存在しています。
-  指標(メトリクス)
- https/backend_request_bytes_count
 - https/backend_latencies
 - https/backend_response_bytes_count
 - https/backend_request_count
 - https/frontend_tcp_rtt
 - https/request_bytes_count
 - https/request_count
 - https/response_bytes_count
 - https/total_latencies
 
 - ラベル(リンク先では「プロパティ」)
- backend_name
 - backend_scope
 - backend_scope_type
 - backend_target_name
 - backend_target_type
 - backend_type
 - cache_result
 - client_country
 - forwarding_rule_name
 - load_balancing_scheme
 - matched_url_path_rule
 - protocol
 - proxy_continent
 - response_code
 - response_code_class
 - target_proxy_name
 - url_map_name
 
 
ご覧の通り、response_code, response_code_classはラベルにあります。
そのため、この仕様に従って以下のようにアラートを設定します。
- メトリクス
- https/request_count
 
 - フィルター
- response_code_class = 500(5xx)
 
 
これで「リクエスト数 AND レスポンスで5xx」=「5xxレスポンスの数」を設定することができます。
メトリクスとラベルの確認
各メトリクスとラベルの成り立ちに関しては、Metrics Explorerで実際に見てみると直感的に分かりやすいと思います。
- Google Cloud Consoleにログイン
 - 左側のナビゲーションメニューから「Monitoring」をクリック
 - Metrics Explorerをクリック
 - 期間をクリック。プルダウンから「2週間」(有効なデータが存在する期間)を設定する
 - 指標をクリック。プルダウンからGlobal External Application Load Balancer Rule > https > Request countを選択
期間内に有効な値が無い場合、Activeを無効にする - フィルタをクリック。response_codeを選択
(他にも有効なラベル一覧が表示されるので、目を通してみてください) 
アラートの作成
上記の解説を踏まえて、メトリクスとフィルターを指定して5xxアラートを作成していきます。
ステップ1: アラートポリシーの作成開始
- Google Cloud Consoleにログイン
 - 左側のナビゲーションメニューから「Monitoring」をクリック
 - 「アラート」をクリック
 - 「+ CREATE POLICY」ボタンをクリック
 
ステップ2: ポリシー構成モードの選択
- Builderをクリック
 
ステップ3: メトリクスの選択
- 「指標を選択」でGlobal External Application Load Balancer Rule > https > Request countを選択
 - 「APPLY」をクリック
 
ステップ4: フィルターの設定

###### 4-1. ラベルフィルターの追加
1. 「ADD FILTER」をクリック
2. 「Label」で response_code_class を選択
3. 「Value」で 500 を入力
4. 「完了」をクリック
4-2. 追加フィルター(オプション)
特定のロードバランサーのみ監視したい場合:
1. 「ADD FILTER」をクリック
2. 「Label」で url_map_name を選択
3. 「Value」で対象のロードバランサー名を入力
ステップ5: 集計の設定
5-1. 時間集計の設定
- 「ローリングウィンドウ」を 
1分に設定 - 「ローリングウィンドウ関数」を 
rateに設定 
ステップ6: アラート条件の設定
6-1. しきい値の設定
- 「Condition type」で 
Thresholdを選択 - 「Alert trigger」で 
任意の時系列の違反を選択 - 「Threshold position」で 
しきい値より上を選択 - 「Threshold value」に 
10を入力(1分間に10回以上の5xxエラー) 
ステップ7: 通知の設定
7-1. 通知チャネルの追加
- 「NEXT」をクリック
 - 「Notification Channels」セクションで 「ADD NOTIFICATION CHANNEL」をクリック
 
7-2. Emailチャネルの設定
- 「Email」を選択
 - 「Email Address」に運用チームのメールアドレスを入力
 - 「Display Name」に分かりやすい名前を入力
 - 「SAVE」をクリック
 
7-3. Slackチャネルの設定(オプション)
- 「Slack」を選択
 - Slack Workspace認証を完了
 - 通知先チャネルを選択
 - 「SAVE」をクリック
 
ステップ8: アラートポリシーの詳細設定
8-1. ポリシー名の設定
- 「Name the alert policy」に名前を入力(例:ALB-5xx-Error-Alert-Production)
 - 「Incident autoclose duration」に「30分」を設定
 
ステップ9: 設定の確認と保存
- 「NEXT」をクリックして設定内容を確認
 - すべての設定が正しいことを確認
 - 「ポリシーを作成」をクリックして保存
 
まとめ
これでGoogle Cloudの環境にCloud Load Balancingで5xxエラーが発生した時にアラート通知を作成する事が出来ました。
今回は5xxのエラー数はメトリクスでは無くラベルにあること、フィルターを使う事で5xxエラーを検知出来る事を紹介しました。
5xxエラーの監視はアラートの中でも基本的な部分だと思うので、参考になれば嬉しいです。
    

