Datadogで監視しているCloudWatchの監視メトリクスの遅延問題が解決！！！ CloudWatch Metric Streams の機能が追加されました~!

# 概要
* 昨日(2021/03/31)、[CloudWatch Metric Streams](https://aws.amazon.com/jp/blogs/aws/cloudwatch-metric-streams-send-aws-metrics-to-partners-and-to-your-apps-in-real-time/)なるものが登場しました。


## CloudWatch Metric Streams
* CloudWatch Metric Streamsとは、CloudWatch MetricのデータをKinesis Data Firehoseに流し込むことができる機能です。

![スクリーンショット 2021-04-01 12.07.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563635/7bf80cee-f7d4-d96e-ebea-cc57ba978110.png)

* これにより、**CloudWatchのメトリクスデータを、DatadogのようなSaaSより参照した場合、CloudWatchと同程度の遅延で参照できます。**

* 今までは、定期的にAPIでポーリングするしかなかった為、メトリクスによっては5〜10分程度の遅延が発生していました。

![スクリーンショット 2021-04-01 12.41.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563635/32db8fe5-8245-34de-36fc-2b053227b7f2.png)

[上記の図引用元](https://dev.classmethod.jp/articles/202104-breaking-cloudwatch-metric-stream/)

# 使ってみた
下記の2つのパターンを試してみました。

* S3にストリーミング送信する方法
* Datadogへストリーミング送信する方法

## S3にストリーミング送信する方法
* 今回は、CloudWatch Metric Streamsを使用し、CloudWatch MetricのデータをDatadogから参照した際に遅延がどうなるかを見てみたいと思います。


### メトリクスストリームの作成
* ストリーミングするメトリクスは、今回はすべてのメトリクスにしました。
* ストリーミングするメトリクスを選択できるということは、これつまり、送信するメトリクスはCloudWatchのネームスペース単位でフィルタがかけられるので、不要なメトリックまで送信しなくていいことになります。

![スクリーンショット 2021-04-01 12.13.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563635/2a90db33-291c-c9d1-ccc0-c90bcf25b23f.png)

### 設定
* 今回は、設定をS3のクイックセットアップにしました。

![スクリーンショット 2021-04-01 12.16.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563635/ca878cc6-d8d4-b6c2-5acf-1ec861039577.png)

* 出力形式も選択できるようで、**OpenTelemetry Metricフォーマット**　もしくは**JSONフォーマット**から選択できるようです。
* デフォルトの設定はJSONフォーマットになっているので、これもこのままにしておきます。

![スクリーンショット 2021-04-01 12.17.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563635/6771c003-4721-730d-837e-392bf187c6c6.png)

* 設定が終わると、Metric Streamsに先ほど作成したメトリクスストリームが出てきました。

![スクリーンショット 2021-04-01 12.19.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563635/d8892b08-c657-a37c-b056-6eecc7be35d0.png)

## Datadogへストリーミング送信する方法

* integrations画面より、AWSを選択すると下記のような選択画面が出てきます。
* Automatically Using CloudFormationで設定していきます。

![スクリーンショット 2021-04-01 12.47.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563635/7c80305f-5b52-8b25-8b42-6950f86e6b1b.png)

1: Automatically Using CloudFormationを押すとスタックの作成に移動するので、[マニュアル](https://docs.datadoghq.com/ja/integrations/guide/aws-cloudwatch-metric-streams-with-kinesis-data-firehose/?tab=cloudformation)を見ながら設定していきます。

![スクリーンショット 2021-04-01 12.55.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563635/ab0d088e-6a88-ba0a-c6d5-6d1d492397c6.png)

* 必要なパラメータを入れていきます。
* **ApiKey**： DatadogAPIキーを追加します。
* **DdSite**： Datadogサイトを選択します。ドキュメントを見ると**datadoghq.com**になっているので、こちらはそのままにしておきます。
* **リージョン**： メトリックストリーミング用に設定するリージョンのコンマ区切りのリストを設定できます。

[オプションのパラメータ]

* **FilterMethod**： メトリックストリーミングに含める名前空間のリストを含めるか除外できます。
* **1番目/ 2番目/ 3番目の名前空間**： 含めるまたは除外する名前空間を指定できます。

その後、「AWSCloudFormationがカスタム名でIAMリソースを作成する可能性があることを認めます」という確認ボックスをオンにし、[スタックの作成]をクリックします。

![スクリーンショット 2021-04-01 13.01.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563635/4b98c1d5-5699-9316-47a4-8b34bdcf22d7.png)

* 作成が完了されると下記のようにスタックは完了しています。
![スクリーンショット 2021-04-01 14.00.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563635/604526df-89ee-5612-e826-87390e5e7f3c.png)

* メトリックストリームに１つ作成されました。
![スクリーンショット 2021-04-01 14.01.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563635/7c3bbdbc-a85f-a026-d03b-a00977fef428.png)

* Datadog側では、接続ができると下記のように表示されます。

![スクリーンショット 2021-04-01 14.26.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563635/7f6859d6-47ab-d703-3dab-ac59f2086dc0.png)


## 検証

* 今回は、DynamoDBにscanで負荷をかけread capacity unitがどうなるかを検証してきます。

## 結果
* 結果としては、本当に遅延時間がほぼなくなり、CloudWatchで検出したタイミングでDatadog側でも参照することができました。

### CloudWatch側の画面

![スクリーンショット 2021-04-01 14.08.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563635/12cc245f-1add-15be-f281-b75b9b09a1f6.png)

### Datadog側の画面

![スクリーンショット 2021-04-01 14.07.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563635/abde447d-04e5-eceb-7ae9-fce17b47b5c4.png)



# 参考記事
https://aws.amazon.com/jp/blogs/aws/cloudwatch-metric-streams-send-aws-metrics-to-partners-and-to-your-apps-in-real-time/

https://dev.classmethod.jp/articles/202104-breaking-cloudwatch-metric-stream/

https://docs.datadoghq.com/ja/integrations/guide/aws-cloudwatch-metric-streams-with-kinesis-data-firehose/?tab=cloudformation