CloudWatchのカスタムメトリクス
AWSのリソース監視、アラート発信が出来るCloudWatchですが、EC2に関しては正直今ひとつ使いにくいなーと思っておりました。理由は、OSより内側の情報が取れないので、ディスクの空きスペースを監視したり、Tomcatのメモリ状況等の情報を取得する事が出来なかったからです。お仕事では状況のモニタリングにMuninを使っていますが、その為にインスタンスを1台立てたりして結構メンドイ…っていうか、クラウドっぽくない(笑)訳で、おもわず
とつぶやいた訳ですが、ソリューションアーキテクトの荒木さんに
と教えていただき、なるほどと思いつつ、やりたい事は逆なんだよなーとか思っていたら、じつは一週間ほど前にそのようなリリースがあったんですね…完全に見逃しておりました。
【AWS発表】 クラウド監視サービスAmazon CloudWatchでカスタムのメトリクスが使用可能に - Amazon Web Services ブログ
また、すでに試されている方々もおられます。
- CloudWatchのカスタムメトリクス使ってみた - IT 東京 楽しいと思うこと
- CloudWatchのCustom Metricsを使ってみた(二番煎じ) - log4moto
- suz-lab - blog: NagiosとCloudWatchを組み合わせてみた
とつぶやいたら、これまたソリューションアーキテクトの大谷さんに
と突っ込まれましたので、簡単に作ってみましたw
実行には、AWS SDK for Javaの最新版が必要になります。公式サイトからダウンロードしても良いですし、Mavenのリポジトリより適時落としてください。
使用例
JXMを使ってヒープメモリの状況を取り出し、それを一分間隔でCloudWatchに投げる例です。import java.lang.management.ManagementFactory; import java.lang.management.MemoryMXBean; import java.lang.management.MemoryUsage; import com.amazonaws.auth.AWSCredentials; import com.amazonaws.auth.BasicAWSCredentials; import com.amazonaws.services.cloudwatch.AmazonCloudWatchClient; import com.amazonaws.services.cloudwatch.model.Dimension; import com.amazonaws.services.cloudwatch.model.MetricDatum; import com.amazonaws.services.cloudwatch.model.PutMetricDataRequest; import com.amazonaws.services.cloudwatch.model.StandardUnit; public class JMXTest1 { public static void main(String[] args) throws Exception { while (true) { MemoryMXBean mBean = ManagementFactory.getMemoryMXBean(); // ヒープメモリ状況取得 MemoryUsage heapUsage = mBean.getHeapMemoryUsage(); // Dimension Dimension dimension = new Dimension().withName("Server").withValue("001"); // カスタムメトリクスデータのリクエストを生成 PutMetricDataRequest request = new PutMetricDataRequest() .withNamespace("MyJVMTest01") .withMetricData( // Used new MetricDatum().withDimensions(dimension) .withMetricName("Used") .withUnit(StandardUnit.Bytes.toString()) .withValue((double) heapUsage.getUsed()), // Max new MetricDatum().withDimensions(dimension) .withMetricName("Max") .withUnit(StandardUnit.Bytes.toString()) .withValue((double) heapUsage.getMax()), // Committed new MetricDatum() .withDimensions(dimension) .withMetricName("Committed") .withUnit(StandardUnit.Bytes.toString()) .withValue((double) heapUsage.getCommitted()) ); AWSCredentials cred = new BasicAWSCredentials("アクセスキー", "シークレットキー"); AmazonCloudWatchClient client = new AmazonCloudWatchClient(cred); // CloudWatchにデータ送信 client.putMetricData(request); Thread.sleep(60 * 1000); } } }
で、結果がこれ。(画像クリックで拡大)
というわけで、めでたしめでたし!
ついでに要望など
カスタムメトリクスはとても嬉しい機能なのですが、グラフの時間を自分のロケールで表示できればパーフェクトですね… という訳で顧客というのはトコトンわがままな訳ですが(笑)とても良いサービスなのでついつい言ってしまいます!
0 件のコメント :
コメントを投稿