【AWS】CloudWatch入門/EC2のステータスチェックを行ってみよう

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

こんにちは植木和樹です。そもそもCloudWatchってどんなことができるの?という質問をお客様から受けまして、そのお答えの一つとして「 CloudWatch Metrics for EC2 Status Checks」(初出:2012/07/18)で発表された、CloudWatchを使ったEC2のステータスチェックをご紹介したいと思います。

EC2のステータスチェックというのは、AWS内部で行われているインスタンスの正常性テストのことで、EC2のコンソールで(2/2 checks passed)と表示されているものです。

20130815_ec2-status-check_01

仮想マシンレベルで疎通がとれているかチェックしている「System Status Checks」と、OSレベルで疎通がとれているかチェックする「Instance Status Checks」の2つがあります。「System Status Checks」がエラーの場合はAWSデータセンター内の機器(電源、ネットワーク、仮想ソフトウェア)で問題が起きている可能性があります。「Instance Status Checks」がエラーの場合は、OSの障害やネットワーク設定ミスが考えられます。

CloudWatchのEC2のステータスチェックメトリクスってなに?

2012年7月18日に、CloudWatchを使ってEC2のステータスチェック用メトリクス(注:収集項目のこと)が提供されました。このメトリクスを使うと、EC2のステータスチェック結果をグラフでみたり、履歴を分析したり、アラームを設定したりすることができるようになります。

  • 使用は無料です – EC2ステータスチェックのメトリクスは、すべてのEC2インスタンスで課金はされませんし、EC2のベーシックモニタリング項目にも含まれています。すべてのEC2インスタンスについて最大14日分のステータス履歴をみることができます。
  • 最初から使えます – EC2ステータスチェックのメトリクスは、現在実行中のすべてのEC2インスタンスで有効になっていますし、今後新しく起動するEC2でも自動的に有効になります。
  • CloudWatchアラームもサポートしています – EC2ステータスチェックのメトリクスはCloudWatchアラーム機能と連携することで、インスタンスで問題を検知したときに自動的に通知を送ることができます(アラームの使用には追加料金が必要な場合があります)

CloudWatchでEC2ステータスチェックメトリクスの見る方法や、アラームによる自動通知など、さらに知りたい場合は「Monitoring Your Instances and Volumes with CloudWatch」を参照してください。

EC2のステータスチェックについて、さらに知りたい場合は「Monitoring Instances with Status Checks」を参照してください。

CloudWatchや、アラームの料金について知りたい場合は「CloudWatchの詳細ページ」を参照してください。

EC2でステータスチェックに失敗したらメールを送ってみよう

実際にマネージメントコンソールで設定してみましょう。EC2のコンソールを開いて、監視したいインスタンスをチェックしたら、画面下の「Status Checks」タブを開きます。「Create Status Check Alarm」というボタンがあるのでクリックしましょう。

20130815_ec2-status-check_02

次にステータスチェックに失敗したときに通知するメールアドレスと、通知する際の条件を入力します。下の例では「2つのチェック項目いずれか」が「5分毎」のチェックで連続して「2回」チェックに失敗したらメールを送信します。

20130815_ec2-status-check_03

それではステータスチェックを失敗させてみましょう。EC2にsshでログインして、ネットワークを止めてみましょうか。

$ sudo ifdown eth0

10分ほど後にCloudWatchからアラームメールが届けば成功です!

EC2ステータスチェックが失敗した時に送られるメールの例

You are receiving this email because instance i-XXXXXXXX in region APAC - Tokyo has failed an instance
or a system status check for at least 2 period(s) of 300 seconds at "Thursday 15 August, 2013 04:35:03 UTC".
You can view status check details about this instance by navigating to the EC2 console at 
https://console.aws.amazon.com/ec2/home?region=ap-northeast-1#s=Instances, 
selecting the instance and clicking on the Status Check tab.

Information about troubleshooting instances with failed status checks:
http://docs.amazonwebservices.com/AWSEC2/latest/UserGuide/TroubleshootingInstances.html.

Information about EC2 Status Checks:
http://docs.amazonwebservices.com/AWSEC2/latest/UserGuide/monitoring-system-instance-status-check.html.

View this alarm in the AWS Management Console:
https://console.aws.amazon.com/cloudwatch/home?region=ap-northeast-1#s=Alarms&alarm=awsec2-Web-i-XXXXXXXX-High-Status-Check-Failed-Any

More details about this alarm are provided below:


---

Alarm Details:
- Name:                       awsec2-Web-i-XXXXXXXX-High-Status-Check-Failed-Any
- Description:                Created from EC2 Console
- State Change:               OK -> ALARM
- Reason for State Change:    Threshold Crossed: 2 datapoints were greater than or equal to the threshold (1.0). The most recent datapoints: [1.0, 1.0].
- Timestamp:                  Thursday 15 August, 2013 04:35:03 UTC
- AWS Account:                123456789012

Threshold:
- The alarm is in the ALARM state when the metric is GreaterThanOrEqualToThreshold 1.0 for 300 seconds.

Monitored Metric:
- MetricNamespace:            AWS/EC2
- MetricName:                 StatusCheckFailed
- Dimensions:                 [InstanceId = i-XXXXXXXX]
- Period:                     300 seconds
- Statistic:                  Maximum
- Unit:                       not specified

State Change Actions:
- OK:
- ALARM: [arn:aws:sns:ap-northeast-1:123456789012:InstanceDown]
- INSUFFICIENT_DATA:

まとめ

仕事柄たくさんのEC2インスタンスを扱っていますが、インスタンス障害はめったに起きるものではありません。ただ当然のこと障害はゼロにはならないですし、EC2の場合は障害が起きたとしてもインスタンスを再起動してあげるだけで復旧することが大半です。再起動はiPhoneアプリからマネージメントコンソールを開いて実行することもできますから、以下に早く障害に気づけるかがポイントだと思います。ぜひEC2のステータスチェックをアラーム通知設定して、迅速な対応を心がけましょう!