どれくらいリソースを使用したのかを手っ取り早く調査

利用時間やデータ転送量に応じて料金が課金されるクラウドサービスを使っていると「現在の処理フローでどれくらいのリソースを使用しているのか?」「もし、処理フローを変えたら、リソースの使用量はどれくらい変化するのか?」が気になる場面が少なからずありますよね。特に、定常的に1日に何回も繰り返されるような操作であれば、なおさらです。

ここでは、Azure CLI を使って、Azure の使用量を取得する方法の一つをご紹介します。今回は、ARM (Azure Resource Manager) を対象にしています。

■下準備

まずは、

https://azure.microsoft.com/ja-jp/documentation/articles/xplat-cli-install/

を参考に、Azure CLI をインストールしましょう。Azure CLI は、Windows に限らず、Max OS X でも Linux でも実行できます。各プラットフォーム用にインストーラが用意されています。

インストールが終わったら、

https://azure.microsoft.com/ja-jp/documentation/articles/xplat-cli-connect/

を参考に、Azure サブスクリプションにログインします。

基本的なパターンは、コマンドラインから、

>azure login

ログインができたら、モードを ARM に切り替えます。

>azure config mode arm

エラーが出なければ、ここまでは成功です。

■使用量データの取得方法の基本形

たとえば、2015年12月06日から2015年12月08日の使用量データを取得する場合は、

>azure usage list --reportedStartTime 2015-12-06 --reportedEndTime 2015-12-08 --json

取得されるデータはJSON形式で、時刻は UTC です。デフォルトでは、粒度は1日単位になります。

下記は、取得できるデータのサンプルの、ごく一部分です。

このサンプルからは、samplestorage と言う名前の Storage Account で、12月07日から12月08日にかけてネットワーク送信データ転送が 0.005966 GB あったことがわかります。

このような形で、使用量を計っているメーターごとに出力されます。

{
"id": "/subscriptions/XXX/providers/Microsoft.Commerce/UsageAggregates/Daily_BRSDT_20151206_0000",
"name": "Daily_BRSDT_20151206_0000",
"type": "Microsoft.Commerce/UsageAggregate",
"properties": {
"meterId": "YYY",
"usageStartTime": "2015-12-07T00:00:00+00:00",
"usageEndTime": "2015-12-08T00:00:00+00:00",
"quantity": 0.005966,
"unit": "GB",
"meterName": "Data Transfer Out (GB)",
"meterCategory": "Networking",
"meterRegion": "Zone 2",
"infoFields": {},
"instanceData": "{\"Microsoft.Resources\":{\"resourceUri\":\"/subscriptions/XXX/resourceGroups/g-tokyoiaas/providers/Microsoft.Storage/storageAccounts/samplestorage\",\"location\":\"JA East\"}}"
}

■オプションを加えることで、粒度を1時間単位に

たとえば、2015年12月06日から2015年12月08日の使用量データを、粒度を1時間単位にして取得する場合は、

>azure usage list --granularity hourly --reportedStartTime 2015-12-06 --reportedEndTime 2015-12-08 --json

下記は、取得できるデータのサンプルの、ごく一部分です。

このサンプルからは、samplestorage と言う名前の Storage Account で、12月07日23時から12月08日00時にかけてネットワーク送信データ転送が 0.000187 GB あったことがわかります。

{
"id": "/subscriptions/XXX/providers/Microsoft.Commerce/UsageAggregates/Hourly_BRSDT_20151206_0000",
"name": "Hourly_BRSDT_20151206_0000",
"type": "Microsoft.Commerce/UsageAggregate",
"properties": {
"meterId": "YYY",
"usageStartTime": "2015-12-07T23:00:00+00:00",
"usageEndTime": "2015-12-08T00:00:00+00:00",
"quantity": 0.000187,
"unit": "GB",
"meterName": "Data Transfer Out (GB)",
"meterCategory": "Networking",
"meterRegion": "Zone 2",
"infoFields": {},
"instanceData": "{\"Microsoft.Resources\":{\"resourceUri\":\"/subscriptions/XXX/resourceGroups/g-tokyoiaas/providers/Microsoft.Storage/storageAccounts/samplestorage\",\"location\":\"JA East\"}}"
}

■UTC ではなく JST (日本時間)で見るには

取得できるデータはいずれにせよ UTC なのですが、たとえば、日本時間 12月08日 午前11:00 までの数時間にわたるデータを狙って調査したい場合、

>azure usage list --granularity hourly --reportedStartTime 2015-12-06 --reportedEndTime 2015-12-08T11:00:00+09:00 --json

下記のような、日本時間 12月08日 午前11:00 までのデータが最後に記録されますので、狙い撃ちしやすくなります。

このサンプルからは、samplestorage と言う名前の Storage Account で、日本時間 12月08日 午前10時から午前11時にかけてネットワーク送信データ転送が 0.000331 GB あったことがわかります。

{
"id": "/subscriptions/XXX/providers/Microsoft.Commerce/UsageAggregates/Hourly_BRSDT_20151206_0000",
"name": "Hourly_BRSDT_20151206_0000",
"type": "Microsoft.Commerce/UsageAggregate",
"properties": {
"meterId": "YYY",
"usageStartTime": "2015-12-08T01:00:00+00:00",
"usageEndTime": "2015-12-08T02:00:00+00:00",
"quantity": 0.000331,
"unit": "GB",
"meterName": "Data Transfer Out (GB)",
"meterCategory": "Networking",
"meterRegion": "Zone 2",
"infoFields": {},
"instanceData": "{\"Microsoft.Resources\":{\"resourceUri\":\"/subscriptions/XXX/resourceGroups/g-tokyoiaas/providers/Microsoft.Storage/storageAccounts/samplestorage\",\"location\":\"JA East\"}}"
}

なお、使用量は即時反映されるわけではなく、また、メーターによって反映までに要する時間は異なることに留意下さい。

### usage, 利用料, 課金, 従量制