はじめに
みんな大好き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
みたいな矛盾しているパターンでも入れてしまえます。
以上、小ネタでした。