CloudWatch Metric StreamsでメトリクスデータをS3バケットに貯めてクエリしてみた

2021.12.04

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、CX事業本部 IoT事業部の若槻です。

今回は、CloudWatch Metric StreamsでメトリクスデータをS3バケットに貯めてクエリしてみました。

CloudWatch Metric Streamsとは

今年2021/3にCloudWatchメトリクスのデータをKinesis Data Firehoseにストリームとして流すことができる、CloudWatch Metric Streamsがリリースされました。

これによりメトリクスデータをAWSの他のサービスや外部の監視サービスなどへのリアルタイムな連携を簡単にできるようになりました。

やってみる

1分毎に発行される下記のカスタムメトリクスを対象にします。

下記構成のうち赤枠の部分を作成します。

CloudWatch Metric Streamsの作成

Amazon CloudWatchのマネジメントコンソールで、[Metrics]-[Streams]で[Create metric stream]をクリックします。

Metric Stream作成画面が開きます。

[Metrics to be streamed]で対象とするメトリクスを指定します。今回は特定のネームスペースのみを対象としてみます。[Selected namespaces]を選択し、ネームスペースを選択します。

必要なリソースの構成を指定します。Kinesis Data Firehose、IAMロール、出力先となるS3バケット、などを、既存のものを使用するか自動でセットアップできます。またメトリクスデータの出力形式はJSONとOpenTelemetryを選択できます。今回は[Quick S3 setup]を選択して、すべてのリソースを自動セットアップします。

Custom metric stream nameを指定したら、[Create metric stream]をクリックしてメトリックストリームを作成します。

10秒程度待つとメトリックストリームが作成されました。

作成されたストリームの内容はこんな感じです。出力先となるS3バケットを開きます。

2,3分待つとデータが溜まり始めました。

クエリしてみる

S3 Selectでクエリしてみます。

クエリ結果でメトリクスデータを確認できました。

{
  "metric_stream_name": "QuickPartial-dUGBca",
  "account_id": "XXXXXXXXXXXX",
  "region": "ap-northeast-1",
  "namespace": "StateMachinePublish",
  "metric_name": "temperature",
  "dimensions": {
    "Site": "site_01"
  },
  "timestamp": 1638628560000,
  "value": {
    "count": 1,
    "sum": 10,
    "max": 10,
    "min": 10
  },
  "unit": "None"
}
{
  "metric_stream_name": "QuickPartial-dUGBca",
  "account_id": "XXXXXXXXXXXX",
  "region": "ap-northeast-1",
  "namespace": "StateMachinePublish",
  "metric_name": "temperature",
  "dimensions": {
    "Site": "site_01"
  },
  "timestamp": 1638628620000,
  "value": {
    "count": 1,
    "sum": 15,
    "max": 15,
    "min": 15
  },
  "unit": "None"
}

参考

以上