Google Cloud Platform でアラート通知設定を行う【基本編】

当記事の目的
======
* Google Cloud Platform（以下 GCP）にてアラートポリシーを作成することで、実際に ERROR や WARNING の通知を送るよう設定を行います。
    * インシデントへの迅速な対応のため。
* メール及び Slack に通知が飛んでくることを確認します。


アラートポリシーとは
=================
GCP の Cloud Monitoring という監視サービスで、アラートの①通知先、②通知条件を指定すると、指定した条件を満たしたとき、指定した通知先に通知を送ってくれるという仕組み。（[ドキュメント](https://cloud.google.com/monitoring/alerts)）


流れ
=====
1. 通知先を設定しておく。
2. `Select a Metric` で監視対象を決める。
3. `トリガーの設定` でアラート通知を出す条件を決める。
4. `通知と名前` でアラート内容を記述する。
5. 作成したアラートポリシーの通り、アラート通知が飛んでくることを確認する。


# 1. 通知先の設定
アラートポリシーを作成する前に、以下の準備が必要である。

Slack チャンネル作成
--------------------
通知を受け取る用の Slack チャンネルを作成しておく。（ `#` つきのチャンネル名は通知チャネル設定で使うので、控えておく）

以下のように、検証環境と本番環境、アラートの深刻度（ERROR か WARNING か等）に応じてチャンネルを分けるとよい。

* 検証環境 - WARNING
* 検証環境 - ERROR
* 本番環境 - WARNING
* 本番環境 - ERROR

通知チャネル設定
---------------
GCP の `Monitoring` の`通知チャネル` （ `Manage Channels` ）画面にて、アラート通知先の設定を行う。基本的に、画面に出る指示に従えばよい。（[ドキュメント](https://cloud.google.com/monitoring/support/notification-options#creating_channels)）

### Slack
Slack のワークスペースを選択して連携する。
↓
`#` つきのチャンネル名及びそのチャンネルの GCP 上での表示名を入力。
↓
`テスト通知を送信する` でテスト接続し、Slack で `This is a test alert notification from Stackdriver` という通知が確認できたら成功。

### メール
メールアドレスと GCP 上での表示名を入力。


# 2. Select a metric
ここからはアラートポリシー作成画面での作業。
`Monitoring` → `アラート` → `CREATE POLICY` へ移動。

その中の `Select a metric` 画面で以下の操作をする。

Metrics（指標）を選択
-----------------
監視対象、及びその中でも何を監視したいかによって、Metrics を決める。選択画面に出てくる説明を読みつつ選択。
主な監視対象の GCP Metrics 一覧での表示名は以下のようになっている。

| 監視対象  | Metrics での表示名 |
| ------------- | ------------- |
| BigQuery  | BigQuery Project  |
| GAE  | GAE Application  |
| GCE  | VM Instance  |
| GKE  | Kubernetes  |
| SQL  | Cloud SQL Database  |
| ロードバランサ  | Google Cloud HTTP/S Load Balancing Rule  |

よく使うであろう Metrics は以下の通り。（[Metrics 詳細](https://cloud.google.com/monitoring/api/metrics_gcp)）

* `log_entry_count` （ログの数）
* `http/server/response_count` （HTTP レスポンスの数）
* `cpu/utilization` （CPU 使用率）

※ちなみに GCE に関しては、使用する VM インスタンスに Ops Agent をインストールすると、もっと色々な Metrics を使って監視できるようになる。（[Ops Agent インストール方法](https://cloud.google.com/monitoring/agent/monitoring/installation#gce-ui-install)）

フィルタリング
-----------------
`フィルタの追加` にて、監視対象を絞り込む。（例：ログレベルが ERROR であるログの数を見たい場合、 `log severity = ERROR` であるログのみ取得）
以下でフィルタリングすることが多いと思われる。

* project_id（プロジェクト指定）
* severity（ERROR や WARNING などのログレベル）
* instance_id（GCE の場合）
* database_id（Cloud SQL の場合）
* cluster_name（GKE の場合）

ちなみにフィルタリングは、できる限り細かくしておいた方が良い。あまりフィルタリングをしないとアラート通知がとてもうるさくなり、本当に大切なアラートを見逃す可能性があるためである。

データ計測間隔決定
-----------------
`Transform Data` の `ローリングウィンドウ` にて、監視する時間の間隔を決める。（例：5分に設定→過去5分間のデータを取得して異常を検知する）
基本1分単位で計測するのが良い。

計測する数値の種類決定
-----------------
同じく `Transform Data` の `ローリングウィンドウ関数` にて、どんな数値をみたいのかを決める。（例：CPU の最大使用率によってアラートを出したい場合、最大値を見る）
以下を用いることが多いと思われる。

* 合計値（sum）
* 最大値（max）
* 平均値（mean）
* 変化率（percent change）

また、その下の `Across time series` の「時系列集計」でも、上記で選んだものと同様のものを選択しておく。


# 3. トリガーの設定
「トリガーの設定」画面へ進む。

条件指定
-----------------
「境界値を上回った（or 下回った）場合アラートを出す」「データがない場合にアラートを出す」といったアラート条件を決める。

### Condition Type
以下のどちらかを選択。

* 境界値を上回った（or 下回った）ときにアラートを出す場合は `Threshold`
* データがないときにアラートを出す場合は `Metric absence`

恐らく `Threshold` を使うことが多いため、以下ではこちらを想定して説明する。

### Alert Trigger
基本的に `任意の時系列の違反` を選択するのがよいと思われる。これは「1回でも設定した条件に当てはまった場合にアラートを出す」という意味。

### しきい値の位置
以下のどちらかを選択。

* しきい値を上回った場合にアラートをだすならば「しきい値より上」
* しきい値を下回った場合にアラートをだすならば「しきい値より下」

### しきい値
境界値を決める。

例：「ログレベルが ERROR であるログが1個でもある場合アラートを出す」
→「しきい値の位置」では「しきい値より上」、「しきい値」では「0」を入力。

### 再テストウィンドウ
本当はアラート条件に当てはまらないのに「アラートを出す条件に当てはまったぞ！」と判断されてしまうのを防ぐためのもの。

こちらはデフォルトのまま「0秒」、または「1分」など短い期間で設定しておけばよいと思われる。

### 条件名
飛んでくる通知にも書かれるものなので、一目見て分かりやすい条件名を指定する。
ちなみにデフォルトでは Metrics 名が入っている。


# 4. 通知と名前
通知チャネル指定
-----------------
通知を送りたい先を指定する。
1で設定しておいた Slack のチャンネルやメールアドレスから選択する。

インシデントのクローズに関する設定
--------------------------
`Notify on incident closure` にチェックを入れると、インシデント解消時にも通知が来るようになる。
インシデントの自動クローズ期間はデフォルトのまま「7日」でよいと思われる。

アラート名と説明を記述
-----------------
アラート名とその説明を書く。これらも通知が飛んできた際に表示されるものなので、一目見て分かりやすいように書いておく。

`ポリシーを作成` を押したら作成完了。


# 5. 通知確認
実際に通知が届くことを確認する。

Slack
-------
### インシデント発生時
インシデント発生時には、 `Incident Ongoing` などと書かれ赤色の線が付いた通知が届く。
（ `Incident 〇〇 is Ongoing` のインシデント ID をクリック→ `VIEW LOGS` で該当のログを参照できる。）

### インシデント解消時
インシデント解消時にも通知するよう設定しておいた場合は、 `Incident Stopped` などと書かれ緑色の線が付いた通知が届く。

メール
-------
`Alert firing` と書かれたメールが届く。


まとめ
======
画面をポチポチすれば基本的なアラート設定ができてしまう、というのはありがたいです。
アラートポリシーは作成・編集・削除・オンオフが気軽にできるので、とりあえず作って試してみるのがよいと思います。


参考
=======
公式ドキュメントが豊富なので比較的分かりやすいと思います。

* [アラートポリシーの管理](https://cloud.google.com/monitoring/alerts/using-alerting-ui)
* [アラートポリシーのサンプル](https://cloud.google.com/monitoring/alerts/policies-in-json?_ga=2.58292394.-1013275369.1626413890&_gac=1.148000453.1634887942.CjwKCAjwwsmLBhACEiwANq-tXOBhpHrIjEI_fwfBWvvOL-ExrFPrZB7KTcT-M1cQnwSaYGzzVZ4mMhoC3REQAvD_BwE)
* [アラートポリシーの条件指定](https://cloud.google.com/monitoring/alerts/ui-conditions-ga)