[AWS SDK][CloudWatch]アラームを取得する

2014.12.01

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

t.hondaです。前回に引き続き、EC2のディスク使用率に関する値を取得するプログラムについてです。今回はCloudWatchにてアラームを設定し、その状態(正常かアラート状態かなど)を取得します。

アラームの設定

前回、EC2上に設定したディスクの使用率を監視するCloutWatchを元に、アラームを予め設定します。設定方法については、以下のサイトを参考にしてください。
Amazon ClouldWatchで始めるAWSのリソース監視、はじめの一歩

今回は以下のようなアラームを設定しました。
CloudWatchDispSpaceAlarm

プログラム

今回も、前回と同様、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()にて、アラームの状態が参照できます。実際にやってみたいと思います。

CloudWatchDiskStateAlarm
上記のようなアラート状態でプログラムを実行すると、以下のように出力されます。

DiskSpaceUtilizationAlarm	state=ALARM action=[arn:aws:sns:xxxxxxx:xxxxxxx:DiskSpaceUtilizationAlarmNotify]

「state」として「ALARM」が取得できました。

では、アラームが正常な状態で実行してみます。
CloudWatchDiskStateOK
上記のような状態でプログラムを実行すると、以下のように出力されます。

DiskSpaceUtilizationAlarm	state=OK action=[arn:aws:sns:xxxxxxx:xxxxxxx:DiskSpaceUtilizationAlarmNotify]

「state」として「OK」が取得できました。

まとめ

アラームを取得できました。アラート状態をきっかけに何か複雑な処理を行う場合などに、参考となれば幸いです。

参考サイト

Amazon ClouldWatchで始めるAWSのリソース監視、はじめの一歩
Amazon CloudWatch Java API