AWS
CloudWatch

CloudWatchで1つのMetricsに複数の系列を入れちゃおう

More than 3 years have passed since last update.

はじめに

みんな大好きCloudWatchのCustom Metrics。値の入れ方は2通り。

  • Valueを1つ指定
  • Statistics Valueを指定

前者は複数のデータソースから1データサンプルずつを入れるイメージです。
もし複数のデータがある場合には、それらのMin/Avg/Max/SumをCloudWatchが計算してくれます。

後者の場合にはPutする時点で集計を終わらせて、

  • Minimum
  • Maximum
  • Sum
  • SampleCount

を全て指定する必要があります(Average は自動的に Sum / SampleCount になります)。
これらの数字は1回のGetMetricStatisticsで取り出す事が出来ます。

記録したい系列が2つ以上ある場合、それぞれに脈絡のない別の数字を入れてPutMetricDataすると、取り出す時に一気に取り出せて、若干のお得感があります。

どうやるの

$ aws cloudwatch put-metric-data --namespace "multivalue" --metric-name "foo" --statistic-values Minimum=1,Maximum=3,SampleCount=2,Sum=4

$ aws cloudwatch get-metric-statistics --namespace "multivalue" --metric-name "foo" --start-time $(date -v 1H -u +%Y-%m-%dT%H:%M:%S) --end-time $(date -u +%Y-%m-%dT%H:%M:%S) --period 60 --statistics Minimum Average Maximum Sum SampleCount
{
    "Datapoints": [
        {
            "SampleCount": 2.0,
            "Timestamp": "2014-08-08T15:41:00Z",
            "Average": 2.0,
            "Maximum": 3.0,
            "Minimum": 1.0,
            "Sum": 4.0,
            "Unit": "None"
        }
    ],
    "Label": "foo"
}

ちゃんとそれぞれに入れた値と、自動的に計算された Average が得られました。

制限事項

いくつか気をつけないといけない事があります。

Min > Max はダメです

$ aws cloudwatch put-metric-data --namespace "multivalue" --metric-name "foo" --statistic-values Minimum=3,Maximum=1,SampleCount=2,Sum=4

A client error (InvalidParameterValue) occurred when calling the PutMetricData operation: The parameter MetricData.member.1.StatisticValues.Maximum must be greater than MetricData.member.1.StatisticValues.Minimum.

当たり前と言えば、当たり前。

SampleCount = 0 もダメです

$ aws cloudwatch put-metric-data --namespace "multivalue" --metric-name "foo" --statistic-values Minimum=1,Maximum=3,SampleCount=0,Sum=4

A client error (InvalidParameterValue) occurred when calling the PutMetricData operation: The parameter MetricData.member.1.StatisticValues.SampleCount must not equal 0.

0で割れませんから、当然ですね。

そのくせ、

$ aws cloudwatch put-metric-data --namespace "multivalue" --metric-name "foo" --statistic-values Minimum=1,Maximum=3,SampleCount=1,Sum=0

みたいな矛盾しているパターンでも入れてしまえます。

以上、小ネタでした。