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分

前提条件

作業権限条件 [who]

本作業は、以下の作業権限を有する人が行います。

作業権限条件: CloudWatchへの権限

CloudWatchに対してフル権限があること。

作業環境条件 [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(分)間"とします。

作業開始 [when]

以下を全て満たしているとき、作業を開始します。

  • 開始の指示があった場合。

タスクの実施

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.a. プロファイルの指定

変数の設定:

export AWS_DEFAULT_PROFILE='<CloudWatchのフル権限を許可されたプロファイル>'

0.b. リージョンの指定

変数の設定

export AWS_DEFAULT_REGION='ap-northeast-1'

0.1. CloudWatchネームスペース名の指定

CloudWatchネームスペース名を指定します。

変数の設定:

CWATCH_NAMESPACE='AWS/ECS'

0.2. CloudWatchメトリック名の指定

CloudWatchメトリック名を指定します。

変数の設定:

CWATCH_METRIC_NAME='CPUReservation'

0.3. CloudWatchディメンション名の指定

CloudWatchディメンション名を指定します。

変数の設定:

CWATCH_DIMENSION_NAME='ClusterName'

0.4. CloudWatchディメンション値の指定

CloudWatchディメンション値を指定します。

変数の設定:

CWATCH_DIMENSION_VALUE='cluster-handson-cli'

0.5. 統計周期の指定

統計周期(秒)を指定します。

変数の設定:

CWATCH_STAT_PERIOD='300'

0.6. CloudWatchディメンション値の指定

集計方法を指定します。

変数の設定:

CWATCH_STATISTICS='Average'

0.7. 統計期間

統計期間(分)を指定します。

変数の設定:

TIME_BEFORE_MIN='1440'

再確認

設定されている変数の内容を再確認します。

変数の確認:

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"
    }
  ]
}

3. 後処理

完了条件の確認

主処理は、以下を満たしたときに成功したものとします。

完了条件1: CloudWatchメトリック"CPUReservation"に関する情報を確認できている。

「CloudWatchメトリック"CPUReservation"に関する情報を確認できている。」ことを確認します。

完了