S-JIS[2013-05-30] 変更履歴

Amazon CloudWatch Java API

AWS CloudWatchのJava APIのメモ。


概要

CloudWatchをJava APIで操作するには、AmazonCloudWatchClientクラスを使う。

import com.amazonaws.auth.AWSCredentials;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.services.cloudwatch.AmazonCloudWatchClient;
	String accessKey = "アクセスキー";
	String secretKey = "プライベートキー";
	AWSCredentials awsCredentials = new BasicAWSCredentials(accessKey, secretKey);

	AmazonCloudWatchClient client = new AmazonCloudWatchClient(awsCredentials);

	client.setEndpoint("monitoring.ap-northeast-1.amazonaws.com");
//	client.setEndpoint("https://monitoring.ap-northeast-1.amazonaws.com");

endpointを指定しないと変な場所のメトリクスにアクセスしにいくので要注意。
endpointには「https://」を付けても付けなくても良い。


メトリクス一覧の取得

メトリクスの一覧を取得する例。(CLImon-list-metricsに相当)

import com.amazonaws.services.cloudwatch.model.ListMetricsRequest;
import com.amazonaws.services.cloudwatch.model.ListMetricsResult;
import com.amazonaws.services.cloudwatch.model.Metric;
	ListMetricsResult list = client.listMetrics();

	for (Metric m : list.getMetrics()) {
		System.out.printf("metricsName=%s, namespace=%s, dimension=%s%n", m.getMetricName(), m.getNamespace(), m.getDimensions());
	}

特定のメトリクス一覧を取得する例。

	ListMetricsRequest request = new ListMetricsRequest();
	request.setNamespace("AWS/EC2");
	request.setMetricName("CPUUtilization");
	ListMetricsResult list = client.listMetrics(request);

	for (Metric m : list.getMetrics()) {
		System.out.printf("metricsName=%s, namespace=%s, dimension=%s%n", m.getMetricName(), m.getNamespace(), m.getDimensions());
	}

メトリクスの取得

メトリクスを取得する例。(CLImon-get-statsに相当)

import java.util.Arrays;
import java.util.Calendar;
import java.util.Date;

import com.amazonaws.services.cloudwatch.model.Datapoint;
import com.amazonaws.services.cloudwatch.model.GetMetricStatisticsRequest;
import com.amazonaws.services.cloudwatch.model.GetMetricStatisticsResult;
	GetMetricStatisticsRequest request = new GetMetricStatisticsRequest();
	request.setNamespace("AWS/EC2");
	request.setMetricName("CPUUtilization");
	request.setStatistics(Arrays.asList("Maximum", "Average"));
	Date now = new Date();
	request.setStartTime(date(now, -5));
	request.setEndTime(now);
	request.setPeriod(300);
//	Dimension dm = new Dimension().withName("ServiceName").withValue("AmazonEC2");
//	request.setDimensions(Arrays.asList(dm));
	GetMetricStatisticsResult metrics = client.getMetricStatistics(request);

	System.out.println(metrics.getLabel());
	List<Datapoint> data = metrics.getDatapoints();
	for (Datapoint d : data) {
		System.out.printf("%s\tmax=%f ave=%f[%s]%n", d.getTimestamp(), d.getMaximum(), d.getAverage(), d.getUnit());
	}
	static Date date(Date d, int minute) {
		Calendar cal = Calendar.getInstance();
		cal.setTime(d);
		cal.add(Calendar.MINUTE, minute);
		return cal.getTime();
	}

Datapointに取得された値が入っている。
getMaximum()やgetAverage()は、request.setStatistics()で指定したものだけ、ちゃんとした値が返ってくる。
(メトリクスを登録した際に一緒に単位を登録していれば)getUnit()でメトリクスの単位が取れる。Byteとかパーセントとか。


アラーム一覧の取得

アラームの一覧を取得する例。(CLImon-describe-alarmsに相当)

import com.amazonaws.services.cloudwatch.model.DescribeAlarmsRequest;
import com.amazonaws.services.cloudwatch.model.DescribeAlarmsResult;
import com.amazonaws.services.cloudwatch.model.MetricAlarm;
	DescribeAlarmsRequest request = new DescribeAlarmsRequest();
//	request.setAlarmNames(Arrays.asList("アラーム名"));
	DescribeAlarmsResult alarms = client.describeAlarms(request);

	List<MetricAlarm> list = alarms.getMetricAlarms();
	for (MetricAlarm a : list) {
		System.out.printf("%s\tstate=%s action=%s%n", a.getAlarmName(), a.getStateValue(), a.getAlarmActions());
	}

CloudWatchへ戻る / AWSへ戻る / 技術メモへ戻る
メールの送信先:ひしだま