Lookout for Metricsのアラート設定について

## はじめに
Lookout for Metricsで異常(Anomalie)検知した結果を、他のサービスと連携させて通知出来るようにしたいと考えました。
本記事ではAmazon SNS と連携してみます。
## 前提
・AWSアカウントがあること
・Lookout for MetricsでDetectorがActivate済みであること
※今回はLookout for Metricsのconteniousモードで作成したDetectorに連携させますが、Backtestモードでも設定方法は同じです。

## やること
今回はLookout for Metricsの異常(Anomalie)結果をAmazon SNS に連携しますので
以下の手順で設定を行います。
1.SNSトピックスとサブスクリプションの作成
2.ロールにSNSポリシーをアタッチ
3.Lookout for MetricsメトリクスのAlertの設定
## 1.SNSトピックスとサブスクリプションの作成
まずAmazon SNSでトッピクスを作成します。
SNSトピックスとは、メッセージを配信するための論理的なチャネルです。
メッセージ送信元がトピックにメッセージを公開し、メッセージ受信先はそのトピックに対してサブスクライブ（登録）することで、メッセージを受け取ることができます。

https://docs.aws.amazon.com/ja_jp/sns/latest/dg/sns-create-topic.html

AWSコンソールの検索窓に「sns」と入力します。
AmazonSNSの画面からトピックのメニューを選択し、「トピックの作成」を押下します。
<img width="200" alt="IAM" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3677761/83734cf0-1415-9a50-3c06-cd80093c0c57.png">
<img width="200" alt="IAM" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3677761/af2df814-b0a9-de18-1925-631772e01fa8.png">
タイプを選択します。
ここでは「スタンダード」を選択します。名前も入力します。
<img width="500" alt="IAM" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3677761/9dcb654f-94ab-ff98-0794-a8e21a93c31d.png">
他はデフォルトで構いません。
右下にある「トピックスの作成」を押下します。

次にサブスクリプションを作成します。
「サブスクリプションの作成」を押下します。
<img width="200" alt="IAM" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3677761/18085c3f-f78c-af79-fbd7-f81f58e442dd.png">
<img width="500" alt="IAM" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3677761/42db8e4b-7fe5-00a8-2dfd-0e287a816d83.png">
「トピックARN」には先ほど作成したトピックスを選択します。
「プロトコル」はEメールを選択します。
「エンドポイント」には通知メールを送付したいメールアドレスを入力します。
右下の「サブスクリプションの作成」を押下します。

作成が完了するとサブスクリプションのステータスが確認できます。
エンドポイントのステータスを見ると「保留中の確認」になっています。
※実際の画面ではエンドポイントに設定したメールアドレスが表示されます。
![スクリーンショット 2024-08-25 062846.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3677761/861a0266-4b70-0cea-915e-f274f846e66a.png)
このステータスを「確認済み」にする必要があるので、エンドポイントで設定したメールアドレスの受診メールを確認します。

AWS Notificationsというタイトルのメールが届いていると思いますので開きます。
メールを見ると「Confirm subscription」のリンクがあるので押下します。
![スクリーンショット 2024-08-25 062950.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3677761/4c21896e-6102-6835-2873-4ea167f51e3d.png)
すると「Subscription confirmed」の画面になります。
![スクリーンショット 2024-08-25 063021.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3677761/e66a67c6-c20d-7854-2591-1e55bacb728d.png)
先程のAWSコンソール上のサブスクリプションの画面を確認すると、ステータスが「確認済み」に変化したことがわかります。
※実際の画面ではサブスクリプションのIDも発行されています。
![サブスク確認済み.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3677761/11f18366-68e1-b0ea-d157-9696ecb62c67.png)
これでSNSトッピクスとサブスクリプションの設定は完了です。
次にロールを作成します。
## 2.ロールにSNSにポリシーをアタッチ
今回はLookout for MetricsでDetectorは設定済みの前提になりますので
既に作成されているLookout for MetricsのロールにSNSのポリシーをアタッチします。
AWSコンソールの検索窓で「ima」と検索します。
ロール画面の検索窓でSNSのポリシーをアタッチしたいLookout for Metricsのロールを検索します。
対象のロールを選択し「許可」タブの「許可ポリシー」で「許可を追加」から「ポリシーのアタッチ」を選択します。
![スクリーンショット 2024-08-25 063450.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3677761/87eec934-8c38-906e-d7c3-4b6b14d22309.png)
ポリシーの検索窓で「SNS」と検索します。
今回アタッチするポリシーは「AmazonSNSFullAccess」とします。
「AmazonSNSFullAccess」を選択し、右下の「許可の追加」を押下します。
対象のポリシーにAmazonSNSFullAccessが追加されていれば設定は完了です。
![ポリシー追加後.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3677761/65bd34e8-abc4-1f78-48f1-7301ed263abf.png)
次にLookout for MetricsのAlert設定をします。
## 3.Lookout for MetricsのAlertの設定
設定済のLookout for MetricsのDetectorを選択し「Add Alert」を押下します。
![スクリーンショット 2024-08-25 063121.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3677761/ec8cc6b5-9c8a-a5fe-be01-adf615baec6c.png)
Alert名を記入します。
![スクリーンショット 2024-08-25 063151.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3677761/0611c49d-ff4a-459c-ac95-e55192a61340.png)
SNSで通知する異常のSeverity scoreを決めます。デフォルトは70です。
ここではscore50以上の異常を通知させるように設定しています。
これでSeverity score(重要度)の値が50異常のアラートに関してメールで通知されることになります。
「Channel」はAmazon SNSを選択します。
先ほど作成したSNSトピックスを選択します。
Formatはいくつか種類があります。
ここでは「Long Text」を選択しています。
![alert設定.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3677761/9cefc2ac-2f7d-d7e4-31a6-06c59dbbc10a.png)
「Service Access」では先ほどAmazonSNSFullAccessを追加したLookout for Metricsのポリシーを選択します。
設定が完了したら右下の「Add Alert」を押下します。
「Alerts」の一覧 に設定したAlertが作成されていることを確認します。
## 4結果の確認
アラートの追加ができたら、実際にLookout for Metricsで異常を検知させてAlertを発報させます。
すると先ほどSNSトピックスで設定したメールアドレスに以下のようなメールが届きます。
![anomalis結果メール.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3677761/5a57a8d9-34d9-b372-752b-024b6dd6bdef.png)
メールが届いていれば設定は完了です。
メールには、severrity scoteや検知した時間メトリクスなどの情報が含まれています。
※Add alert時に設定したFormatによって表示される内容は異なります。
## まとめ
SNSなどと連携することでLookout for Metricsを見に行かなくても、異常検知に気づくことが出来るので便利だと思いました。
Anomalieの結果画面でも検知した異常について確認できますが、画面遷移するとデフォルトの画面に戻ってしまうので、Severity score(重要度)の高い異常については他のサービスと連携させ早く気付けるようにするのが良さそうに感じました。