以前、下記のようにNagiosでCloudWatchのメトリックスを監視するプラグインを
作りましたが、
NagiosのCloudWatchプラグイン(PHP版)次で紹介したようにPython版AWSコマンドラインツールが利用できるように
なったので、そちらを利用する形で作り直してみました。
Python版AWSコマンドラインツールでCloudWatchのメトリックス情報を取得
プラグインは下記のような感じです。
# cat check_cloudwatch #!/bin/sh . `dirname $0`/utils.sh set -e trap 'echo "UNKNOWN: $?"; exit $STATE_UNKNOWN' ERR WARN=0 CRIT=0 REVERSE=false while getopts c:w:n:m:d:s:r OPTNAME; do case $OPTNAME in w) WARN=$OPTARG ;; c) CRIT=$OPTARG ;; n) NAMESPACE=$OPTARG ;; m) METRIC_NAME=$OPTARG ;; d) DIMENSIONS=$OPTARG ;; s) STATISTICS=$OPTARG ;; r) REVERSE=true ;; *) echo "UNKNOWN: Usage" exit $STATE_UNKNOWN ;; esac done START_TIME=`date -u -d '10 minutes ago' +%Y-%m-%dT%TZ` END_TIME=`date -u +%Y-%m-%dT%TZ` METRIC_DATA=`aws cloudwatch get-metric-statistics \ --namespace $NAMESPACE \ --metric-name $METRIC_NAME \ --dimensions $DIMENSIONS \ --statistics $STATISTICS \ --period 60 \ --start-time $START_TIME \ --end-time $END_TIME \ | jq ".Datapoints[0] | .$STATISTICS" \ | cut -d\" -f2` if [ $REVERSE = "true" ]; then CRIT_STATUS=`echo "$METRIC_DATA < $CRIT" | bc` WARN_STATUS=`echo "$METRIC_DATA < $WARN" | bc` else CRIT_STATUS=`echo "$METRIC_DATA > $CRIT" | bc` WARN_STATUS=`echo "$METRIC_DATA > $WARN" | bc` fi if [ $CRIT_STATUS -eq 1 ]; then echo "CRITICAL $NAMESPACE $METRIC_NAME $DIMENSIONS $STATISTICS: $METRIC_DATA" exit $STATE_CRITICAL elif [ $WARN_STATUS -eq 1 ]; then echo "WARNING $NAMESPACE $METRIC_NAME $DIMENSIONS $STATISTICS: $METRIC_DATA" exit $STATE_WARNING elif [ $CRIT_STATUS -eq 0 -a $WARN_STATUS -eq 0 ]; then echo "OK $NAMESPACE $METRIC_NAME $DIMENSIONS $STATISTICS: $METRIC_DATA" exit $STATE_OK fi echo "UNKNOWN: End"; exit $STATE_UNKNOWN※同一フォルダに"utils.sh"(/usr/lib64/nagios/plugins/utils.sh)が必要になります。
取得した値と閾値との比較は"bc"コマンドで行っているので下記のように
インストールしておく必要もあります。
# yum -y install bc ...
実行すると下記のようになります。(閾値を上に超えたらCritical/Warningになります)
# ./check_cloudwatch -c 2 -w 0 -n AWS/EC2 -m CPUUtilization -d '{"name":"InstanceId","value":"i-xxxxxxxx"}' -s Average CRITICAL AWS/EC2 CPUUtilization {"name":"InstanceId","value":"i-f2f016f0"} Average: 2.3440000000000003
閾値を下に超えたらCritical/Warningになるようにするには"-r"オプションを付けます
# ./check_cloudwatch -c 2 -w 0 -n AWS/EC2 -m CPUUtilization -d '{"name":"InstanceId","value":"i-xxxxxxxx"}' -s Average -r OK AWS/EC2 CPUUtilization {"name":"InstanceId","value":"i-f2f016f0"} Average: 2.3440000000000003
もう少し手を入れたらGitHubに上げてRPMにして...
--------
http://www.suz-lab.com
0 コメント:
コメントを投稿