CloudWatchカスタムメトリクスに閾値を設定して、アラーム時にSNSでメール通知する
AWS DVAの出題範囲の1つでもある、モニタリング・トラブルシューティングに関する内容です。
以下のページで、Lambda関数とEventBridgeを使用して、CloudWatchカスタムメトリクスを定期的に配信する方法をご紹介しました。
今回はカスタムメトリクスに閾値を設定して、条件を満たした際にメール通知する方法を考えます。
メール通知する方法については、AWS公式で以下の通り言及されています。
Amazon CloudWatch は、Amazon SNS を使用して E メールを送信します。最初に、SNS トピックを作成してサブスクライブします。CloudWatch アラームを作成する際、この SNS トピックを追加して、アラームの状態が変わったときにメールの通知が送信されるように設定できます。
Amazon SNS 通知の設定
本ページでは、上記に従って、カスタムメトリクスが条件を満たした際に、メール通知する構成をご紹介します。
構築する環境
Lambda関数を作成します。
この関数の働きは、CloudWatchカスタムメトリクスとして、0から9の数字をランダムにプッシュすることです。
EventBridgeルールで、この関数を定期的に実行します。
実行間隔は1分間とします。
CloudWatchアラームを設定し、カスタムメトリクスの値を監視します。
この値が2回連続で7以上の値だった場合、アラームします。
アラームの通知先をSNSトピックとします。
SNSトピックのサブスクライバーとして、メールアドレスを指定します。
CloudFormationテンプレートファイル
上記の構成をCloudFormationで構築します。
以下のURLにCloudFormationテンプレートを配置しています。
https://github.com/awstut-an-r/awstut-dva/tree/main/05/003
テンプレートファイルのポイント解説
本ページでは、CloudWatchアラームを使用して、カスタムメトリクスに閾値を設定し、条件を満たした場合にSNS経由でメール通知することを中心に取り上げます。
Lambda関数とEventBridgeを使用して、カスタムメトリクスを定期的に配信する方法については、以下のページをご確認ください。
以下がカスタムメトリクスを配信する上でポイントとなる情報です。
- 名前空間:test
- メトリック名:randomnum
- ディメンション名:lambda
- ディメンションの値:dva-05-003
- 配信する値:0から9でランダムの値
CloudWatchアラーム
Resources:
Alarm:
Type: AWS::CloudWatch::Alarm
Properties:
ActionsEnabled: true
AlarmActions:
- !Ref SNSTopicArn
AlarmDescription: test alarm
AlarmName: !Ref Prefix
ComparisonOperator: GreaterThanOrEqualToThreshold
Dimensions:
- Name: !Ref CloudWatchMetricDimensionName
Value: !Ref CloudWatchMetricDimensionValue
EvaluationPeriods: 2
InsufficientDataActions:
- !Ref SNSTopicArn
MetricName: !Ref CloudWatchMetricName
Namespace: !Ref CloudWatchMetricNamespace
OKActions:
- !Ref SNSTopicArn
Period: 60
Statistic: Average
Threshold: 7.0
Unit: Count
Code language: YAML (yaml)
アラームの状態に変化があった際に、以下の3つのプロパティにSNSトピックを指定することで、通知を受け取ることができます。
- AlarmActionsプロパティ:ALARM状態に移行時の通知先。
- InsufficientDataActionsプロパティ:INSUFFICIENT_DATA状態に移行時の通知先。
- OKActionsプロパティ:OK状態に移行時の通知先。
4つのプロパティ(ComparisonOperator, EvaluationPeriods, Period, Threshold)で、アラームする条件を設定します。
今回はこれらを組み合わせて、60秒ごとにメトリクスの値を評価し、メトリクスの値が2回連続で7.0以上だった場合に、ALARM状態に移行します。
3つのプロパティ(Dimensions, MetricName, Namespace)で、対象のメトリクスを設定します。
今回は先述のLambda関数で、メトリクス配信時と同一の値を設定します。
SNS
Resources:
Topic:
Type: AWS::SNS::Topic
Properties:
Subscription:
- Endpoint: !Ref MailAddress
Protocol: email
TopicName: !Ref Prefix
Code language: YAML (yaml)
サブスクライバーとしてメールアドレスを設定します。
環境構築
CloudFormationを使用して、本環境を構築し、実際の挙動を確認します。
CloudFormationスタックを作成し、スタック内のリソースを確認する
CloudFormationスタックを作成します。
スタックの作成および各スタックの確認方法については、以下のページをご確認ください。
各スタックのリソースを確認した結果、今回作成された主要リソースの情報は以下の通りです。
- Lambda関数:dva-05-003-function
- EventBridgeルール:dva-05-003-EventRule
- CloudWatchアラーム:dva-05-003
- SNSトピック:dva-05-003
メールアドレスの認証
SNSトピックのサブスクライバーとしてメールアドレスを指定した場合、そのメールアドレスを認証する必要があります。
指定したメールアドレスに、以下のような認証メールが送られてきます。
「Confirm subscription」を押下して、認証を進めます。
上記のページが表示されて、認証が完了したことがわかります。
リソース確認
AWS Management Consoleから各リソースを確認します。
まずSNSトピックを確認します。
SNSトピックのサブスクライバーとして、メールアドレスが指定されています。
Lambda関数を確認します。
正常に関数が作成されています。
EventBridgeルールを確認します。
こちらも正常に作成されています。
1分ごとにLambda関数が実行される内容です。
CloudWatchアラームを確認します。
CloudFormationテンプレートで指定した通りに、アラーム条件が設定されていることがわかります。
Stateを見ると、「Insufficient data」であることがわかります。
この状態になる原因は、以下の通りです。
INSUFFICIENT_DATA 状態は、次のいずれかを示します。
INSUFFICIENT_DATA 状態は、次のいずれかを示します。
・Amazon CloudWatch アラームが始まったばかりです。
CloudWatch アラームの状態が INSUFFICIENT_DATA になっているのはなぜですか?
・メトリクスを使用できません。
・名前空間、メトリクス名、ディメンションなどのメトリクスパラメータが正しく設定されていません。
・メトリクスがアラームの状態を判断するのに十分なデータがありません。
今回ははCloudWatchアラームを作成して間もないことと、メトリクスのデータが十分に配信されていないことが原因です。
Actionsを見ると、通知先として、先述のSNSトピックが指定されていることも確認できます。
動作確認
準備が整いました。
INSUFFICIENT_DATA -> OK
しばらく待ってからCloudWatchメトリクスを確認します。
確かにカスタムメトリクスが配信されてます。
EventBridgeによって、Lambda関数が定期的に実行されているということです。
CloudWatchアラームにもメトリクスの配信状況が反映されます。
確かに反映されています。
そして先ほどまでの状態はINSUFFICIENT_DATAでしたが、現在はOKになりました。
これによって、以下のメールが届きました。
状態がOKに変化した旨が記載されています。
このようにCloudWatchアラームの変更時に、SNS経由でメール通知を受け取ることができます。
OK -> ALARM
ALARM条件を満たすために、しばらく待機します。
2回連続で7以上の数字が配信されました。
これでアラームする条件を満たしました。
CloudWatchアラームを確認します。
確かにALARM状態に変化しました。
これによって、以下のメールが届きました。
状態がALARMに変化した旨が記載されています。
ALARM -> OK
最後にOK状態に戻る際の挙動を確認します。
7より小さい値が配信されました。
CloudWatchアラームの状態がOKに戻りました。
これによって、以下のメールが届きました。
状態がOKに変化した旨が記載されています。
まとめ
CloudWatchアラームを使用して、カスタムメトリクスが条件を満たした際に、SNS経由でメール通知する構成をご紹介しました。