この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
はじめに
t.hondaです。前回に引き続き、EC2のディスク使用率に関する値を取得するプログラムについてです。今回はCloudWatchにてアラームを設定し、その状態(正常かアラート状態かなど)を取得します。
アラームの設定
前回、EC2上に設定したディスクの使用率を監視するCloutWatchを元に、アラームを予め設定します。設定方法については、以下のサイトを参考にしてください。
Amazon ClouldWatchで始めるAWSのリソース監視、はじめの一歩
プログラム
今回も、前回と同様、Javaになります。以下のようなプログラムになりました。
package cloudwatchsample;
import com.amazonaws.auth.AWSCredentials;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.services.cloudwatch.AmazonCloudWatchClient;
import com.amazonaws.services.cloudwatch.model.DescribeAlarmsRequest;
import com.amazonaws.services.cloudwatch.model.DescribeAlarmsResult;
import com.amazonaws.services.cloudwatch.model.MetricAlarm;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
/**
*
* @author
*/
public class CloudWatchSample {
private final static String ACCESS_KEY = "Your Access Key";
private final static String SECRET_ACCESS_KEY = "Your Secret Key";
private final static String MONITORING_END_POINT = "Monitoring End Point";
private final static String ALARM_NAME = "DiskSpaceUtilizationAlarm";
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
AWSCredentials awsCredentials = new BasicAWSCredentials(ACCESS_KEY, SECRET_ACCESS_KEY);
AmazonCloudWatchClient client = new AmazonCloudWatchClient(awsCredentials);
client.setEndpoint(MONITORING_END_POINT);
getMetricsAlarms(client);
}
private static void getMetricsAlarms(AmazonCloudWatchClient client){
DescribeAlarmsRequest request = new DescribeAlarmsRequest();
Collection<String> alarmNames = new ArrayList<>();
alarmNames.add(ALARM_NAME);
request.setAlarmNames(alarmNames);
DescribeAlarmsResult alarms = client.describeAlarms(request);
List<MetricAlarm> list = alarms.getMetricAlarms();
list.stream().forEach((a) -> {
//a.stateValueに"OK","ALERM"かを取得。
System.out.printf("%s\tstate=%s action=%s%n", a.getAlarmName(), a.getStateValue(), a.getAlarmActions());
});
}
}
定数の「ALARM_NAME」は、先に設定したアラーム名です(画像を参考にしてください)。
main()については前回とほぼ変わらず、アラームを取得するgetMetricsAlarms()を呼び出しています。
getMetricsAlarms()で、定数で定義したアラームを使用して、CloudWatchのアラームの状態を取得しています。コメントに書いてある通り、取得したオブジェクトのgetStateValue()にて、アラームの状態が参照できます。実際にやってみたいと思います。
上記のようなアラート状態でプログラムを実行すると、以下のように出力されます。
DiskSpaceUtilizationAlarm state=ALARM action=[arn:aws:sns:xxxxxxx:xxxxxxx:DiskSpaceUtilizationAlarmNotify]
「state」として「ALARM」が取得できました。
では、アラームが正常な状態で実行してみます。
上記のような状態でプログラムを実行すると、以下のように出力されます。
DiskSpaceUtilizationAlarm state=OK action=[arn:aws:sns:xxxxxxx:xxxxxxx:DiskSpaceUtilizationAlarmNotify]
「state」として「OK」が取得できました。
まとめ
アラームを取得できました。アラート状態をきっかけに何か複雑な処理を行う場合などに、参考となれば幸いです。
参考サイト
Amazon ClouldWatchで始めるAWSのリソース監視、はじめの一歩
Amazon CloudWatch Java API