調べる機会があったのでメモ。CloudWatch メトリクスは GetMetricData で取得する。
今回は、10分間のメトリクスを取得する例。日時はオフセット付きでも指定可。(2021-12-24T09:00:00+09:00
)
$ aws cloudwatch get-metric-data \ --metric-data-queries '{JSON}' \ --start-time 2021-12-24T00:00:00Z \ --end-time 2021-12-24T00:10:00Z
--metric-data-queries
に指定する JSON はこんな感じ。今回は、2つの RDS (Role
が READER/WRITER
で分かれている) の CPUUtilization を取得し、Metric Math で平均 (AVG
) を算出する。
それぞれの CPUUtilization は 60sec 間隔 ("Period": 60
) で平均 ("Stat": "Average"
) を取っている。途中計算に利用するメトリクスは、"ReturnData": false
にすることで最終的なレスポンスには表示されなくなる。
[ { "Id": "m0", "Expression": "AVG([m1, m2])", "Label": "AverageCPUUtilization" }, { "Id": "m1", "MetricStat": { "Metric": { "Namespace": "AWS/RDS", "MetricName": "CPUUtilization", "Dimensions": [ { "Name": "DBClusterIdentifier", "Value": "production-cluster-a" }, { "Name": "Role", "Value": "WRITER" } ] }, "Period": 60, "Stat": "Average" }, "ReturnData": false }, { "Id": "m2", "MetricStat": { "Metric": { "Namespace": "AWS/RDS", "MetricName": "CPUUtilization", "Dimensions": [ { "Name": "DBClusterIdentifier", "Value": "production-cluster-a" }, { "Name": "Role", "Value": "READER" } ] }, "Period": 60, "Stat": "Average" }, "ReturnData": false } ]
レスポンスはこんな感じ。これを jq とかで Values の値を取ってきてごにょごにょすればいろいろできそう。
{ "MetricDataResults": [ { "Id": "m0", "Label": "AverageCPUUtilization", "Timestamps": [ "2021-12-24T00:00:00+00:00" ], "Values": [ 4.780129741529112 ], "StatusCode": "Complete" } ], "Messages": [] }
その他
date
コマンドで現在日時を取得する。
$ date -u +"%Y-%m-%dT%H:%M:%SZ"
現在日時から10分前の日時を取得する。
$ date -u +"%Y-%m-%dT%H:%M:%SZ" -d "10 min ago"
現場からは以上です。