Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
AWSで構築したのだよ 
「ec2起動時にアラーム設定を 
クラウドウォッチに追加したい」
AWS構築時のノウハウを残し 
共有します 
 注意 
順番に記載されているため、前のテーマで記載さ 
れている内容が前提となる場合があります。
お品書き 
 ユーザのコンソール操作をログに残したい 
 ec2で自分のインスタンスIDが知りたい 
 ec2で自分についているタグを読み取りたい 
 ec2起動時にホスト名を変更したい 
 プロセス監視、メモリ使用率、ディスク使用率...
ec2起動時にアラーム設定を 
クラウドウォッチに追加したい 
(1/6) 
 ec2を新しく起動したときに、自動でCloudwatch 
にアラーム設定を行い、監視対象とする。 
 ec2を停止するときに、Cloudwatchのアラーム設...
ec2起動時にアラーム設定を 
クラウドウォッチに追加したい 
(2/6) 
 ユーザに、カスタムメトリクスに登録権限を付与 
します。 
設定方法は、カスタムメトリクス追加の回をご覧 
ください。
ec2起動時にアラーム設定を 
クラウドウォッチに追加したい 
(3/6) 
 通知用のトピックを作成する
 Subscribeしたメール宛てに、確認メールが届きま 
すのでリンクをクリックして確認を行います。
 Alertと同様に、CautionとWarningを作成します。 
 作成したAlert、Caution、WarningのTopic ARNをメ 
モします。これから作成するスクリプトに埋め込 
むのに使います。
ec2起動時にアラーム設定を 
クラウドウォッチに追加したい 
(4/6) 
 アラートの追加と削除用のスクリプトを用意する。 
監視内容閾値備考 
StatusCheckFailed >= 0 サーバダウン時 
0(成功) か1(失敗) 
...
 アラート登録用スクリプトを用意します。 
# vi entryAlert.rb 
#!/usr/bin/env ruby 
# encoding: utf-8 
# 1.メトリクスの監視をアラートに登録する。 
# 
require 'ru...
cw_config = [ 
{ 
"namespace"=> "AWS/EC2", 
"alert_level"=> "RED", 
"description"=> "SERVER DOWN", 
"metric_name"=> "Statu...
{ 
"namespace"=> "AWS/EC2", 
"alert_level"=> "YEL", 
"description"=> "CPU Utilization", 
"metric_name"=> "CPUUtilization",...
{ 
"namespace"=> "Custom/EC2", 
"alert_level"=> "RED", 
"description"=> "PROCESS DOWN[#{@process1}]", 
"metric_name"=> "pr...
cw = AWS::CloudWatch.new 
cw_config.each do |config| 
alert_name = ["[#{@system}_#{config["alert_level"]}]", config["descr...
 アラート削除用スクリプトを用意します。 
# vi deleteAlert.rb 
#!/usr/bin/env ruby 
# encoding: utf-8 
# 1.アラーを削除する。 
# 
require 'rubygems' 
...
cw_config = [ 
{ 
"namespace"=> "AWS/EC2", 
"alert_level"=> "RED", 
"description"=> "SERVER DOWN", 
"metric_name"=> "Statu...
{ 
"namespace"=> "AWS/EC2", 
"alert_level"=> "YEL", 
"description"=> "CPU Utilization", 
"metric_name"=> "CPUUtilization",...
{ 
"namespace"=> "Custom/EC2", 
"alert_level"=> "RED", 
"description"=> "PROCESS DOWN[#{@process1}]", 
"metric_name"=> "pr...
cw = AWS::CloudWatch.new 
cw_config.each do |config| 
alert_name = ["[#{@system}_#{config["alert_level"]}]", config["descr...
 タグ取得用スクリプトを用意します。 
# vi ec2tag.rb 
def get_tag_set(ec2, instance_id) 
tag_set = ec2.describe_instances(:instance_ids => ...
ec2起動時にアラーム設定を 
クラウドウォッチに追加したい 
 手動でスクリプトを実行し、動作を確認します。 
# ruby entryAlert.rb 
# ruby deleteAlert.rb 
(5/6)
ec2起動時にアラーム設定を 
クラウドウォッチに追加したい 
(6/6) 
 起動停止時にスクリプトを実行するように設定す 
る。
# vi /etc/init.d/entry-to-cloudwatch 
#!/bin/sh 
# chkconfig: 345 80 20 
# 
# This script will be executed *before* all th...
パーミッションを変更 
# chmod 755 /etc/init.d/entry-to-cloudwatch 
自動起動の設定 
# chkconfig entry-to-cloudwatch on
Awsで構築したのだよ 06 ec2インスタンス起動時にCloudWatchのアラームを追加する
Upcoming SlideShare
Loading in …5
×

Awsで構築したのだよ 06 ec2インスタンス起動時にCloudWatchのアラームを追加する

1,611 views

Published on

AWSでサービスを構築した際のノウハウ集06
ec2インスタンス起動時にCloudWatchのアラームを追加する
ec2インスタンス停止時にCloudWatchのアラームを削除する

Published in: Technology
  • Be the first to comment

Awsで構築したのだよ 06 ec2インスタンス起動時にCloudWatchのアラームを追加する

  1. 1. AWSで構築したのだよ 「ec2起動時にアラーム設定を クラウドウォッチに追加したい」
  2. 2. AWS構築時のノウハウを残し 共有します  注意 順番に記載されているため、前のテーマで記載さ れている内容が前提となる場合があります。
  3. 3. お品書き  ユーザのコンソール操作をログに残したい  ec2で自分のインスタンスIDが知りたい  ec2で自分についているタグを読み取りたい  ec2起動時にホスト名を変更したい  プロセス監視、メモリ使用率、ディスク使用率をCloudwatchのカスタムメ トリクスに追加したい  ec2起動時にアラーム設定をクラウドウォッチに追加したい  Amazon Linuxのsshの認証方式を、ID/PWに変更したい。  VPNのプライベートネットワークでNTPを使いたい  プライベートネットワークのRDSにssh経由で接続したい  夜間にec2を落としたい  サーバーのシャットダウン時にログを退避したい
  4. 4. ec2起動時にアラーム設定を クラウドウォッチに追加したい (1/6)  ec2を新しく起動したときに、自動でCloudwatch にアラーム設定を行い、監視対象とする。  ec2を停止するときに、Cloudwatchのアラーム設 定を解除し監視対象から外す。
  5. 5. ec2起動時にアラーム設定を クラウドウォッチに追加したい (2/6)  ユーザに、カスタムメトリクスに登録権限を付与 します。 設定方法は、カスタムメトリクス追加の回をご覧 ください。
  6. 6. ec2起動時にアラーム設定を クラウドウォッチに追加したい (3/6)  通知用のトピックを作成する
  7. 7.  Subscribeしたメール宛てに、確認メールが届きま すのでリンクをクリックして確認を行います。
  8. 8.  Alertと同様に、CautionとWarningを作成します。  作成したAlert、Caution、WarningのTopic ARNをメ モします。これから作成するスクリプトに埋め込 むのに使います。
  9. 9. ec2起動時にアラーム設定を クラウドウォッチに追加したい (4/6)  アラートの追加と削除用のスクリプトを用意する。 監視内容閾値備考 StatusCheckFailed >= 0 サーバダウン時 0(成功) か1(失敗) DiskUsage_root >=80 使用率が80%を超えたら CPUUtilization >=90 CPU使用率 MemoryUsage >=90 メモリ使用率 process_http <1 プロセスが無くなったら process_tomcat6 <1 プロセスが無くなったら
  10. 10.  アラート登録用スクリプトを用意します。 # vi entryAlert.rb #!/usr/bin/env ruby # encoding: utf-8 # 1.メトリクスの監視をアラートに登録する。 # require 'rubygems' require 'aws-sdk' require './ec2tag' AWS.config(YAML.load(File.read("./aws.yml"))) @instanceID = `wget --no-proxy -q -O - http://169.254.169.254/latest/meta-data/instance-id` @ec2 = AWS::EC2.new().client # ec2のタグよりNAMEを取得します。 @name = get_name_tag(@ec2, @instanceID) @system = 'SYSTEM01' @process1 = 'httpd' @process2 = 'tomcat6'
  11. 11. cw_config = [ { "namespace"=> "AWS/EC2", "alert_level"=> "RED", "description"=> "SERVER DOWN", "metric_name"=> "StatusCheckFailed", "threshold"=> 0, "comparison_operator"=> "GreaterThanThreshold", "statistic"=> "Average", "arn"=> ["arn:aws:sns:ap-northeast-1:969331845486:Alert"], }, { "namespace"=> "Custom/EC2", "alert_level"=> "YEL", "description"=> "DISK USAGE", "metric_name"=> "DiskUsage_root", "threshold"=> 80, "comparison_operator"=> "GreaterThanThreshold", "statistic"=> "Average", "arn"=> ["arn:aws:sns:ap-northeast-1:969331845486:Warning"], },
  12. 12. { "namespace"=> "AWS/EC2", "alert_level"=> "YEL", "description"=> "CPU Utilization", "metric_name"=> "CPUUtilization", "threshold"=> 90, "comparison_operator"=> "GreaterThanThreshold", "statistic"=> "Average", "arn"=> ["arn:aws:sns:ap-northeast-1:969331845486:Caution"], }, { "namespace"=> "Custom/EC2", "alert_level"=> "YEL", "description"=> "MEMORY USAGE", "metric_name"=> "MemoryUsage", "threshold"=> 90, "comparison_operator"=> "GreaterThanThreshold", "statistic"=> "Average", "arn"=> ["arn:aws:sns:ap-northeast-1:969331845486:Caution"], },
  13. 13. { "namespace"=> "Custom/EC2", "alert_level"=> "RED", "description"=> "PROCESS DOWN[#{@process1}]", "metric_name"=> "process_#{@process1}", "threshold"=> 1, "comparison_operator"=> "LessThanThreshold", "statistic"=> "Maximum", "arn"=> ["arn:aws:sns:ap-northeast-1:969331845486:Alert"], }, { "namespace"=> "Custom/EC2", "alert_level"=> "RED", "description"=> "PROCESS DOWN[#{@process2}]", "metric_name"=> "process_#{@process2}", "threshold"=> 1, "comparison_operator"=> "LessThanThreshold", "statistic"=> "Maximum", "arn"=> ["arn:aws:sns:ap-northeast-1:969331845486:Alert"], }, ]
  14. 14. cw = AWS::CloudWatch.new cw_config.each do |config| alert_name = ["[#{@system}_#{config["alert_level"]}]", config["description"], "(#{@name}[#{@instanceID}])"].join("") cw.alarms.create( alert_name,{ "namespace"=> config["namespace"], "metric_name"=> config["metric_name"], "threshold"=> config["threshold"], "comparison_operator"=> config["comparison_operator"], "statistic"=> config["statistic"], "period"=> 300, "dimensions"=> [ { "name"=> "InstanceId", "value"=> @instanceID} ], "evaluation_periods"=> 1, "alarm_actions"=> config["arn"]} ) end
  15. 15.  アラート削除用スクリプトを用意します。 # vi deleteAlert.rb #!/usr/bin/env ruby # encoding: utf-8 # 1.アラーを削除する。 # require 'rubygems' require 'aws-sdk' require './ec2tag' AWS.config(YAML.load(File.read("./aws.yml"))) @instanceID = `wget --no-proxy -q -O - http://169.254.169.254/latest/meta-data/instance-id` @ec2 = AWS::EC2.new().client @name = get_name_tag(@ec2, @instanceID) @system = 'SYSTEM01' @process1 = 'httpd' @process2 = 'tomcat6'
  16. 16. cw_config = [ { "namespace"=> "AWS/EC2", "alert_level"=> "RED", "description"=> "SERVER DOWN", "metric_name"=> "StatusCheckFailed", "threshold"=> 0, "comparison_operator"=> "GreaterThanThreshold", "statistic"=> "Average", "arn"=> ["arn:aws:sns:ap-northeast-1:969331845486:Alert"], }, { "namespace"=> "Custom/EC2", "alert_level"=> "YEL", "description"=> "DISK USAGE", "metric_name"=> "DiskUsage_root", "threshold"=> 80, "comparison_operator"=> "GreaterThanThreshold", "statistic"=> "Average", "arn"=> ["arn:aws:sns:ap-northeast-1:969331845486:Warning"], },
  17. 17. { "namespace"=> "AWS/EC2", "alert_level"=> "YEL", "description"=> "CPU Utilization", "metric_name"=> "CPUUtilization", "threshold"=> 90, "comparison_operator"=> "GreaterThanThreshold", "statistic"=> "Average", "arn"=> ["arn:aws:sns:ap-northeast-1:969331845486:Caution"], }, { "namespace"=> "Custom/EC2", "alert_level"=> "YEL", "description"=> "MEMORY USAGE", "metric_name"=> "MemoryUsage", "threshold"=> 90, "comparison_operator"=> "GreaterThanThreshold", "statistic"=> "Average", "arn"=> ["arn:aws:sns:ap-northeast-1:969331845486:Caution"], },
  18. 18. { "namespace"=> "Custom/EC2", "alert_level"=> "RED", "description"=> "PROCESS DOWN[#{@process1}]", "metric_name"=> "process_#{@process1}", "threshold"=> 1, "comparison_operator"=> "LessThanThreshold", "statistic"=> "Maximum", "arn"=> ["arn:aws:sns:ap-northeast-1:969331845486:Alert"], }, { "namespace"=> "Custom/EC2", "alert_level"=> "RED", "description"=> "PROCESS DOWN[#{@process2}]", "metric_name"=> "process_#{@process2}", "threshold"=> 1, "comparison_operator"=> "LessThanThreshold", "statistic"=> "Maximum", "arn"=> ["arn:aws:sns:ap-northeast-1:969331845486:Alert"], }, ]
  19. 19. cw = AWS::CloudWatch.new cw_config.each do |config| alert_name = ["[#{@system}_#{config["alert_level"]}]", config["description"], "(#{@name}[#{@instanceID}])"].join("") cw.alarms.delete( alert_name ) end
  20. 20.  タグ取得用スクリプトを用意します。 # vi ec2tag.rb def get_tag_set(ec2, instance_id) tag_set = ec2.describe_instances(:instance_ids => [instance_id])[:instance_index][instance_id][:tag_set] return tag_set end def get_name_tag(ec2, instance_id) tag_set = get_tag_set(@ec2, @instanceID) tag_set.each do |tag| if /name/i =~ tag[:key] @name = tag[:value] return tag[:value] end end reruen "" end
  21. 21. ec2起動時にアラーム設定を クラウドウォッチに追加したい  手動でスクリプトを実行し、動作を確認します。 # ruby entryAlert.rb # ruby deleteAlert.rb (5/6)
  22. 22. ec2起動時にアラーム設定を クラウドウォッチに追加したい (6/6)  起動停止時にスクリプトを実行するように設定す る。
  23. 23. # vi /etc/init.d/entry-to-cloudwatch #!/bin/sh # chkconfig: 345 80 20 # # This script will be executed *before* all the other holt scripts. # You can put your own terminate stuff in here. case "$1" in start) # Alert entry to Cloud Watch touch /var/lock/subsys/entry-to-cloudwatch /usr/bin/ruby /opt/aws/entry_alert.rb ;; stop) # Alert delete form Cloud Watch rm -f /var/lock/subsys/entry-to-cloudwatch /usr/bin/ruby /opt/aws/delete_alert.rb ;; *) echo "Usage: $0 {start|stop}" exit 1 esac exit 0
  24. 24. パーミッションを変更 # chmod 755 /etc/init.d/entry-to-cloudwatch 自動起動の設定 # chkconfig entry-to-cloudwatch on

×