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で構築したのだよ 
「プロセス監視、メモリ使用率、ディスク使用率を 
Cloudwatchのカスタムメトリクスに追加し 
たい」
AWS構築時のノウハウを残し 
共有します 
 注意 
順番に記載されているため、前のテーマで記載さ 
れている内容が前提となる場合があります。
お品書き 
 ユーザのコンソール操作をログに残したい 
 ec2で自分のインスタンスIDが知りたい 
 ec2で自分についているタグを読み取りたい 
 ec2起動時にホスト名を変更したい 
 プロセス監視、メモリ使用率、ディスク使用率...
カスタムメトリクスに追加した 
い(1/5) 
 AWSサービスとして提供されているものについて 
は、標準メトリクスで参照することができます。 
しかし、OS側からしか見えないもの、プロセスの 
死活監視、メモリの使用状況やディスクの使用状...
カスタムメトリクスに追加した 
い(2/5) 
 ユーザに、カスタムメトリクスに登録権限を付与 
します。 
(または、ec2に権限を委譲するロールを作成しま 
す。)
カスタムメトリクスに追加した 
い(3/5) 
 メトリクスのもととなるデータを作成して、 
Cloudwatchに登録する、スクリプトを作成します。
権限を持ったユーザの情報、リージョンの情報など、操作に必要な情報をyml 
ファイルで定義しておきます。 
# vi aws.yml 
access_key_id: "AKIAIFJPTCXRF943FBXA" 
secret_access_k...
# vi putMetric.rb 
#!/usr/bin/env ruby 
# encoding: utf-8 
# OSの監視情報をCloudWatchのカスタムメトリクスに追加するスクリプト 
# 
# 追加する項目 
# - メモリ使...
# プロセス監視するプロセス名 
@process1 = 'httpd' 
@process2 = 'tomcat6' 
# メモリ使用率 
def mem_usage 
meminfo = {} 
File.open('/proc/memin...
# Disk使用状況 
def disk_usage(path) 
df = "/bin/df -k -l -P #{path} | tail -n 1" 
total, used = `#{df}`.chomp.split(/s+/).val...
@instanceID = `wget -q -O - http://169.254.169.254/latest/meta-data/instance-id` 
dimensions = [ { "name"=> "InstanceId", ...
# カスタムメトリクス追加 
cw = AWS::CloudWatch.new 
cw.put_metric_data( "namespace"=> NAMESPACE, "metric_data"=> metric_data )
カスタムメトリクスに追加したい 
(4/5) 
 手動で実行して動作確認を行う。 
ruby putMetric.rb 
 Cloudwatchで、実際に確認する。MetricsのEC2カスタムメ 
トリクスを参照する。Custom/EC2...
 DiskとMemoryの使用状況を参照してみる
カスタムメトリクスに追加した 
い(5/5) 
 Cronに登録して、5分置きにカスタムメトリクス 
を追加するようにします。 
(スクリプトファイルとymlファイルのパーミッ 
ションは、適宜変更してください。) 
$ sudo cront...
Awsで構築したのだよ 05 プロセス監視、メモリ使用率、ディスク使用率をCloudWatchのカスタムメトリクスに追加したい
Awsで構築したのだよ 05 プロセス監視、メモリ使用率、ディスク使用率をCloudWatchのカスタムメトリクスに追加したい
Awsで構築したのだよ 05 プロセス監視、メモリ使用率、ディスク使用率をCloudWatchのカスタムメトリクスに追加したい
Awsで構築したのだよ 05 プロセス監視、メモリ使用率、ディスク使用率をCloudWatchのカスタムメトリクスに追加したい
Upcoming SlideShare
Loading in …5
×

Awsで構築したのだよ 05 プロセス監視、メモリ使用率、ディスク使用率をCloudWatchのカスタムメトリクスに追加したい

3,644 views

Published on

AWSでサービスを構築した際のノウハウ集05
プロセス監視、メモリ使用率、ディスク使用率をCloudWatchのカスタムメトリクスに追加したい

Published in: Technology
  • Login to see the comments

Awsで構築したのだよ 05 プロセス監視、メモリ使用率、ディスク使用率をCloudWatchのカスタムメトリクスに追加したい

  1. 1. AWSで構築したのだよ 「プロセス監視、メモリ使用率、ディスク使用率を Cloudwatchのカスタムメトリクスに追加し たい」
  2. 2. AWS構築時のノウハウを残し 共有します  注意 順番に記載されているため、前のテーマで記載さ れている内容が前提となる場合があります。
  3. 3. お品書き  ユーザのコンソール操作をログに残したい  ec2で自分のインスタンスIDが知りたい  ec2で自分についているタグを読み取りたい  ec2起動時にホスト名を変更したい  プロセス監視、メモリ使用率、ディスク使用率をCloudwatchのカスタムメ トリクスに追加したい  ec2起動時にアラーム設定をクラウドウォッチに追加したい  Amazon Linuxのsshの認証方式を、ID/PWに変更したい。  VPNのプライベートネットワークでNTPを使いたい  プライベートネットワークのRDSにssh経由で接続したい  夜間にec2を落としたい  サーバーのシャットダウン時にログを退避したい
  4. 4. カスタムメトリクスに追加した い(1/5)  AWSサービスとして提供されているものについて は、標準メトリクスで参照することができます。 しかし、OS側からしか見えないもの、プロセスの 死活監視、メモリの使用状況やディスクの使用状 況はCloud Watchでは見ることができません。  プロセスの死活監視、メモリの使用状況やディス クの使用状況をスクリプトを使い、Cloud Watch のカスタムメトリクスとして登録します。
  5. 5. カスタムメトリクスに追加した い(2/5)  ユーザに、カスタムメトリクスに登録権限を付与 します。 (または、ec2に権限を委譲するロールを作成しま す。)
  6. 6. カスタムメトリクスに追加した い(3/5)  メトリクスのもととなるデータを作成して、 Cloudwatchに登録する、スクリプトを作成します。
  7. 7. 権限を持ったユーザの情報、リージョンの情報など、操作に必要な情報をyml ファイルで定義しておきます。 # vi aws.yml access_key_id: "AKIAIFJPTCXRF943FBXA" secret_access_key: "lLaGfDbBE+gjbSVrGyD7+35AlOAg364qtge91XDM" ec2_endpoint: "ec2.ap-northeast-1.amazonaws.com" region: "ap-northeast-1"
  8. 8. # vi putMetric.rb #!/usr/bin/env ruby # encoding: utf-8 # OSの監視情報をCloudWatchのカスタムメトリクスに追加するスクリプト # # 追加する項目 # - メモリ使用率 # - ディスク利用率 # - / : 標準EBSボリューム # - プロセス監視 # 各EC2インスタンス上のcronで5分ごとに実行 # */5 * * * * ec2-user ruby /opt/aws/putMetricsrb require 'rubygems' require 'aws-sdk' AWS.config(YAML.load(File.read(“./aws.yml"))) NAMESPACE = 'Custom/EC2'
  9. 9. # プロセス監視するプロセス名 @process1 = 'httpd' @process2 = 'tomcat6' # メモリ使用率 def mem_usage meminfo = {} File.open('/proc/meminfo').each do |line| line =~ /^(.*?):s+(d+)/ or next; meminfo[$1] = $2.to_i * 1024 end total = meminfo['MemTotal'] avail = meminfo['MemFree'] + meminfo['Cached'] + meminfo['Buffers'] 100.0 * ( total - avail ) / total end
  10. 10. # Disk使用状況 def disk_usage(path) df = "/bin/df -k -l -P #{path} | tail -n 1" total, used = `#{df}`.chomp.split(/s+/).values_at(1, 2) 100 * ( used.to_f / total.to_f ) / 1 end # プロセス稼働状況(init.dにstatus参照可能な起動スクリプトがある想定) def process_count(name) `/etc/init.d/#{name} status | grep "is running..." | wc -l`.chomp end
  11. 11. @instanceID = `wget -q -O - http://169.254.169.254/latest/meta-data/instance-id` dimensions = [ { "name"=> "InstanceId", "value"=> @instanceID } ] # 個別項目 metric_data = [ { "metric_name"=> "MemoryUsage" , "value"=> mem_usage , "unit"=> "Percent" }, { "metric_name"=> "DiskUsage_root" , "value"=> disk_usage('/') , "unit"=> "Percent" }, { "metric_name"=> "process_#{@process1}", "value"=> process_count(@process1).to_i, "unit"=> "Count"}, { "metric_name"=> "process_#{@process2}", "value"=> process_count(@process2).to_i, "unit"=> "Count"}, ] # 共通項目 metric_data.each do |m| m[:dimensions] = dimensions end
  12. 12. # カスタムメトリクス追加 cw = AWS::CloudWatch.new cw.put_metric_data( "namespace"=> NAMESPACE, "metric_data"=> metric_data )
  13. 13. カスタムメトリクスに追加したい (4/5)  手動で実行して動作確認を行う。 ruby putMetric.rb  Cloudwatchで、実際に確認する。MetricsのEC2カスタムメ トリクスを参照する。Custom/EC2というネームスペースが 追加されている。
  14. 14.  DiskとMemoryの使用状況を参照してみる
  15. 15. カスタムメトリクスに追加した い(5/5)  Cronに登録して、5分置きにカスタムメトリクス を追加するようにします。 (スクリプトファイルとymlファイルのパーミッ ションは、適宜変更してください。) $ sudo crontab -e */5 * * * * ec2-user ruby /opt/aws/putMetric.rb

×