前回まででCloudWatchAgentConfigファイルを作成し、CloudWatchAgentの起動をする手順についてご紹介しました。
今回はCloudWatchに出力されたメトリクスの確認、SNSトピックの作成、メトリクスに対するCloudWatchAlarm設定までの手順を確認していきます。
CloudWatchAlarmには、Linuxサーバーのメモリ使用率が80%を超えた時にアラートを発報するように設定を行います。
作業の流れ
1.VPCへCloudWatchAgentに必要なVPCエンドポイントを作成する
2.EC2を構築し、IAMロールをアタッチする(CloudWatchAgentとSSM権限の付与)
3.EC2に対してCloudWatchAgentをインストールする
4.CloudWatchAgentのconfigファイルを設定し、CPU・メモリ・プロセスなどのメトリクスを取得する
Linux用CloudwatchAgent設定ファイルの生成・CloudwatchAgentの起動
Windows用CloudwatchAgent設定ファイルの生成・CloudwatchAgentの起動
5.SNSトピックの作成←いまここ
6.CloudWatchAgentで取得したメトリクスに対してCloudWatchAlarmを設定する←いまここ
構成図確認
構成図を確認します。
前回までの手順で、VPCエンドポイントやSSMの作成・EC2へのCloudWatchAgentインストール・Configファイルの作成までは完了した状態です。
今回はCloudWatchのメトリクス確認・SNSトピックの作成/サブスクリプションの作成・メトリクスに対するCloudWatchAlarmの設定を行っていきます。
CloudWatchメトリクスの出力確認
ディメンションごとに出力されているメトリクス
CloudWatchAgentによって取得されたメトリクスは、「CWAgent」という名前空間で出力されています。実際にCloudWatchAgentのメトリクスを確認してみます。
CloudWatchのトップ画面から、左メニュー「すべてのメトリクス」を押下します。
表示されたメトリクス一覧から、「カスタム名前空間」の「CWAgent」を押下します。
メトリクス出力のディメンションは、CloudWatchAgentのConfigウィザードで指定した物に加え、メトリクスごとにデフォルトで設定されるものも存在します。ディメンションごとに出力されているメトリクスの内容を確認していきます。
ImageId,InstanceId,InstanceType,device,fstype,path
「CWAgent」というカスタム名前空間の中で、さらにいくつか項目が分かれています。例えば、「ImageId,InstanceId,InstanceType,device,fstype,path」というディメンション配下には、Linuxサーバーのディスク関連のメトリクスが出力されます。
今回はディスク使用率のみCloudWatchAgentで取得しているため、ディスク使用率(disk_used_percent)が出力されています。
ImageId,InstanceId,InstanceType,instance,objectname
「ImageId,InstanceId,InstanceType,instance,objectname」というディメンションの配下には、Windowsサーバーのディスク関連のメトリクスが出力されます。
Windowsサーバーの場合は、「LogicalDisk%Free Space」という名前で、ディスクの空き容量率が出力されます。
ImageId,InstanceId,InstanceType,objectname
「ImageId,InstanceId,InstanceType,objectname」というディメンションの配下には、Windowsサーバーのメモリ関連のメトリクスが出力されます。
今回はメモリ使用率を出力するよう設定しています。
Windowsサーバーの場合は、メモリ使用率は「Memory % Commited Bytes In Use」という名前で出力されます。
ImageId,InstanceId,InstanceType
「ImageId,InstanceId,InstanceType」というディメンションの配下には、Linuxのメモリ関連のメトリクスが出力されます。
今回はメモリ使用率を出力する要設定しています。Linuxのメモリ使用率は「mem_used_percent」という名前で出力されます。
InstanceID
「InstanceID」というディメンションの配下には、各EC2のメモリ・ディスク使用量などがインスタンスID単位で集約され出力されています。
CloudWatchConfigウィザードでメトリクスをインスタンスタイプで集約するの質問に1と答えた場合は、このような形でインスタンスID単位で集約されたメトリクスが出力されます。
CloudWatchメトリクスのコンソール操作確認
メトリクスの表示画面の操作方法を少しだけ確認しておきます。
メトリクスグラフの表示範囲・タイムゾーンの変更
メトリクスのチェックボックスにチェックを入れると、メトリクスの時系列グラフを表示することができます。
デフォルトの状態だと、CloudWatchメトリクスの表示範囲は直近3時間・グラフの表示時刻はUTCで表示されます。
グラフの表示期間を変更したい場合は、画面上部のメニューから変更します。「Custom」を選ぶと、任意の期間でグラフを表示させることもできます。
また、画面上部の「Local timezone」のメニューを展開すると、タイムゾーンの変更が行えます。
アクションメニューの内容
右上の「アクション」のメニューからメトリクスのグラフに対して様々な操作が行えます。各項目の内容については、上記画像の吹き出し内をご参照ください。
データポイントの変更
デフォルトの状態だと、グラフは5分ごとのデータポイントでメトリクスを表示しています。データポイントの間隔を変更する場合は、「グラフ化したメトリクス」から設定が行えます。
「グラフ化したメトリクス」の表示画面です。「期間」のメニューからデータポイントの間隔を伸ばしたり、短くしたりすることができます。
また、データの統計方法を変更することも可能です。
SNSトピックの作成
CloudWatchで取得したサーバーの負荷状況を監視するため、通知設定を行います。
CloudWatchメトリクスの通知は、CloudWatchAlarmとSNSを連携させることで設定できます。
まずは、SNSにてSNSトピックの作成と、送信先のメールアドレスの設定を行います。
SNSトピックの作成
トピックの作成画面が表示されます。
今回は「スタンダード」を選択します。名前・表示名を入力し、下へスクロールします。
今回は検証用のため、暗号化・アクセスポリシー・データ保護ポリシー・配信ポリシー・配信ステータスのログ記録はデフォルトの状態とします。
各設定項目の詳細については、今回は割愛します。
詳細を確認したい場合は、SNSのユーザーガイドをご参照ください。
全ての設定を完了したら、「トピックの作成」を押下します。
トピックの作成が完了すると、トピックの詳細画面へ移動します。
サブスクリプションの作成
作成したSNSトピックに対して、SNSのメール配信先を登録します。
「サブスクリプションの作成」を押下します。
サブスクリプションの作成画面が表示されます。
「プロトコル」に「Eメール」を選択し、「エンドポイント」に配信先のメールアドレスを指定します。
※ここで指定したメールアドレスあてに、AWSからサブスクリプション開始確認のメールが発報されます。
サブスクリプションフィルターポリシー・Redriveポリシーはデフォルトのまま、「サブスクリプションの作成」を押下します。
サブスクリプションの確認
サブスクリプションの作成が完了すると、サブスクリプションの詳細画面に移動します。
サブスクリプションの作成直後は、ステータスが「保留中の確認」の状態になっています。
サブスクリプションに登録したアドレス宛にAWSからサブスクリプション登録確認のメールが発報されています。サブスクリプション登録の確認が完了すると、ステータスが「確認済」の状態に変化します。
サブスクリプション登録したメールアドレス宛には、上記画像のようなメールが発報されています。メール内に記載のリンクを押下し、サブスクリプション登録を完了させます。
SNSトピックのメール送信元アドレス・メール文面を下記に記載しておきます。
■送信元アドレス
no-reply@sns.amazonaws.com
■メール文面
You have chosen to subscribe to the topic:arn:aws:sns:リージョン名:アカウントID:トピック名
To confirm this subscription, click or visit the link below (If this was in error no action is necessary):Confirm subscription
Please do not reply directly to this email. If you wish to remove yourself from receiving all future SNS subscription confirmation requests please send an email to sns-opt-out
メール内に記載のリンクを押下すると、AWSのサブスクリプション完了ページが表示されます。
これで、SNSトピックのサブスクリプションが完了しました。
サブスクリプションの確認が完了すると、SNSトピックのサブスクリプションのステータスが「確認済」の状態となります。
ここまでの手順で、SNSトピックの設定は完了です。
CloudWatchAlarmの作成
CloudWatchメトリクスに対してCloudWatchAlarmを作成し、サーバー監視を行います。
CloudWatchのトップページを表示します。左メニューから、「すべてのアラーム」を押下します。
CloudWatchのアラーム一覧が表示されます。右上の「アラームの作成」を押下します。
メトリクスの選択
「メトリクスの選択」を押下します。
メトリクスの選択画面が表示されます。今回はEC2のメモリ監視を行いたいため、「CWAgent」のカスタム名前空間を押下します。
「ImageID,InstanceID,InstanceType」のディメンションを押下します。
メモリ関連のメトリクスが一覧で表示されています。監視を行いたいメトリクスのチェックボックスにチェックを入れ、「メトリクスの選択」を押下します。
メトリクスが選択されました。
メトリクスの統計・評価期間の設定
メトリクスの統計方法・評価期間の設定を行います。
今回は検証用のため、「統計」はデフォルトの「平均値」、「期間」は「5分」とします。
※「統計」は平均値以外にも、合計、最大、最小、パーセンタイルなど様々な統計方法を選択できます。詳細は公式ドキュメントのCloudWatch 統計定義をご参照ください。
※「期間」はメトリクスや式を評価するために必要となる時間のことです。10秒~1日の間から選択できます。「カスタム」を選択して、任意の秒数を指定することも可能です。今回は5分を指定したため、5分間の平均値でアラーム状態にするかどうかの判断が行われます。詳細は公式ドキュメントのアラームの評価をご参照ください。
アラームしきい値の設定
メトリクスの選択・統計の選択・期間の選択が完了したら、下へスクロールします。
アラームを発報する条件の設定項目です。
今回はメモリの使用率が80%を超えた時にアラームを出すように設定したいです。
そのため、「しきい値の種類」には「静的」を選択します。
※しきい値に「異常検出」を選択した場合は、過去のメトリクスデータをもとにCloudWatch側で異常な値を検知します。詳細は公式ドキュメントの異常検出に基づいて CloudWatch アラームを作成するをご参照ください。
今回は、メモリ利用率が80%を越した場合(81%になった瞬間から)アラートを出したいです。そのため、アラーム条件には、「より大きい(> しきい値)」を選択します。
「……よりも」という見出しのテキストボックス内に、具体的なしきい値を入力します。今回は、80を入力しました。
しきい値を入力すると、CloudWatchAlarm設定画面上部のグラフ部分に、しきい値のラインが表示されます。
データポイント・欠落データの処理設定
下にスクロールし、条件設定画面に戻ります。
「その他の設定」セクションにて、アラームを実行するデータポイント・欠落データの処理の設定を行うことができます。今回は、どちらもデフォルトの状態で設定します。
「アラームを実行するデータポイント」は、アラームを発報する際の判断基準の一つです。「評価期間内にいくつのデータポイントを評価するか、評価したデータポイントのうちのいくつがしきい値を超過したらアラートを発報するか」の設定です。今回の場合は、評価期間を5分、データポイントを1/1で設定しています。この場合は、5分間に1つのデータポイントを確認し、1つのデータポイントの値が80%を超過したらアラートが発報されます。
CloudWatchAlarmの評価方法の詳細については、公式ドキュメントのアラームの評価をご参照ください。
「欠落データ処理」では、データポイントが欠落している場合の処理方法を設定します。インスタンスやCloudWatchAgentが停止しているなどの理由で、メトリクスが出力できないこと考えられます。評価期間内にメトリクスが出力されていない場合、CloudWatchAlarm側は「データが欠落している」と判断し、「欠落データの処理」の設定に基づいた対応を行います。今回はデフォルトの「欠落データを見つかりませんとして処理」を設定しました。
サーバーの死活監視などでCloudWatchAlarmを使用する場合は、「欠落データを不正(しきい値を超えている)として処理する」という設定も検討してください。
欠落データの処理の詳細については、公式ドキュメントのCloudWatch アラームの欠落データの処理の設定をご参照ください。
全ての設定が完了したら、「次へ」を押下します。
CloudWatchAlarmアクションの設定
アクションの設定画面が表示されます。
「通知」セクションで、アラートメールを発報するSNSトピック設定が行えます。
「アラーム状態トリガー(アラートメールを発報する条件)」には、「アラーム状態(メトリクスがしきい値を超えた時)」を設定します。
「次のSNSトピックに通知を送信」には「既存のSNSトピックを選択」を押下します。
「通知の送信先」には、先ほど作成したSNSトピックを設定します。
下にスクロールします。
CloudWatchAlarmでは、SNSトピックの発報以外にも、Lambdaの実行・AutoScallingの実行など複数の処理が行えます。
今回はSNSトピックにて通知の発報のみを行いたいので、その他の設定については変更せず、「次へ」を押下します。
アラーム一覧画面に戻ります。
作成したCloudWatchAlarmが正しく設定されていることを確認します。
これで、アラームの設定が完了しました。
CloudWatchAlarmから届くメール文面について
メモリ使用率がしきい値を超過した場合は、AWSから画像のような内容のアラートメールが発報されます。
アラートメールは英文で送られてきます。
アラートメールの文例を下記に記載します。
※アカウントIDやインスタンスID、メールアドレスなどをマスクしたため、一部実際のアラートメールの文面と異なる部分があります。
■アラートメールの文面
You are receiving this email because your Amazon CloudWatch Alarm "CLOUDWATCH_DEMO_MEMORY" in the Asia Pacific (Tokyo) region has entered the ALARM state, because "Threshold Crossed: 1 out of the last 1 datapoints [81.82552528381348 (03/03/24 05:30:00)] was greater than the threshold (80.0) (minimum 1 datapoint for OK -> ALARM transition)." at "Sunday 03 March, 2024 05:35:17 UTC".
View this alarm in the AWS Management Console:
https://ap-northeast-1.console.aws.amazon.com/cloudwatch/*************************/CLOUDWATCH_DEMO_MEMORY
Alarm Details:
- Name: CLOUDWATCH_DEMO_MEMORY
- Description:
- State Change: OK -> ALARM
- Reason for State Change: Threshold Crossed: 1 out of the last 1 datapoints [81.82552528381348 (03/03/24 05:30:00)] was greater than the threshold (80.0) (minimum 1 datapoint for OK -> ALARM transition).
- Timestamp: Sunday 03 March, 2024 05:35:17 UTC
- AWS Account: ******
- Alarm Arn: arn:aws:cloudwatch:ap-northeast-1:******:alarm:CLOUDWATCH_DEMO_MEMORY
Threshold:
- The alarm is in the ALARM state when the metric is GreaterThanThreshold 80.0 for at least 1 of the last 1 period(s) of 300 seconds.
Monitored Metric:
- MetricNamespace: CWAgent
- MetricName: Memory % Committed Bytes In Use
- Dimensions: [InstanceId = i-*********] [objectname = Memory] [ImageId = ami-*********] [InstanceType = t2.medium]
- Period: 300 seconds
- Statistic: Average
- Unit: not specified
- TreatMissingData: missing
State Change Actions:
- OK:
- ALARM: [arn:aws:sns:ap-northeast-1:******:HTTPS_DEMO_WEB_SNS]
- INSUFFICIENT_DATA:
--
If you wish to stop receiving notifications from this topic, please click or visit the link below to unsubscribe:
https://sns.ap-northeast-1.amazonaws.com/unsubscribe.html?SubscriptionArn=arn:aws:sns:ap-northeast-1:******:HTTPS_DEMO_WEB_SNS:**************:&Endpoint=***********
Please do not reply directly to this email. If you have any questions or comments regarding this email, please contact us at https://aws.amazon.com/support
文面が読みづらい場合は、EventBridgeやLambdaなどで、CloudWatchAlarmの通知内容を整形する処理を行うことをお勧めします。
ここまでお読みいただきありがとうございました。
CloudWatchAgentのConfigファイルの記述方法については、別途補足記事を書こうと思います。また、EventBridgeによるCloudWatchAlarmの整形方法についても、時間があれば記事で補足していきたいです。