LoginSignup
3
2

More than 5 years have passed since last update.

AWSのOpsWorksでEC2のステータスチェック失敗アラームを作成する

Last updated at Posted at 2016-10-15

AWSのEC2インスタンスに組み込まれているステータスチェックのアラームをOpsWorksが提供するChefのレシピで作成する手順です。
EC2インスタンスは障害が発生したときにステータスチェックの失敗を報告して再起動することがあるので、そのチェックのためのアラームです。(ステータスチェックについては https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/monitoring-system-instance-status-check.html?icmpid=docs_ec2_console を参照)

前提条件

  • OS: Amazon Linux 2016.09
  • OpsWorksのChefのバージョン: 12

SNSトピックの作成

先に通知先のSNSトピックをCloudFormationで作成します。Endpointのメールアドレスは適宜読み替えて下さい(AWS::SNS::Topicについては https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/aws-properties-sns-topic.html を参照)。 PropertiesTopicName(https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/aws-properties-sns-topic.html#cfn-sns-topic-name) については指定するとリソースの置き換えが発生したときにエラーが発生する(更新の度に新しい名前を指定する必要がある)のであえて指定しません。

sns.template
{
  "AWSTemplateFormatVersion": "2010-09-09",
  "Description": "SNS Topic",
  "Resources": {
    "AlarmTopic": {
      "Type": "AWS::SNS::Topic",
      "Properties": {
        "DisplayName": "ステータスチェック失敗の通知",
        "Subscription": [
          {
            "Endpoint": "hoge@example.com",
            "Protocol": "email"
          }
        ]
      }
    }
  },
  "Outputs": {
    "AlarmTopic": {
      "Value": {
        "Ref": "AlarmTopic"
      },
      "Description": "Alarm Topic ARN"
    }
  }
}

トピックSNSのARNをChefレシピのattributesに設定

CloudFormationで作成したスタックのOutputsタブに作成したSNSトピックのARNが表示されるのでここに貼り付けます。(AWSコンソールのCloufFormationの画面から作成したスタックを選択し、Outputsタブをクリックすると表示されます)

sample_cookbook/attributes/default.rb
default[:sns][:alarm_topic] = "arn:aws:sns:ap-northeast-1:*******************"

アラーム作成のレシピ

awscliを使ってアラームを作成します。

sample_cookbook/recipes/default.rb
##
#=== data bagsから情報を取得
stack = search(:aws_opsworks_stack).first
instance = search(:aws_opsworks_instance, "hostname:#{node[:hostname]}").first

##
#=== ステータスチェック失敗アラームの作成
execute "Create status check failed alarm" do
  command %W{
    aws cloudwatch put-metric-alarm
    --region "#{stack[:region]}"
    --alarm-name "#{stack[:name]} StatusCheckFailed at #{node[:hostname]} > 1"
    --alarm-description "[#{stack[:name]}]#{node[:hostname]}(#{instance[:ec2_instance_id]})でステータスチェックに失敗しました。"
    --metric-name StatusCheckFailed
    --namespace 'AWS/EC2'
    --statistic Maximum
    --period 300
    --threshold 0
    --comparison-operator GreaterThanThreshold
    --dimensions Name=InstanceId,Value="#{instance[:ec2_instance_id]}"
    --alarm-actions #{node[:sns][:alarm_topic]}
    --ok-actions #{node[:sns][:alarm_topic]}
    --evaluation-periods 1
    --unit Count
  }.join(' ')
end

参考元

http://docs.aws.amazon.com/cli/latest/reference/cloudwatch/put-metric-alarm.html
https://docs.aws.amazon.com/ja_jp/opsworks/latest/userguide/data-bags.html

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2