3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Powershell×AzureCLIでAzureメトリックを自動取得する

Last updated at Posted at 2024-01-22

目標

windowsのpowershellからAzureCLIを使ってAzureメトリックを取得すること

背景

お客様のAzure環境のメトリック分析をすることになりました。今回は試験的試みということもありメトリック取得は閲覧権限のユーザでおこなうことになりました。

とはいえリソース数はそれなりにあり、さらにそのリソースに対してメトリック数もそれなりにあります。手動ダウンロードでは煩雑なためAzureCLIを用いて自動取得することにしました。

AzueCLIを用いたAzureメトリックの取得方法は探せばきちんとMicrosoftのドキュメントに記載があります。ただ、はじめてやる私にとって必要なマニュアルをピンポイントで辿って正解にたどり着くことは難しかったのでこの記事を残します。

概要

今回の作業の流れを以下の図にまとめました。

概要図

作業の流れ

  1. Azureポータルからメトリックを取得したいリソースのリソースIDを取得
  2. AzureCLIでAzureにログイン
  3. AzureCLIでメトリック定義の取得
  4. 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というメトリックがあります。

Azureポータル上でのメトリック確認

しかし、コマンド実行時にこれをそのまま打つとエラーになります。コマンドで実行する際は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では一緒に働く仲間を募集しています。ご興味ある方はこちらをご参照ください。

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?