CloudWatchのカスタムメトリクス
AWSのリソース監視、アラート発信が出来るCloudWatchですが、EC2に関しては正直今ひとつ使いにくいなーと思っておりました。理由は、OSより内側の情報が取れないので、ディスクの空きスペースを監視したり、Tomcatのメモリ状況等の情報を取得する事が出来なかったからです。お仕事では状況のモニタリングにMuninを使っていますが、その為にインスタンスを1台立てたりして結構メンドイ…っていうか、クラウドっぽくない(笑)訳で、おもわず
![Muninの類とCloudWatchって統合できるようにならないのかなー?](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgP0f7GQAZAEdfVV_u-rYCuDe-QQlNLmntk3enVxrohgeX3qvTaF9na9Yo804Xl7ra60QlBHY_VqpmzXBooDXZ-pIDPQUY-_x3DmCBTMnpv9g4tdx8eXJgAhvZmZANV3G1YqnyJuPMZ42K8/s1600/001.png)
![Zabbix Senderとくっつけてる人とかいますよ!](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiL8AtR-PZ8NAsEJvLBC0DyiDG5uhDENAdm1GhWR8MW3P_VNoWFyqERzlr6yOHF5HeLWb4cY5HvuTLFICvh2SOzQnVWEs5OWJ93S9bcOqHoSIxSt-m95bINvCGUKn9EbDwwjE-kG9C5836d/s1600/002.png)
【AWS発表】 クラウド監視サービスAmazon CloudWatchでカスタムのメトリクスが使用可能に - Amazon Web Services ブログ
また、すでに試されている方々もおられます。
- CloudWatchのカスタムメトリクス使ってみた - IT 東京 楽しいと思うこと
- CloudWatchのCustom Metricsを使ってみた(二番煎じ) - log4moto
- suz-lab - blog: NagiosとCloudWatchを組み合わせてみた
![JMXから直接CloudWatchのカスタムメトリクスに投げられるものなんてまだないよね…](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjf-kW76KKAe2Rz6gMcqz4lMJppAPkf_SYGR5tMVBWZwcdcfVhE3yUHKooFsSe0zHZ_uW1Bw6U4GpDgVxZZwZrEOZr2BkzqgmDlHLJ3wmi0rkPTYtchjyjWgMrMEXpYZdlu9ZDgedf-MG49/s1600/003.png)
![無ければ作るだけなのではないかw](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjRRG-SmepXN4dV-06lF8iy6M-QMREQ7PO4PlQWB79WPhQRichwSRf6FJcpDgb9SIOgn4WCyd8NyRWcZynusj64Uos6kEJmbIswiN-P_z_VRZtjyaG1rSjMAcfntxkVKP-0gy-HBQC6v6KI/s1600/004.png)
実行には、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 件のコメント :
コメントを投稿