CloudWatchのメトリクスをコマンドで取得する

AWS運用自動化サービス「Cloud Automator」

技術4課の鎌田(裕)です。
CloudWatchのメトリクス、マネジメントコンソールで確認される方は多いと思いますが、メトリクスをコマンドラインで取得したいケースもあると思います。
色々な都合でAWS CLIとPowerShellの両方を比較しながら取得したかったのですが、意外と同じデータを取れる情報が並べて書かれている記事がなかったので、こちらのブログでは、AWS CLIとAWS Tools for PowerShellの両方の方法を記載します。

必要なパラメータ

CloudWatchの概念(https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/cloudwatch_concepts.html)でも
解説されている、各種パラメタを指定します。指定するパラメタは以下の通りです。

AWS CLI PowerShell 説明
namespace Namespace メトリクスを取得するAWSのサービスを指定します。EC2であればAWS/EC2を指定します。
metric-name MetricName 取得したいメトリクスの指定をします。CPU使用率であればCPUUtilizationを指定します。
statistics Statistic メトリクスの平均値/最大値/最小値など、いずれの情報を取得したいのか指定をします。最大値であればMaximumです。
period Period メトリクスを取得する間隔を秒で指定します。5分間隔であれば300を指定します。
start-time UtcStartTime メトリクスを表示したい日時の先頭となる日時を指定します。
end-time UtcEndTime メトリクスを表示したい日時の最後となる日時を指定します。
dimensions Dimension メトリクスを一意に識別する名前/値のペアを指定します。

AWS CLIで取得してみる

実際にコマンドで取得してみましょう。
以下のコマンドでは、EC2のCPU使用率の最大値を、指定した日時の期間、5分間隔で出力する例です。

結果はjsonで返されます。

PowerShellで取得してみる

基本はAWS CLIと同じですが、PowerShellで取得する場合、Dimensionは一度オブジェクトを生成する必要があります。
EC2と同じように取得すると、下記のようになります。

結果はDatapointsというオブジェクトで返されます。Datapointsの中は配列になっています。
Get-CWMetricStatisticsの結果を$dataという変数に入れたあと、Datapointsの0番目のデータを見てみると、次のような値が取得できます。

日付の指定について

上記のコマンド実行例では、AWS CLIでは、UTCの時間を計算して指定しています。
一方、PowerShellでは日本時間で記載の上、PowerShellで変換をかけた上でコマンドの引数に使っています。
PowerShellの方が、日付の指定は直間的で分かり易いかも知れません。

終わりに

CloudWatchのメトリクスをコマンドで取得することで、運用などでもご活用いただけると思います。
なかなかAWS CLIとPowerShellで同じ実行例が並んでいなかったためこのブログ記事を書きました。
ご参考になれば幸いです。

AWS運用自動化サービス「Cloud Automator」