Cloudwatchのチュートリアルを読み解く

# はじめに

DVAの試験範囲でもあるということで、今日はCloudwatchのチュートリアルをやってみました。

https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/PublishMetrics.html

# 用語の解説

Cloudwatchを語る上で覚えておく必要のある用語をまとめます。

- データポイント : 
  - 個々のデータ（CPU使用率で言うと10%、20%のような具体的な値）

- メトリクス : 
  - データポイントを時系列順にまとめたセット

- ネームスペース（名前空間） : 
  - 発行されたメトリクスを格納するコンテナ（論理的な入れ物）
  - 任意の名前に設定可能（デフォルトのネームスペースは無し）
  - ただしAWSサービスのメトリクスではAWS/<Service名>のネームスペースが使用される（例：AWS/EC2）

- ディメンション : 
  - メトリクスを一意に識別する名前と値のペア

ネームスペースとディメンションの使い分けがいつも混同するのですが、一番大きな枠がネームスペースで、その中から「どのサーバ（サービス）」を抽出するための検索ワードがディメンション、という理解です（ざっくり過ぎて間違っているかもしれませんが）

https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/cloudwatch_concepts.html

※Blackbeltの資料のイメージ図がわかりやすいです。
![cloudwatchimage.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/319027/8778d6d9-c682-0165-5f99-873edd07e867.png)


# 1.データ構成定義

※手順ではないので省略


# 2.CloudWatch にメトリクスを追加

AWS CLIのput-metric-dataコマンドを使用し、Cloudwatchに向けてデータポイントを発行します。
今回はメトリック名をRequestLatency、ネームスペース名をGetStartedと定義しています。


     aws cloudwatch put-metric-data --metric-name RequestLatency --namespace GetStarted \
     --timestamp 2016-10-14T20:30:00Z --value 87 --unit Milliseconds
     aws cloudwatch put-metric-data --metric-name RequestLatency --namespace GetStarted \
     --timestamp 2016-10-14T20:30:00Z --value 51 --unit Milliseconds
     aws cloudwatch put-metric-data --metric-name RequestLatency --namespace GetStarted \
     --timestamp 2016-10-14T20:30:00Z --value 125 --unit Milliseconds
     aws cloudwatch put-metric-data --metric-name RequestLatency --namespace GetStarted \
     --timestamp 2016-10-14T20:30:00Z --value 235 --unit Milliseconds

    aws cloudwatch put-metric-data --metric-name RequestLatency --namespace GetStarted \
    --timestamp 2016-10-14T21:30:00Z --statistic-values Sum=577,Minimum=65,Maximum=189,SampleCount=5 --unit Milliseconds

    aws cloudwatch put-metric-data --metric-name RequestLatency --namespace GetStarted \
    --statistic-values Sum=806,Minimum=47,Maximum=328,SampleCount=6 --unit Milliseconds

### 補足

Cloudwatchは2週間前までのデータしか参照できないようで、チュートリアルのコマンドをそのまま実行するとエラーになります。

    An error occurred (InvalidParameterValue) when calling the PutMetricData operation: The parameter MetricData.member.1.Timestamp must specify a time within the past two weeks.

また、このチュートリアルは3つ目が現在時刻であることを想定しているようなので、1つ目、2つ目のタイムスタンプを「現在時刻-2時間（1時間）」で発行するか、3つ目に--timestampオプションを追加して実行しましょう。


## --metric-name

- 書式 : --metric-name `(value)`

発行するメトリクスの名前。

## --namespace

- 書式 : --namespace `(value)`

メトリクスのネームスペース名。

## --timestamp

- 書式 : --timestamp `(value)`

メトリクスに使用されるタイムスタンプ。
（タイムスタンプはISO 8601 UTC形式（2016-10-03T23：00：00Zなど）で指定）

指定しない場合、デフォルト値はメトリクスデータが受信された時間。

## --value

- 書式 : --value `(value)`

メトリクスの値。

## --unit

- 書式 : --unit `(value)`

メトリクスの単位。

# 3.CloudWatchから統計を取得

2で発行したメトリクスデータの統計を取得します。

    aws cloudwatch get-metric-statistics --namespace GetStarted --metric-name RequestLatency --statistics Average \
    --start-time 2016-10-14T00:00:00Z --end-time 2016-10-15T00:00:00Z --period 60


## --start-time / --end-time

- 書式 : --start-time `(value)` / --end-time `(value)`

集計するデータポイントの開始時間と終了時間。


## --period

- 書式 : --period `(value)`

集計時のデータポイントの粒度（秒単位）
通常メトリックは1分（60秒）の単位で、高解像度メトリックの場合は1、5 、10、30秒もそれぞれ指定可能。


# 4.グラフを表示

あとはグラフを表示させるだけ、と思いましたが手順通りやっても表示されませんでした。
おそらく何かがおかしかったのだと思いますが、ちょっと時間が無いので今日はここまで（宿題）

# 参考URL

https://docs.aws.amazon.com/cli/latest/reference/cloudwatch/put-metric-data.html

https://docs.aws.amazon.com/cli/latest/reference/cloudwatch/get-metric-statistics.html