AWSのモニタリングサービスCloudWatchからメトリクス(データ)を取得します。
自動でデータ収集、グラフ表示できる便利なサービスですが、値の一覧を見る画面は用意されていません。
グラフ上でカーソルを当てるとその部分の数値は表示できます。
グラフではなく値の一覧が見たいという要望があったので、AWS CLIを使用して取得してみます。
get-metric-statistics
データは aws cloudwatch get-metric-statistics
で取得します。構文は以下の通りです。
get-metric-statistics --namespace <value> --metric-name <value> [--dimensions <value>] --start-time <value> --end-time <value> --period <value> --statistics <value> [--unit <value>] [--cli-input-json <value>] [--generate-cli-skeleton]
メトリクス一覧の取得
必須項目となるNamespace等をAWSマネジメントコンソールで確認するのも面倒なのでメトリクス一覧を取得します。
aws cloudwatch list-metrics
で取得できますが、そのままでは見難いのでjqとsortで整形します。
$ aws cloudwatch list-metrics --output json \ | jq -r '.Metrics[] | [ .Namespace ,.MetricName ,.Dimensions[].Name ,.Dimensions[].Value ] | @csv' \ | sort -t ',' -k 1,2
大量に出力されるので目的のNamespaceでgrepする等して絞り込みます
- 出力例
"AWS/EBS","VolumeIdleTime","VolumeId","vol-99a999bb" "AWS/EBS","VolumeIdleTime","VolumeId","vol-123456cd" ・・・略・・・ "AWS/EC2","CPUUtilization","InstanceId","i-abcdef" "AWS/EC2","CPUUtilization","InstanceId","i-ghijkl" ・・・略・・・
データ値一覧の取得
- namespaceには AWS/EC2等、接頭語として"AWS/"が付く(AWSマネジメントコンソール上では付いていない)
- start-time/end-time はUTCで指定
- period の最小値(デフォルト)は60(秒)、60の倍数で指定
- Detailed Monitoring が有効でない場合は最短5分(300秒)の出力
- stastistics = {Average | Sum | SampleCount | Maximum | Minimum}
aws cloudwatch get-metric-statistics \ --namespace AWS/EC2 \ --metric-name CPUUtilization \ --dimensions Name=InstanceId,Value=i-abcdef \ --start-time 2015-09-21T08:34:00 \ --end-time 2015-09-21T09:34:00 \ --period 60 \ --statistics Maximum
- 出力例
日時と値と単位が出力されますが、順不同です。
{ "Datapoints": [ { "Timestamp": "2015-09-21T08:34:00Z", "Maximum": 4.33, "Unit": "Percent" }, { "Timestamp": "2015-09-21T09:29:00Z", "Maximum": 4.07, "Unit": "Percent" }, { "Timestamp": "2015-09-21T08:44:00Z", "Maximum": 4.33, "Unit": "Percent" }, ・・・略・・・ ], "Label": "CPUUtilization" }
データ値一覧の取得(csv変換)
jqでcsv形式に変換し、時系列に並べます。
aws cloudwatch get-metric-statistics \ --namespace AWS/EC2 \ --metric-name CPUUtilization \ --dimensions Name=InstanceId,Value=i-abcdef \ --start-time 2015-09-21T08:34:00 \ --end-time 2015-09-21T09:34:00 \ --period 60 \ --statistics Maximum \ | jq -r '.Datapoints[] | [ .Timestamp ,.Maximum ,.Unit] | @csv' | sort -t ',' -k 1
- 出力例
"2015-09-21T08:34:00Z",4.33,"Percent" "2015-09-21T08:39:00Z",4.26,"Percent" "2015-09-21T08:44:00Z",4.33,"Percent" ・・・略・・・ "2015-09-21T09:29:00Z",4.07,"Percent"