Azure Monitor Workbook の Tips(検索機能)

azure
Published: 2025-04-03

はじめに

Azure Monitor Workbook を作るときによく使う機能・便利だと思う機能をメモしていくシリーズです。

これまでのエントリは次の通りです。

なお、Azure Monitor Workbook は無限の可能性がありますので、やりたいことに対する実装方法は1つではありません。本エントリは唯一の正解ではなく単なる1つの実装例です。

やりたいこと

本エントリでは、検索ウィンドウで入力・選択された値によって Azure Monitor Workbook に表示させる情報を変化させます。

サンプルは次の画面です。サブスクリプション上に存在する仮想マシンの一部の情報をテーブルで表示したものです。

サンプルテーブル

利用しているクエリは次の通りです。

resources
| where type =~ "Microsoft.Compute/virtualMachines"
| extend vmSize = properties.hardwareProfile.vmSize
| extend imageSku = properties.storageProfile.imageReference.sku
| project id, name, location,resourceGroup, vmSize,imageSku

基本的な考え方

Azure Monitor Workbook における検索機能は、「1.ユーザの入力・選択をパラメータとして受け取る」「2.そのパラメータを利用して情報を出力するクエリにフィルタをかける」という2段構えで実装されます。そのため、パラメータを受け取る箇所を用意する必要があります。

検索ウィンドウの実装

Workbook にパラメータを追加して検索ウィンドウを作ります。検索窓では、自由記入、単一選択、複数選択の3種類を利用できます。

自由記入方式

まずは、ユーザが自由に入力した内容をもとに表示をフィルタする方式の実装方法です。自由記入の場合は、「パラメータの型」を「テキスト」に、「パラメータフィールドのスタイル」を「検索ボックス」にします。そして、この検索窓のパラメータを「vmName」という名前にします。こうすることで、ユーザが検索窓に入力した内容が Workbook の「vmName」というパラメータに自動的に反映されます。

自由記入方式の設定例

あとは、仮想マシンの一部の情報を表示するクエリに、「vmName」というパラメータを使って情報をフィルタする箇所を追加します。パラメータの参照方法は{パラメータ名}です。

resources
| where type =~ "Microsoft.Compute/virtualMachines"
| extend vmSize = properties.hardwareProfile.vmSize
| extend imageSku = properties.storageProfile.imageReference.sku
| project id, name, location,resourceGroup, vmSize,imageSku
| where name contains '{vmName}'

実際の動作は次の通りです。いい感じ。

自由記入方式の動作

単一選択方式

次は、ユーザが選んだ1つの選択肢をもとに表示をフィルタする方式の実装方法です。今回は利用者にリソースグループの名前を選んでもらい、そのリソースグループに含まれる仮想マシンだけを表示します。

「パラメータの型」を「ドロップダウン」に、「データの取得元」を「クエリ」にします。そして、この検索ウィンドウのパラメータを「rgName」という名前にします。こうすることで、ユーザが検索窓で選んだ内容が Workbook の「rgName」というパラメータに自動的に反映されます。

単一選択方式の設定例

さらに、データの取得元をクエリとしたうえで、リソースグループの名前だけを表示するクエリを入力します。次のように全リソースグループの名前を表示するのが一番簡単な方法です。

resourcecontainers
| where type =~ "microsoft.resources/subscriptions/resourcegroups"
| project name

あとは、仮想マシンの一部の情報を表示するクエリに、「rgName」というパラメータを使って情報をフィルタする箇所を追加します。

resources
| where type =~ "Microsoft.Compute/virtualMachines"
| extend vmSize = properties.hardwareProfile.vmSize
| extend imageSku = properties.storageProfile.imageReference.sku
| project id, name, location,resourceGroup, vmSize,imageSku
| where resourceGroup contains '{rgName}'

実際の動作は次の通りです。いい感じ。

単一選択方式の動作その1

一方で、仮想マシンが存在しないリソースグループまでが選択肢にでてくるのは不親切です。仮想マシンが存在するリソースグループだけが選択肢に出てきた方がユーザにとってはありがたいでしょう。そういった場合は、対象のリソースが存在するリソースグループだけを出力するクエリを利用します。

resources
| where type =~ "microsoft.compute/virtualmachines"
| project resourceGroup
| summarize by resourceGroup

こうすると、選択肢の候補が仮想マシンの存在するリソースグループだけになります。利用者にとってはこの方がありがたいでしょう。

単一選択方式改の動作その2

複数選択方式

次は、ユーザが選んだ複数の選択肢をもとに表示をフィルタする方式の実装方法です。今回も利用者にリソースグループの名前を選んでもらい、そのリソースグループに含まれる仮想マシンだけを表示します。

「パラメータの型」を「ドロップダウン」に、「データの取得元」を「クエリ」にします。さらに「複数選択を許可する」をチェックします。

複数選択方式の設定例

そして、リソースグループの名前だけを表示するクエリを入力します。

resources
| where type =~ "microsoft.compute/virtualmachines"
| project resourceGroup
| summarize by resourceGroup

今回は、この検索ウィンドウのパラメータを「vmRgNames」という名前にします。こうすることで、ユーザが検索窓で選んだ内容が Workbook の「vmRgNames」というパラメータに自動的に反映されます。

ただし、複数選択方式の場合、いままでと同じクエリでは動作しません。パラメータが代入された後のクエリが次のようになってしまい、where の行が ParserFailure になってしまいます。

resources
| where type =~ "Microsoft.Compute/virtualMachines"
| extend vmSize = properties.hardwareProfile.vmSize
| extend imageSku = properties.storageProfile.imageReference.sku
| project id, name, location,resourceGroup, vmSize,imageSku
| where resourceGroup contains ''rg-avd','rg-dc''"

なので複数選択方式の場合には、文字列の一致ではなく、配列内に含まれているかで判定します。

resources
| where type =~ "Microsoft.Compute/virtualMachines"
| extend vmSize = properties.hardwareProfile.vmSize
| extend imageSku = properties.storageProfile.imageReference.sku
| project id, name, location,resourceGroup, vmSize,imageSku
| where resourceGroup in ({vmRgNames})

こうすると、パラメータ代入後のクエリが以下のようになり正常に動作します。

resources
| where type =~ "Microsoft.Compute/virtualMachines"
| extend vmSize = properties.hardwareProfile.vmSize
| extend imageSku = properties.storageProfile.imageReference.sku
| project id, name, location,resourceGroup, vmSize,imageSku
| where resourceGroup in ('rg-avd','rg-dc')

実際の動作は次の通りです。いい感じ。

複数選択方式改の動作

応用編

これまではリソースグループの名前でフィルタをかけました。ですが、リソース ID を選択式でフィルタしたいときには工夫が必要です。これまで通り「パラメータの型」を「ドロップダウン」にしてしまうと、選択欄に長いリソース ID が表示されてしまいどのリソースなのかを判別できません。

仮想マシンの名前が見えない

リソース ID でフィルタしたいときには「パラメータの型」を「リソースの選択」にします。そうすると、選択欄にはリソース名だけが表示されます。ただし、パラメータにはリソース ID がしっかりと代入されます。

パラメータの確認

あとはパラメータ名でフィルタがかかるようにクエリを編集すれば OKです。

resources
| where type =~ "Microsoft.Compute/virtualMachines"
| extend vmSize = properties.hardwareProfile.vmSize
| extend imageSku = properties.storageProfile.imageReference.sku
| project id, name, location,resourceGroup, vmSize,imageSku
| where id contains '{vmId}'

実際の動作は以下の通りです。いい感じ。

リソース ID 選択方式の動作

まとめ

今回のエントリでは Azure Monitor Workbook に検索によるフィルタ機能を実装する方法をまとめました。基本的な考え方は、パラメータを受け付けて、リソースを表示する Kusto クエリ内でそのパラメータを使ってフィルタを追加する形です。

Azure Monitor Workbook 上にリソースを一覧表示するのは簡単ですが、実際に使うとなると検索機能があったほうが便利です。上記のとおり簡単に実装できますので、検索機能を追加して使い勝手の良い Workbook を作りましょう。

Note

  • 当サイトは個人のブログです。このブログに示されている見解や意見は個人的なものであり、所属組織の見解や意見を表明するものではありません。
  • 公開情報を踏まえて正確な情報を掲載するよう努めますが、その内容の完全性や正確性、有用性、安全性、最新性について一切保証しません。
  • 添付文章やリンク先などを含む本サイトの内容は作成時点でのものであり、予告なく変更される場合があります。