目標
windowsのpowershellからAzureCLIを使ってAzureメトリックを取得すること
背景
お客様のAzure環境のメトリック分析をすることになりました。今回は試験的試みということもありメトリック取得は閲覧権限のユーザでおこなうことになりました。
とはいえリソース数はそれなりにあり、さらにそのリソースに対してメトリック数もそれなりにあります。手動ダウンロードでは煩雑なためAzureCLIを用いて自動取得することにしました。
AzueCLIを用いたAzureメトリックの取得方法は探せばきちんとMicrosoftのドキュメントに記載があります。ただ、はじめてやる私にとって必要なマニュアルをピンポイントで辿って正解にたどり着くことは難しかったのでこの記事を残します。
概要
今回の作業の流れを以下の図にまとめました。
作業の流れ
- Azureポータルからメトリックを取得したいリソースのリソースIDを取得
- AzureCLIでAzureにログイン
- AzureCLIでメトリック定義の取得
- AzureCLIでメトリックの取得
事前情報
前提
- AzureCLIはインストール済み
- メトリックを取得したいAzureリソースは作成済み
AzureCLIのインストールに関してはこちらを参照してください。
環境
今回実行した環境は以下です。
- windows 10 22H2
- azure-cli 2.55.0
詳細手順
リソースIDの取得
メトリックの取得にはまず対象リソースのリソースIDが必要です。リソースIDはAzureポータルから確認できます。リソースIDの確認手順はこちらが分かりやすいので参考にしてください。
AzureCLIのログイン
powershellを開き、以下のコマンドを実行しログインします。ブラウザでAzureへのログイン画面が表示されるのでログインします。
az login
メトリックの定義の取得
次に取得したいリソースにはどのようなメトリックが用意されているかを確認します。
厳密にはメトリックは指定しなくてもコマンド実行できるのですが、その場合すべてのメトリックが取得されるわけではなくデフォルト設定されているメトリックが取得できるのみのようです。そのため、実質必須パラメータかと思います。
メトリック定義の取得コマンドは以下です。
az monitor metrics list-definitions --resource {リソースID}
たとえば先ほどのAppServiceのメトリック定義を取得すると以下コマンドになります。
az monitor metrics list-definitions --resource /subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.Web/sites/$RESOURCE_NAME
コマンドが正常に実行されるとこのような内容が返されます。本当は指定したリソースIDで指定できる全メトリックが表示されるのですが、今回はCPU Time
の部分だけを抜粋しています。
[
{
"dimensions": [
{
"localizedValue": "Instance",
"value": "Instance"
}
],
"displayDescription": "The amount of CPU consumed by the app, in seconds. For more information about this metric. Please see https://aka.ms/website-monitor-cpu-time-vs-cpu-percentage (CPU time vs CPU percentage). For WebApps only.",
"id": "{リソースID}/providers/microsoft.insights/metricdefinitions/CpuTime",
"isDimensionRequired": false,
"metricAvailabilities": [
{
"retention": "P93D",
"timeGrain": "PT1M"
},
{
"retention": "P93D",
"timeGrain": "PT5M"
},
{
"retention": "P93D",
"timeGrain": "PT15M"
},
{
"retention": "P93D",
"timeGrain": "PT30M"
},
{
"retention": "P93D",
"timeGrain": "PT1H"
},
{
"retention": "P93D",
"timeGrain": "PT6H"
},
{
"retention": "P93D",
"timeGrain": "PT12H"
},
{
"retention": "P93D",
"timeGrain": "P1D"
}
],
"name": {
"localizedValue": "CPU Time",
"value": "CpuTime"
},
"namespace": "Microsoft.Web/sites",
"primaryAggregationType": "Total",
"resourceGroup": "{リソースグループ}",
"resourceId": "{リソースID}",
"supportedAggregationTypes": [
"Count",
"Total",
"Minimum",
"Maximum"
],
"unit": "Seconds"
},
{
"dimensions": [
{
"localizedValue": "Instance",
"value": "Instance"
}
],
レスポンスを見るとメトリック名以外にも多くの項目が記載されています。
たとえばmetricAvailabilitiesを見ると、取得できるデータ間隔が分かります。
"metricAvailabilities": [
{
"retention": "P93D",
"timeGrain": "PT1M"
},
{
"retention": "P93D",
"timeGrain": "PT5M"
},
{
"retention": "P93D",
"timeGrain": "PT15M"
},
{
"retention": "P93D",
"timeGrain": "PT30M"
},
{
"retention": "P93D",
"timeGrain": "PT1H"
},
{
"retention": "P93D",
"timeGrain": "PT6H"
},
{
"retention": "P93D",
"timeGrain": "PT12H"
},
{
"retention": "P93D",
"timeGrain": "P1D"
}
],
PT1M
は1分毎、PT5M
は5分毎、PT1H
は1時間毎、P1D
は1日毎といった具合です。これはメトリック毎に異なります。
また、supportedAggregationTypes
では取得するメトリックの集計方法が分かります。
"supportedAggregationTypes": [
"Count",
"Total",
"Minimum",
"Maximum"
],
データ間隔がPT1H
(1時間ごと)だとすると、Total
ではCPU Timeの1時間の合計、Minimum
では1時間の最低値となります。
これらはメトリック取得する際にオプション指定もできますので、ここで一緒に確認できるのは便利です。
補足① メトリック名はAzureポータル上だと表記が若干異なる
メトリック名はAzureポータルからも確認できます。ただし、ポータル上の表示はコマンドで実行するときに使う表記と若干異なるため注意が必要です。(スペースのあるなしや大文字小文字など)。
たとえばAzureポータル上でAppServiceのメトリックを開くとAverage memory working set
というメトリックがあります。
しかし、コマンド実行時にこれをそのまま打つとエラーになります。コマンドで実行する際はAverageMemoryWorkingSet
となります。このような差もあるため、AzureCLIで指定できるメトリック名を取得します。
補足② メトリック定義はマニュアルで確認するのは少し面倒
メトリック定義を紹介しているマニュアルももちろんあります。AppServiceのメトリック定義情報はこちらです。
ただし、見てわかるようにメトリック定義はサービスごとにページが分かれています。結局リソースIDを調べるのであればコマンドの方が楽かと思います。また、CLIで取得した場合は取得した値をそのまま次のメトリック取得コマンドで使う等応用も効くのでコマンド取得がおススメです。
メトリックの取得
いよいよメトリックの取得です。こちらがマニュアルです。
コマンドは以下になります。
az monitor metrics list --resource {リソースID} --metrics {メトリック名}
たとえばAppServiceのCpuTime
を取得するときは以下になります。
az monitor metrics list --resource /subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.Web/sites/$RESOURCE_NAME --metrics CpuTime
出力はこのようになります。(評価用に作成したリソースのため値が0になっています。)
{
"cost": 59,
"interval": "PT1M",
"namespace": "Microsoft.Web/sites",
"resourceregion": "{リージョン}",
"timespan": "2024-01-12T06:26:59Z/2024-01-12T07:26:59Z",
"value": [
{
"displayDescription": "The amount of CPU consumed by the app, in seconds. For more information about this metric. Please see https://aka.ms/website-monitor-cpu-time-vs-cpu-percentage (CPU time vs CPU percentage). For WebApps only.",
"errorCode": "Success",
"id": "{リソースID}",
"name": {
"localizedValue": "CPU Time",
"value": "CpuTime"
},
"resourceGroup": "{リソースグループ}",
"timeseries": [
{
"data": [
{
"timeStamp": "2024-01-12T06:26:00Z",
"total": 0.0
},
{
"timeStamp": "2024-01-12T06:27:00Z",
"total": 0.0
},
{
"timeStamp": "2024-01-12T06:28:00Z",
"total": 0.0
}
// 省略
],
"metadatavalues": []
}
],
"type": "Microsoft.Insights/metrics",
"unit": "Seconds"
}
]
}
また-o
オプションで出力形式も変更できます。
az monitor metrics list --resource /subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.Web/sites/$RESOURCE_NAME --metrics "CpuTime" -o table
Timestamp Name Total
-------------------- -------- -------
2024-01-12T06:31:00Z CPU Time 0.0
2024-01-12T06:32:00Z CPU Time 0.0
2024-01-12T06:33:00Z CPU Time 0.0
:
おわりに
いかがでしたでしょうか。
簡単そうに見えますが、複数の箇所のマニュアルを見る必要がありやってみるとそこそこ苦戦するところかもしれません。同じような取り組みをする人の助けになれば幸いです。
We Are Hiring
BIPROGYでは一緒に働く仲間を募集しています。ご興味ある方はこちらをご参照ください。