Python版 AWS CLIでCloudwatchの情報を取得する
AWSを使っていると、Cloudwatchの情報を外部に取り出したくなるのが人情だと思います。
しかし、Cloudwatchの情報取得に関しては、Javaで書かれた「Amazon CloudWatch Command Line Tool」の情報やAPIを叩くツールを自作するような情報が多く、比較的新しいPython版 AWS CLIでの取得方法の情報はあまり見かけません。
AWS CLIは、旧来のツールで必要なJavaのインストールの必要がなく、また、1つのツールを導入するだけで、Cloudwatchを含む、すべてのAWSのサービスが操作可能というメリットがあり、比較的手軽に使うことができます。そのため、できればこちらで済ませたいところ。
ただ、AWS CLIでのCloudwatchは、いくつか癖があり、実際に使えるようになるまでハマったので、使い方をまとめておきたいと思います。
AWS CLIの導入と初期設定
今回の例を実行するために必要な初期設定方法は、以下の通りです。こちらは、ネット上に多くの情報が多くあるので、説明はざっくりで。
- Python pipの導入
- $ sudo pip install awscli
- $ complete -C aws_completer aws
- 必須ではないですが、これをやっておくとawsコマンド利用時にサブコマンドをタブ補完できるようになるので便利。
- 詳細はAWS CLIのgithubリポジトリ参照。
- $ aws configure
- jqコマンドの導入
- Billing情報監視の有効化
- Billing情報をCloudwatchから取得する場合は、その機能の有効化の設定を行う。設定方法は以下参照。
Billing情報の取得例
説明するよりは、例があった方がわかりやすいと思うので、例を2つ。(Gistへのリンクなので表示されていない場合は再読み込みをお願いします)スクリプトは、Mac OS 10.8 とCentOS 6にて動作確認しています。*1
[
{
"Unit": "Percent",
"Average": 0.33399999999999996,
"Timestamp": "2014-01-23T14:51:00Z"
},
(中略)
{
"Unit": "Percent",
"Average": 0.32799999999999996,
"Timestamp": "2014-01-23T14:56:00Z"
},
{
"Unit": "Percent",
"Average": 0.33399999999999996,
"Timestamp": "2014-01-23T15:01:00Z"
}
]
オプションの中身
スクリプトで指定しているコマンドとオプションの意味は以下の通りです。
- aws cloudwatch get-metric-statistics
- --region
- 取得対象リージョンの指定。Billing情報を取得する際には、必ず「us-east-1」を指定する必要がある。そのほかの場合は、自分が使っているリージョンを指定。"configure"時にデフォルト指定していれば、省略可能。
- --namespace
- --metric-name
- 取得するメトリックを指定。Billingのメトリックは「EstimatedCharges」のみ。EC2は、「CPUUtilization」や「DiskReadOps」など複数のメトリックがある。
- 各サービスで取得可能なメトリックは以下から確認できる。
- --start-time, --end-time
- メトリックの取得範囲をISO Dateの形式で指定する。日付だけ、日付+時間の両方の指定が可能。ただし、指定された期間÷データ間隔で決まるデータ件数(Datapoint数)が1440以下である必要あり。
- --period
- メトリックのデータ間隔を秒間隔で指定する。指定する値は、60の倍数である必要がある。Cloudwatchでは、デフォルトでは5分間間隔でデータが取得されているため、ここでは、300を指定。
- --statistics
- 平均値や最大値など、メトリックをどの断面で取り出すかの指定。
- 指定可能な値は、「"SampleCount"|"Average"|"Sum"|"Minimum"|"Maximum" 」
- --dimensions
- メトリックにサブカテゴリがある場合、指定するパラメータ。Billingでは上記の指定が必須。
- 各サービスで取得可能なDimensionはメトリックと合わせて確認できる。
- jq '.Datapoints | sort_by(.Timestamp)'
これらのオプションの組み合わせだけで、おおよそのAWSの利用状況は取得できると思います。
AWS CLIの公式のコマンドリファレンス*3には、ほかのサービスのメトリック取得方法やCloudwatch以外のサブコマンドの使い方も載っています。ここで例示したもの以外の使い方を知りたい方は、そちらを見てみてください。
夜も更けてきたので、今日はここまでで。