KQLでリソースIDからリソース名のみを抽出する

Azure,Log Analytics,Monitor

AzureのログによってはリソースIDだけが出力されリソース名が出力されない場合があります。
運用時にはリソース名だけが欲しいケースもあるかと思います。

アクテビティログを例にKQL (Kusto Query Language) でリソースIDからリソース名を抽出する方法について調べてみました。
extractとsplitを使う方法で試しています。

スポンサーリンク

KQLでリソースIDからリソース名だけを抽出する

アクテビティログの診断設定

アクテビティログをLog Analyticsワークスペースへ転送する為には診断設定を利用します。
その方法についてはこちらに纏めています。

アクテビティログにはリソースIDのみが含まれる

アクテビティログに含まれるのはリソースIDのみです。
リソース名は含まれません。

AzureActivity

アクテビティログでは、_ResourceIdにリソースIDが出力されます。

※projectで表示項目を絞っています。

アクテビティログ表示例

仮想マシン(Azure VM)作成時のアクテビティログ

リソースIDの例

リソースIDはAzureのリソースを一意に特定するものです。
リソースIDにはサブスクリプションID、リソースグループ名が含まれます。

仮想マシン(Azure VM)のリソースIDの例

仮想マシン(Azure VM)のリソースIDの例です。

/subscriptions/サブスクリプションID/resourcegroups/リソースグループ名/providers/microsoft.compute/virtualmachines/リソース名(仮想マシン名)

extractを使ってリソースIDからリソース名を抽出

extractを使うと正規表現を利用した文字列抽出が出来ます。

extract()

extendを利用して新しくResourceNameと言う名前で列追加しています。
追加したResourceName列にextractを使ってリソース名を出力しています。

extend 演算子

※tolowerを使うと文字列を小文字に変換できます。リソースIDをすべて小文字に統一する為に利用しています。

extractを使った場合

AzureActivity
| where OperationNameValue contains “MICROSOFT.COMPUTE/VIRTUALMACHINES/WRITE"
| extend ResourceName = extract(“([^/]+?)?$", 1, tolower(_ResourceId))
| project TimeGenerated, Level, ActivityStatusValue, ActivitySubstatusValue, ResourceName, _ResourceId
| sort by TimeGenerated

※サンプルは仮想マシン(Azure VM)作成で絞り込みしています。

splitを使ってリソースIDからリソース名を抽出

split()を使うと指定した区切り記号で部分文字列を分割出来ます。
インデックスを指定すると配列内の特定の文字列を取得できます。

split()

今回は”/”スラッシュでリソースIDを分割しています。
インデックスを指定してリソース名を取得しています。

※extendを利用してResourceNameと言う名前で列追加しています。

splitの例

AzureActivity
| where OperationNameValue contains “MICROSOFT.COMPUTE/VIRTUALMACHINES/WRITE"
| extend ResourceName = split(tolower(_ResourceId), “/")[-1]
| project TimeGenerated, Level, ActivityStatusValue, ActivitySubstatusValue, ResourceName, _ResourceId
| sort by TimeGenerated

※サンプルは仮想マシン(Azure VM)作成で絞り込みしています。

最後に

今回はKQLでリソースIDからリソース名を抽出する事を試してみました。
今後も色々試してみたいと思います。

初めてのKQLと言う内容で基本的な内容についてはこちらに纏めています。
併せて見て頂けると有難いです。

IPアドレスからロケーション情報を取得する方法についてはこちらに纏めています。

スポンサーリンク