【AWS発表】 クラウド監視サービスAmazon CloudWatchでカスタムのメトリクスが使用可能に、という記事が出てました。
要するに自分の好きな値をCloudWatchに突っ込める!!!
いいですねー、さっそく使ってみましょう!
CLIツールとPHPプログラムを使って動作を確認してみました。
東京リージョンではうまく動かなかったので、検証はUS Eastで実施しています。
(東京は非対応?またちゃんと確認)
CLIツールで
EC2上のWEBサーバからApacheのプロセス数を格納してみましょう。
導入
[ec2-user@useast01 aws]$ sudo yum upgrade aws-apitools-mon Loaded plugins: fastestmirror, priorities, security Loading mirror speeds from cached hostfile amzn-main | 2.1 kB 00:00 amzn-updates | 2.1 kB 00:00 Skipping security plugin, no data Setting up Upgrade Process No Packages marked for Update
しかたないのでダウンロード版でやります。
最新版をダウンロードしてください。
[ec2-user@useast01 src]$ wget http://ec2-downloads.s3.amazonaws.com/CloudWatch-2010-08-01.zip … インストール手順省略 [ec2-user@useast01 src]$ export EC2_REGION=us-east-1 …
どうしてもわからない人はとりあえずこことかで。
データ送信
mon-put-dataというコマンドが追加されています。
こんな感じでデータを送信できます。
(namespaceは「AWS/」で始まるものでなければなんでもよし、metric-name、dimensionsは任意です。)
[ec2-user@useast01 bin]$ ./mon-put-data --namespace Httpd --metric-name Processes \ --dimensions 'Host=useast01' --value `ps -e|grep httpd|wc -l`
時間をおいて3回ほど。
確認
メトリクスをリストしてみます。(実際に取れるようになるまで、けっこうタイムラグがあります)
[ec2-user@useast01 bin]$ ./mon-list-metrics --namespace Httpd Processes Httpd {Host=useast01}
mon-get-statsで値を見てみましょう
[ec2-user@useast01 bin]$ ./mon-get-stats Processes --namespace Httpd \ --dimensions 'Host=useast01' --statistics Average --headers Time Average Unit 2011-05-12 17:10:00 9.0 None 2011-05-12 17:17:00 9.0 None 2011-05-12 17:18:00 10.0 None
簡単ですね><
単位を指定する--unit、タイムスタンプを指定する--timestamp、
サンプル数、平均、最大/最小まで詳細に値を入力する--statisticValues、
などのオプションもありますので必要に応じて指定してください。
[ec2-user@useast01 bin]$ ./mon-put-data --namespace TestNS --metric-name Test \ --dimensions 'Host=useast01' --unit Bytes \ --statisticValues "SampleCount=10, Sum=1000, Maximum=150, Minimum=50" [ec2-user@useast01 bin]$ ./mon-get-stats Test --namespace TestNS \ --dimensions 'Host=useast01' \ --statistics 'SampleCount,Average,Minimum,Maximum,Sum' --headers Time SampleCount Average Sum Minimum Maximum Unit 2011-05-12 17:34:00 10.0 100.0 1000.0 50.0 150.0 Bytes 2011-05-12 17:35:00 10.0 100.0 1000.0 50.0 150.0 Bytes
AWS SDK for PHPを使って
では次はプログラムから!!!
RDSのSelectクエリ数を格納する、という想定でやってみましょう。
(想定なので値はテキトウ)
導入
以下からAWS SDK for PHPの最新版をダウンロードしてください。
http://aws.amazon.com/sdkforphp/
導入手順はこことかこことかを。
ライブラリのドキュメントはここです。
データ送信
一気に2台ぶん送ります。プログラムはこんな感じです。
#!/usr/bin/php <?php require_once('sdk.class.php'); $region = "us-east-1"; #$region = AmazonCloudWatch::REGION_APAC_NE1; # Japan $namespace = 'DB'; $metric_name = 'Select'; $unit = 'Count'; $timestamp = 'now'; $metric_data = array( array( 'MetricName' => $metric_name, 'Dimensions' => array( array('Name' => 'Host', 'Value' => 'db01'), ), 'Timestamp' => $timestamp, 'StatisticValues' => array( 'SampleCount' => 10, 'Sum' => 1000, 'Minimum' => 50, 'Maximum' => 150 ), 'Unit' => $unit ), array( 'MetricName' => $metric_name, 'Dimensions' => array( array('Name' => 'Host', 'Value' => 'db02'), ), 'Timestamp' => $timestamp, 'StatisticValues' => array( 'SampleCount' => 1, 'Sum' => 200, 'Minimum' => 200, 'Maximum' => 200 ), 'Unit' => $unit ), ); $cw = new AmazonCloudWatch(); $cw->set_region($region); $res = $cw->put_metric_data($namespace, $metric_data); if($res->isOK()){ echo("Put OK\n"); }else{ echo("API Error.\n" . print_r($res, true)); }
3回ほど実行
[mikeda@test01 cw]$ php cw_put.php Put OK [mikeda@test01 cw]$ php cw_put.php Put OK [mikeda@test01 cw]$ php cw_put.php Put OK
確認
[mikeda@test01 cw]$ mon-get-stats Select --namespace DB --dimensions 'Host=db01' \ --statistics 'SampleCount,Average,Minimum,Maximum,Sum' --headers Time SampleCount Average Sum Minimum Maximum Unit 2011-05-12 17:51:00 10.0 100.0 1000.0 50.0 150.0 Count 2011-05-12 17:53:00 10.0 100.0 1000.0 50.0 150.0 Count 2011-05-12 17:55:00 10.0 100.0 1000.0 50.0 150.0 Count [mikeda@test01 cw]$ mon-get-stats Select --namespace DB --dimensions 'Host=db02' \ --statistics 'SampleCount,Average,Minimum,Maximum,Sum' --headers Time SampleCount Average Sum Minimum Maximum Unit 2011-05-12 17:51:00 1.0 200.0 200.0 200.0 200.0 Count 2011-05-12 17:53:00 1.0 200.0 200.0 200.0 200.0 Count 2011-05-12 17:55:00 1.0 200.0 200.0 200.0 200.0 Count