handson: aws service (cloudwatch: customer metrics)

目的

CloudWatchの主要な要素を操作してみます。 (監視対象としてカスタムメトリクスを、通知手段としてSNSトピックを利用します。)

前提

作業環境条件

本作業は、以下の作業環境で行います。

作業環境条件1: OSとバージョン

本手順は、Amazon Linux "2018.03"以降のOS環境での実施を前提としています。

コマンド:

cat /etc/system-release

結果(例):

Amazon Linux AMI release 2018.03

作業環境条件2: シェルとバージョン

本手順は、bash "4.2.46(2)-release"以降のシェル環境での実施を前提としています。

コマンド:

bash --version -v \
  | head -1

結果(例):

GNU bash, バージョン 4.2.46(2)-release (x86_64-redhat-linux-gnu)

作業環境条件3: AWS CLIのバージョン

本手順は、AWS CLIのバージョン"1.17.6"以降での実施を前提としています。

コマンド:

aws --version

結果(例):

aws-cli/1.17.6 Python/3.7.3 Linux/4.14.165-102.185.amzn1.x86_64 botocore/ 1.11.2

手順

ローカル環境での作業

  • 今回は"${HOME}/tmp/parameter-handson-cli-cloudwatch-custom"をパラメータファイル情報用ディレクトリとします。

ディレクトリが存在することを確認します。

コマンド:

ls -d ${HOME}/tmp/parameter-handson-cli-cloudwatch-custom

結果(例:存在する場合):

${HOME}/tmp/parameter-handson-cli-cloudwatch-custom

存在しない場合は作成します。

コマンド:

mkdir -p ${HOME}/tmp/parameter-handson-cli-cloudwatch-custom

ローカル環境での作業

  • 今回は"${HOME}/tmp/parameter-handson-cli-cloudwatch-custom"をパラメータファイル情報用ディレクトリとします。

ディレクトリが存在することを確認します。

コマンド:

ls -d ${HOME}/tmp/parameter-handson-cli-cloudwatch-custom

結果(例:存在する場合):

${HOME}/tmp/parameter-handson-cli-cloudwatch-custom

存在しない場合は作成します。

コマンド:

mkdir -p ${HOME}/tmp/parameter-handson-cli-cloudwatch-custom

1. サンプルアプリの作成

1.2. サンプルデータの作成

変数の設定:

FILE_CODE_DATA="${HOME}/tmp/sample.csv"

コマンド:

cat << EOF > ${FILE_CODE_DATA}
2020-03-02T09:00:00Z,10,3
2020-03-02T09:05:00Z,10,6
2020-03-02T09:10:00Z,10,2
2020-03-02T09:15:00Z,10,9
2020-03-02T09:20:00Z,10,1
EOF

1.3. サンプルアプリの実行

変数の設定:

FILE_CODE_SCRIPT="${HOME}/environment/conf-handson-cli-cloudwatch-custom/cloudwatch-sample-app.sh"

コマンド:

sh ${FILE_CODE_SCRIPT} ${FILE_CODE_DATA}

コマンド:

echo $?

結果(例):

0

3. Metric Mathによる演算

変数の設定:

FILE_CLOUDWATCH_QUERY="${HOME}/tmp/cloudwatch-query.json"

コマンド:

cat << EOF > ${FILE_CLOUDWATCH_QUERY}
[
  {
    "Id": "e1",
    "Expression": "m1 / m2",
    "Label": "ErrorRate"
  },
  {
    "Id": "m1",
    "MetricStat": {
        "Metric": {
            "Namespace": "HandsonCliApplication",
            "MetricName": "Errors",
            "Dimensions": [
                {
                    "Name": "FunctionName",
                    "Value": "HandsonCliFunction"
                }
            ]
        },
        "Period": 300,
        "Stat": "Sum",
        "Unit": "Count"
    },
    "ReturnData": false
  },
  {
    "Id": "m2",
    "MetricStat": {
        "Metric": {
            "Namespace": "HandsonCliApplication",
            "MetricName": "Invocations",
            "Dimensions": [
                {
                    "Name": "FunctionName",
                    "Value": "HandsonCliFunction"
                }
            ]
        },
        "Period": 300,
        "Stat": "Sum",
        "Unit": "Count"
    },
    "ReturnData": false
  }
]
EOF

コマンド:

jsonlint -q ${FILE_CLOUDWATCH_QUERY}

変数の設定:

 CLOUDWATCH_START_TIME='2020-03-01T00:00:00Z'

変数の設定:

CLOUDWATCH_END_TIME='2020-03-02T09:00:00Z'

コマンド:

aws cloudwatch get-metric-data \
  --metric-data-queries file://${FILE_CLOUDWATCH_QUERY} \
  --start-time ${CLOUDWATCH_START_TIME} \
  --end-time ${CLOUDWATCH_END_TIME}

結果(例):

{
  "MetricDataResults": [
    {
        "Timestamps": [
            "2020-03-02T09:20:00Z",
            "2020-03-02T09:15:00Z",
            "2020-03-02T09:10:00Z",
            "2020-03-02T09:05:00Z",
            "2020-03-02T09:00:00Z"
        ],
        "StatusCode": "Complete",
        "Values": [
            0.1,
            0.9,
            0.2,
            0.6,
            0.3
        ],
        "Id": "e1",
        "Label": "ErrorRate"
    }
  ]
}

(参考. サンプルアプリの実行)

課題

(以下の手順は作成中)

  • データcsvの作成

  • サンプルアプリの実行

  • アラーム履歴の確認

(参考. メトリックデータの存在期間)

注釈

https://aws.amazon.com/jp/cloudwatch/faqs/#AWS_resource_.26_custom_metrics_monitoring

Q: すべてのメトリクスの保存期間はどうなっていますか?

CloudWatch は、2017 年 7 月 26 日に高分解能カスタムメトリクスの提供を開始しました。これにより、分解能 1 秒までのカスタムメトリクスをパブリッシュして保存できます。2016 年 11 月 1 日にメトリクス保存期間の延長が開始され、以前は 14 日間でしたが、お客様のすべてのメトリクスを 15 か月保存できるようになりました。CloudWatch では、次のようにメトリクスデータを保持します。

期間が 60 秒未満のデータポイントは 3 時間使用できます。このようなデータポイントが高分解能カスタムメトリクスです。 期間が 60 秒 (1 分) のデータポイントは、15 日間使用できます。 期間が 300 秒 (5 分) のデータポイントは、63 日間使用できます。 期間が 3600 秒 (1 時間) のデータポイントは、455 日 (15 か月) 間使用できます。

当初、短い期間でパブリッシュされるデータポイントは、長期の保存のために集約されます。例えば、1 分の期間でデータを収集する場合、そのデータは 15 日間、1 分の分解能で使用できる状態で残されます。15 日後、このデータはまだ使用できますが、集約されるので、5 分の分解能でのみ取得できます。63 日後、データはさらに集約されて、1 時間の分解能で使用できます。これらの期間より長くメトリクスを利用する必要がある場合は、GetMetricStatistics API を使用して、データポイントをオフラインまたは異なるストレージに取得できます。

ローカル環境での作業

課題

  • スクリプトディレクトリの削除

  • サンプルアプリの削除

  • サンプルデータの削除

  • サンプルクエリの削除

パラメータファイル情報用ディレクトリを削除します。

コマンド:

rm -Rf ${HOME}/tmp/parameter-handson-cli-cloudwatch-custom

ローカル環境での作業

パラメータファイル情報用ディレクトリを削除します。

コマンド:

rm -Rf ${HOME}/tmp/parameter-handson-cli-cloudwatch-custom

備考