6. CloudWatchメトリックの確認 (AWS/ECS: CPUReservation)¶
作業の目的 [why]¶
CloudWatchネームスペース"CPUReservation"のCloudWatchメトリック"CPUReservation"を確認します。
完了条件/事前条件 [設計者用情報]
完了条件 [after]
主処理は、以下を満たしたときに成功したものとします。
- 完了条件1
- CloudWatchメトリック"CPUReservation"に関する情報を確認できている。
事前条件 [before]
主処理の実施は、以下の状態であることを前提とします。
- 事前条件1
- CloudWatchネームスペース"AWS/ECS"のメトリック"CPUReservation"のディメンション名"ClusterName"にディメンション値"cluster-handson-cli"が存在する。
前提と異なることが判明した場合、直ちに処理を中止します。
作業対象 [what]¶
- CloudWatchサービス
標準時間¶
8分
前提条件¶
作業環境条件 [where]¶
本作業は、以下の作業環境で行います。
作業環境条件1: OSとバージョン
Amazon Linuxの以下のバージョンで動作確認済
コマンド:
cat /etc/issue | head -1
結果(例):
Amazon Linux AMI release 2016.09
作業環境条件2: シェルとバージョン
bashの以下のバージョンで動作確認済
コマンド:
bash --version -v | head -1
結果(例):
GNU bash, バージョン 4.2.46(1)-release (x86_64-redhat-linux-gnu)
作業環境条件3: AWS CLIのバージョン
以下のバージョンで動作確認済
- AWS CLI 1.14.18
コマンド:
aws --version
結果(例):
aws-cli/1.14.31 Python/2.7.12 Linux/4.4.11-23.53.amzn1.x86_64 botocore/1.8.35
バージョンが古い場合は最新版に更新しましょう。
コマンド:
sudo -H pip install -U awscli
開始条件¶
作業に必要なモノ・情報 [resource]¶
作業開始には、以下が全て揃っていることが必要です。
リソース1: CloudWatchネームスペース名
- 確認するCloudWatchディメンションが属するCloudWatchネームスペースの名称です。
- 今回は"AWS/ECS"とします。
リソース2: CloudWatchメトリック名
- 確認するCloudWatchディメンションが属するCloudWatchメトリックの名称です。
- 今回は"CPUReservation"とします。
リソース3: CloudWatchディメンション名
- CloudWatchディメンションの名称です。
- 今回は"ClusterName"とします。
リソース4: CloudWatchディメンション値
- CloudWatchディメンションの値です。
- 今回は"cluster-handson-cli"とします。
リソース5: 統計周期
- 統計周期です。
- 今回は"300"(秒)とします。
リソース6: 集計方法
- 統計情報の集計方法です。
- 今回は"Average"とします。
リソース7: 統計期間
- 統計情報を取得する期間です。
- 今回は"現在まで"1440(分)間"とします。
タスクの実施¶
0. パラメータの指定¶
まず変数の確認をします。
変数の確認:
cat << ETX # 0.a. AWS_DEFAULT_PROFILE:"<CloudWatchのフル権限を許可されたプロファイル>" AWS_DEFAULT_PROFILE="${AWS_DEFAULT_PROFILE}" # 0.b. AWS_DEFAULT_REGION:"ap-northeast-1" AWS_DEFAULT_REGION="${AWS_DEFAULT_REGION}" # 0.1. CWATCH_NAMESPACE:"AWS/ECS" CWATCH_NAMESPACE="${CWATCH_NAMESPACE}" # 0.2. CWATCH_METRIC_NAME:"CPUReservation" CWATCH_METRIC_NAME="${CWATCH_METRIC_NAME}" # 0.3. CWATCH_DIMENSION_NAME:"ClusterName" CWATCH_DIMENSION_NAME="${CWATCH_DIMENSION_NAME}" # 0.4. CWATCH_DIMENSION_VALUE:"cluster-handson-cli" CWATCH_DIMENSION_VALUE="${CWATCH_DIMENSION_VALUE}" # 0.5. CWATCH_STAT_PERIOD:"300" CWATCH_STAT_PERIOD="${CWATCH_STAT_PERIOD}" # 0.6. CWATCH_STATISTICS:"Average" CWATCH_STATISTICS="${CWATCH_STATISTICS}" # 0.7. TIME_BEFORE_MIN:"1440" TIME_BEFORE_MIN="${TIME_BEFORE_MIN}" ETX
下段の変数が入っていない、もしくは上段と同等の値が入っていない場合は、それぞれの手順番号について作業を行います。
0.4. CloudWatchディメンション値の指定¶
CloudWatchディメンション値を指定します。
変数の設定:
CWATCH_DIMENSION_VALUE='cluster-handson-cli'
再確認¶
設定されている変数の内容を再確認します。
変数の確認:
cat << ETX # 0.a. AWS_DEFAULT_PROFILE:"<CloudWatchのフル権限を許可されたプロファイル>" AWS_DEFAULT_PROFILE="${AWS_DEFAULT_PROFILE}" # 0.b. AWS_DEFAULT_REGION:"ap-northeast-1" AWS_DEFAULT_REGION="${AWS_DEFAULT_REGION}" # 0.1. CWATCH_NAMESPACE:"AWS/ECS" CWATCH_NAMESPACE="${CWATCH_NAMESPACE}" # 0.2. CWATCH_METRIC_NAME:"CPUReservation" CWATCH_METRIC_NAME="${CWATCH_METRIC_NAME}" # 0.3. CWATCH_DIMENSION_NAME:"ClusterName" CWATCH_DIMENSION_NAME="${CWATCH_DIMENSION_NAME}" # 0.4. CWATCH_DIMENSION_VALUE:"cluster-handson-cli" CWATCH_DIMENSION_VALUE="${CWATCH_DIMENSION_VALUE}" # 0.5. CWATCH_STAT_PERIOD:"300" CWATCH_STAT_PERIOD="${CWATCH_STAT_PERIOD}" # 0.6. CWATCH_STATISTICS:"Average" CWATCH_STATISTICS="${CWATCH_STATISTICS}" # 0.7. TIME_BEFORE_MIN:"1440" TIME_BEFORE_MIN="${TIME_BEFORE_MIN}" ETX
1. 前処理¶
1.1. 処理対象の状態確認¶
主処理の実施は、以下の状態であることを前提とします。
前提と異なることが判明した場合、直ちに処理を中止します。
事前条件1: CloudWatchネームスペース"AWS/ECS"のメトリック"CPUReservation"のディメンション名"ClusterName"にディメンション値"cluster-handson-cli"が存在する。
「CloudWatchネームスペース"AWS/ECS"のメトリック"CPUReservation"のディメンション名"ClusterName"にディメンション値"cluster-handson-cli"が存在する。」ことを確認します。
コマンド:
aws cloudwatch list-metrics \ --namespace ${CWATCH_NAMESPACE} \ --metric-name ${CWATCH_METRIC_NAME} \ --query "Metrics[?contains(Dimensions[].Name, \`ClusterName\`) \ && contains(Dimensions[].Value,\`${CWATCH_DIMENSION_VALUE}\`)].Dimensions[].Value"
結果(例):
[ "cluster-handson-cli" ]
1.2. 主処理に必要な情報の取得¶
終了時刻の指定
変数の設定:
CWATCH_END_TIME=$( \ date -u '+%FT%TZ' \ ) \ && echo ${CWATCH_END_TIME}
結果(例):
2018-01-22T01:23:45Z
開始時刻の指定
変数の設定(OSX/BSD系OSの場合):
CWATCH_START_TIME=$( \ date -u -v-${TIME_BEFORE_MIN}M '+%FT%TZ' \ ) \ && echo ${CWATCH_START_TIME}
変数の設定(Linux系OSの場合):
CWATCH_START_TIME=$( \ date -u -d "${TIME_BEFORE_MIN} mins ago" '+%FT%TZ' \ ) \ && echo ${CWATCH_START_TIME}
結果(例):
2018-01-22T01:23:45Z
ディメンション文字列の生成
変数の設定:
STRING_CWATCH_DIMENSIONS="Name=${CWATCH_DIMENSION_NAME},Value=${CWATCH_DIMENSION_VALUE}" \ && echo ${STRING_CWATCH_DIMENSIONS}
結果(例):
Name=ClusterName,Value=cluster-handson-cli
2. 主処理¶
CloudWatchメトリックの統計値の取得¶
変数の確認:
cat << ETX # CWATCH_NAMESPACE:"AWS/ECS" CWATCH_NAMESPACE="${CWATCH_NAMESPACE}" # CWATCH_METRIC_NAME:"CPUReservation" CWATCH_METRIC_NAME="${CWATCH_METRIC_NAME}" # CWATCH_START_TIME:"2018-01-29T01:55:59Z" CWATCH_START_TIME="${CWATCH_START_TIME}" # CWATCH_END_TIME:"2018-01-29T01:55:59Z" CWATCH_END_TIME="${CWATCH_END_TIME}" # CWATCH_STAT_PERIOD:"300" CWATCH_STAT_PERIOD="${CWATCH_STAT_PERIOD}" # CWATCH_STATISTICS:"Average" CWATCH_STATISTICS="${CWATCH_STATISTICS}" # STRING_CWATCH_DIMENSIONS:"Name=ClusterName,Value=cluster-handson-cli" STRING_CWATCH_DIMENSIONS="${STRING_CWATCH_DIMENSIONS}" ETX
コマンド:
aws cloudwatch get-metric-statistics \ --namespace ${CWATCH_NAMESPACE} \ --metric-name ${CWATCH_METRIC_NAME} \ --start-time ${CWATCH_START_TIME} \ --end-time ${CWATCH_END_TIME} \ --period ${CWATCH_STAT_PERIOD} \ --statistics ${CWATCH_STATISTICS} \ --dimensions ${CWATCH_DIMENSIONS}
結果(例):
{ "Label": "MemoryReservation", "Datapoints": [ { "Timestamp": "2018-01-29T00:05:00Z", "Average": 12.890231621349448, "Unit": "Percent" }, { "Timestamp": "2018-01-29T00:00:00Z", "Average": 12.890231621349447, "Unit": "Percent" } ] }