Cloudwatchメトリクスの取得¶
準備¶
例としてRDSのメトリクスを取得する。
- ネームスペース
AWS/RDS - メトリクス名
CPUUtilization - DBインスタンス識別子
mysql
- jsonの解釈を行う場合、jqコマンドをインストールしておく
yum install jq
メトリクスの取得方法¶
ネームスペースの検索¶
- 情報を取得したいサービスのネームスペースを探す
aws cloudwatch list-metrics |grep Namespace
- RDSは次のネームスペースとなっていることがわかる
"Namespace": "AWS/RDS"
ネームスペースの持つメトリクスの検索¶
- ネームスペースのもつメトリクスから必要な情報を探す
aws cloudwatch list-metrics --namespace "AWS/RDS" |grep MetricName
- メトリクスは次の名前となっていることがわかる
"MetricName": "CPUUtilization"
メトリクスの詳細を表示¶
- 得られたメトリクス名から値を表示する
aws cloudwatch list-metrics --namespace "AWS/RDS" --metric-name "CPUUtilization"
- このうち、Dimentionsの情報から特定のデータベースの「mysql」のデータは次のデータであるとわかる
{ "Namespace": "AWS/RDS", "Dimensions": [ { "Name": "DBInstanceIdentifier", "Value": "mysql" } ], "MetricName": "CPUUtilization" },
メトリクスの特定¶
- 得られたDimentionsをもとに、メトリクスを絞り込む
aws cloudwatch list-metrics --namespace "AWS/RDS" --dimensions Name="DBInstanceIdentifier",Value="mysql" --metric-name "CPUUtilization"
- 次のように1つの結果に絞り込まれる
{ "Metrics": [ { "Namespace": "AWS/RDS", "Dimensions": [ { "Name": "DBInstanceIdentifier", "Value": "mysql" } ], "MetricName": "CPUUtilization" } ] }
メトリクスの値の表示¶
AWS画面上でと同様に特定の期間を指定して、その時間の値を取得する
- 開始時間(start-time)
5分前 - 終了時間(end-time)
現在 - 算出方法
平均(Average)
他には以下のようなものがある
https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch_concepts.html#Statistics - 間隔(statistics)
300秒
- 上記を取得してメトリクスの値を取得する
period の値を増やして1つだけ戻るようにするか、後述のjqコマンド
での成型時に一つ目の値だけ処理するように調整する。
aws cloudwatch get-metric-statistics \ --namespace "AWS/RDS" \ --dimensions Name=DBInstanceIdentifier,Value=sympa \ --metric-name "CPUUtilization" \ --statistics Average \ --start-time `date -u -d '5 minutes ago' +%Y-%m-%dT%TZ` \ --end-time `date -u +%Y-%m-%dT%TZ` \ --period 300
- 次のように結果が戻る
{ "Datapoints": [ { "Timestamp": "2019-06-13T06:02:00Z", "Average": 2.375227686703097, "Unit": "Percent" } ], "Label": "CPUUtilization" }
jsonを解釈して値を取り出す¶
- 上記の出力から次のjqコマンドをパイプさせてjsonを解釈してデータポイントの値(Average)を得る
[0]は複数のデータポイントにマッチしても1つ目の結果のみを示す。
[]とすることで複数を複数のまま処理する。
「-r」オプションは出力結果を""で囲わないようにする。jq -r ".Datapoints[0].Average"
- 実際にはメトリクスの取得も含めて次の1つのコマンドとなる
aws cloudwatch get-metric-statistics \ --namespace "AWS/RDS" \ --dimensions Name=DBInstanceIdentifier,Value=sympa \ --metric-name "CPUUtilization" \ --statistics Average \ --start-time `date -u -d '5 minutes ago' +%Y-%m-%dT%TZ` \ --end-time `date -u +%Y-%m-%dT%TZ` \ --period 300 | jq -r ".Datapoints[0].Average"
- 次のように結果が得られる
2.375227686703097