vague memory

うろ覚えを無くしていこうともがき苦しむ人の備忘録

AWS CloudWatch からデータ取得

AWSモニタリングサービスCloudWatchからメトリクス(データ)を取得します。

CloudWatch.png

自動でデータ収集、グラフ表示できる便利なサービスですが、値の一覧を見る画面は用意されていません。
グラフ上でカーソルを当てるとその部分の数値は表示できます。

CloudWatch_graph.png

グラフではなく値の一覧が見たいという要望があったので、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"