Awsで構築したのだよ 05...

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

Transcript of Awsで構築したのだよ 05...

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

AWSで構築したのだよ「プロセス監視、メモリ使用率、ディスク使用率を

Cloudwatchのカスタムメトリクスに追加したい」

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

注意

順番に記載されているため、前のテーマで記載されている内容が前提となる場合があります。

AWS構築時のノウハウを残し共有します

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

ユーザのコンソール操作をログに残したい

ec2で自分のインスタンスIDが知りたい

ec2で自分についているタグを読み取りたい

ec2起動時にホスト名を変更したい

プロセス監視、メモリ使用率、ディスク使用率をCloudwatchのカスタムメ

トリクスに追加したい

ec2起動時にアラーム設定をクラウドウォッチに追加したい

AmazonLinuxのsshの認証方式を、ID/PWに変更したい。

VPNのプライベートネットワークでNTPを使いたい

プライベートネットワークのRDSにssh経由で接続したい

夜間にec2を落としたい

サーバーのシャットダウン時にログを退避したい

お品書き

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

AWSサービスとして提供されているものについては、標準メトリクスで参照することができます。しかし、OS側からしか見えないもの、プロセスの死活監視、メモリの使用状況やディスクの使用状況はCloud Watchでは見ることができません。

プロセスの死活監視、メモリの使用状況やディスクの使用状況をスクリプトを使い、 Cloud Watch

のカスタムメトリクスとして登録します。

カスタムメトリクスに追加したい(1/5)

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

ユーザに、カスタムメトリクスに登録権限を付与します。

(または、ec2に権限を委譲するロールを作成します。)

カスタムメトリクスに追加したい(2/5)

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

メトリクスのもととなるデータを作成して、Cloudwatchに登録する、スクリプトを作成します。

カスタムメトリクスに追加したい(3/5)

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

権限を持ったユーザの情報、リージョンの情報など、操作に必要な情報を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"

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

#!/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'

# vi putMetric.rb

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

# プロセス監視するプロセス名@process1 = 'httpd'@process2 = 'tomcat6'

# メモリ使用率def mem_usagememinfo = {}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 ) / totalend

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

# 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 ) / 1end

# プロセス稼働状況(init.dにstatus参照可能な起動スクリプトがある想定)def process_count(name)`/etc/init.d/#{name} status | grep "is running..." | wc -l`.chomp

end

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

@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

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

# カスタムメトリクス追加cw = AWS::CloudWatch.newcw.put_metric_data( "namespace"=> NAMESPACE, "metric_data"=> metric_data )

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

手動で実行して動作確認を行う。ruby putMetric.rb

Cloudwatchで、実際に確認する。MetricsのEC2カスタムメトリクスを参照する。Custom/EC2というネームスペースが追加されている。

カスタムメトリクスに追加したい(4/5)

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

DiskとMemoryの使用状況を参照してみる

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

Cronに登録して、5分置きにカスタムメトリクスを追加するようにします。

(スクリプトファイルとymlファイルのパーミッションは、適宜変更してください。)

$ sudo crontab -e

*/5 * * * * ec2-user ruby /opt/aws/putMetric.rb

カスタムメトリクスに追加したい(5/5)