Azure Windows VM にAzure Monitor エージェントを導入しWindows のパフォーマンスカウンターとイベントログを収集する
今回はAzure VM のメトリクスやログを取得するAzure Monitor エージェントを導入し、Data Collection Rule (以下DCR) と関連付けを行いWindows Server のパフォーマンスカウンターやイベントログを収集する方法について説明します。

実施環境
Azure Windows VM | Windows Server 2022 Datacenter |
---|---|
Azure CLI | 2.68.0 |
前提条件
- Azure アカウントおよびサブスクリプションを持っていること
- Azure CLI の実行環境があること
Azure Monitor エージェントとは
Azure Monitorエージェントは、Azure環境内の仮想マシンやその他のリソースからデータを収集し、Azure Monitorに送信するためのエージェントです。このエージェントは、ログデータ、メトリック、パフォーマンスカウンター、イベントログなどのさまざまなデータを収集し、Azure MonitorのLog AnalyticsワークスペースやApplication Insightsに送信します。Azure Monitor エージェントを導入しない場合、OS、プロセスはVM 内部でのみアクセス可能です。
Azure Monitor エージェントはLog Analytics エージェントの後継機能となります。Log Analytics エージェントは2024年8月31日でサポートが終了しているため、Azure Monitor エージェントへの移行が推奨されています。
Azure Monitor エージェントは以下の方法で導入できます。
- VM 拡張機能
- DCR 作成後にVM を関連付け
- VM Insights
- Container Insights
- クライアントインストーラー
- Azure Policy
Azure VM の場合、Azure Portal からDCR を作成しVM の関連付けをおこなうと自動的にAzure Monitor エージェントがインストールされます。VM 拡張機能などの場合はAzure Monitor エージェントをインストール後にDCR との関連付けが必要です。
Azure Monitor エージェントでデータ収集を行うにはDCR が1つ以上必要となります。DCR はAzure Monitor のデータ収集プロセスの一部で、データの収集、変換、格納の一連のパイプラインでデータを取得します。DCR で取得できるデータは以下のとおりです。
- パフォーマンスカウンター
- Windows イベントログ
- IIS ログ
- ファイアーウォールログ
- カスタムテキストログ
- カスタムJSON ログ
- Prometheus メトリクス
DCR で収集したデータはLog Analytics ワークスペースなどに格納されます。Kusto を利用しデータを確認したり、特定のログを検知した時にアラートを発報させるなどの処理も可能です。DCR は1つのリソースに複数のルールを設定できるため、DCR で簡潔にルールを定義しリソースに応じて様々なDCR を設定するのがベストプラクティスとされています。
Azure Monitor でのデータ収集ルールの作成と管理のベスト プラクティス
Azure Monitor エージェントを導入しても料金はかかりませんが、Log Analytics のログ容量により変化します。ログの総容量が多くなる場合は料金も増加するため注意が必要です。Log Analytics の詳細な料金は以下ページを参照してください。
今回の構成
今回はWindows Server 2022 のパフォーマンスカウンターとイベントログを取得するDCR を作成し、Azure VM にAzure Monitor エージェントを導入します。DCR で取得した内容はLog Analytics ワークスペースに格納し、Kusto を使い取得するところまでとします。

変数の定義、リソースグループの作成
初めに今回利用する変数とAzure VM とDCR 用のリソースグループを作成します。
# 変数を定義する
RESOURCE_GROUP_NAME="rg-amatest"
NETWORK_SECURITY_GROUP_NAME="nsg-amatest"
VIRTUAL_NETWORK_NAME="vnet-amatest"
SUBNET_NAME="snet-amatest"
NETWORK_INTERFACE_NAME="nic-amatest"
VIRTUAL_MACHINE_NAME="vm-amatest"
OS_DISK_NAME="osdisk-amatest"
ADMIN_USER_NAME="azureuser"
ADMIN_USER_PASSWORD="zRd7-v=sUM5p"
LOG_ANALYTICS_WORKSPACE_NAME="log-amatest"
DATA_COLLECTION_RULE_NAME="dcr-amatest"
LOCATION="japaneast"
# リソースグループを作成する
az group create --name $RESOURCE_GROUP_NAME --location $LOCATION
Azure VM 、DCR の作成、Azure Monitor エージェントの追加
リソースグループの作成後、Azure VM およびVM に関連するリソースを作成します。
# ネットワークセキュリティグループを作成する
az network nsg create \
--resource-group $RESOURCE_GROUP_NAME \
--name $NETWORK_SECURITY_GROUP_NAME
# Azure Monitorエージェント用のサービスタグを設定する
# AzureMonitorとAzureResourceManagerのサービスタグが必要
az network nsg rule create \
--resource-group $RESOURCE_GROUP_NAME \
--nsg-name $NETWORK_SECURITY_GROUP_NAME \
--name AllowAzureMonitor \
--priority 100 \
--direction Outbound \
--access Allow \
--protocol '*' \
--source-address-prefixes '*' \
--destination-address-prefixes AzureMonitor \
--destination-port-ranges 443
az network nsg rule create \
--resource-group $RESOURCE_GROUP_NAME \
--nsg-name $NETWORK_SECURITY_GROUP_NAME \
--name AllowAzureResourceManager \
--priority 200 \
--direction Outbound \
--access Allow \
--protocol '*' \
--source-address-prefixes '*' \
--destination-address-prefixes AzureResourceManager \
--destination-port-ranges 443
# 仮想ネットワークを作成する
az network vnet create \
--name $VIRTUAL_NETWORK_NAME \
--resource-group $RESOURCE_GROUP_NAME \
--address-prefix 10.0.0.0/16 \
--subnet-name $SUBNET_NAME \
--subnet-prefix 10.0.0.0/24 \
--network-security-group $NETWORK_SECURITY_GROUP_NAME
# 仮想ネットワークインターフェースを作成する
az network nic create \
--resource-group $RESOURCE_GROUP_NAME \
--name $NETWORK_INTERFACE_NAME \
--vnet-name $VIRTUAL_NETWORK_NAME \
--subnet $SUBNET_NAME
# 仮想マシンを作成する
# ログを送信するためにシステムマネージドIDを有効にする
az vm create \
--resource-group $RESOURCE_GROUP_NAME \
--name $VIRTUAL_MACHINE_NAME \
--image Win2022Datacenter \
--admin-username $ADMIN_USER_NAME \
--admin-password $ADMIN_USER_PASSWORD \
--size Standard_D2s_v3 \
--os-disk-name $OS_DISK_NAME \
--nics $NETWORK_INTERFACE_NAME
--assign-identity
Azure VM 作成後、Log Analytics、DCR を作成します。今回はJSON ファイルでパフォーマンスカウンターとイベントログのルールを定義します。Log Analytics のリソースID はAzure Portal などで確認し入力してください。今回は以下のルールを設定します。
- CPU、メモリ、論理ディスク、物理ディスクの状態
- イベントログからSystem、Application でログレベルがCritical、Error、Warning のログ
{
"location": "japaneast",
"properties": {
"dataSources": {
"performanceCounters": [
{
"name": "perfCounterDataSource60",
"streams": [
"Microsoft-Perf"
],
"samplingFrequencyInSeconds": 60,
"counterSpecifiers": [
"\\Processor(_Total)\\% Processor Time",
"\\Memory\\Committed Bytes",
"\\LogicalDisk(_Total)\\Free Megabytes",
"\\PhysicalDisk(_Total)\\Avg. Disk Queue Length"
]
},
{
"name": "perfCounterDataSource30",
"streams": [
"Microsoft-Perf"
],
"samplingFrequencyInSeconds": 30,
"counterSpecifiers": [
"\\Process(_Total)\\Thread Count"
]
}
],
"windowsEventLogs": [
{
"name": "eventLogsDataSource",
"streams": [
"Microsoft-Event"
],
"xPathQueries": [
"System!*[System[(Level = 1 or Level = 2 or Level = 3)]]",
"Application!*[System[(Level = 1 or Level = 2 or Level = 3)]]"
]
}
]
},
"destinations": {
"logAnalytics": [
{
"workspaceResourceId": "<Log AnalyticsワークスペースのリソースID>",
"name": "log-amatest"
}
]
},
"dataFlows": [
{
"streams": [
"Microsoft-Perf"
],
"destinations": [
"log-amatest"
],
"transformKql": "source",
"outputStream": "Microsoft-Perf"
},
{
"streams": [
"Microsoft-Event"
],
"destinations": [
"log-amatest"
],
"transformKql": "source",
"outputStream": "Microsoft-Event"
}
]
}
}
JSON ファイルの作成後、データソースのLog Analytics とDCR を作成します。
# Azure VMのメトリクス格納用のLog Analyticsを作成する
az monitor log-analytics workspace create \
--resource-group $RESOURCE_GROUP_NAME \
--name $LOG_ANALYTICS_WORKSPACE_NAME
# Data Collection Ruleを作成する
az monitor data-collection rule create \
--resource-group $RESOURCE_GROUP_NAME \
--name $DATA_COLLECTION_RULE_NAME \
--rule-file rules.json
DCR 作成後、Azure VM にAzure Monitor エージェントを追加します。エージェント追加後、DCR に基づいてデータを取得するためAzure VM を関連付けます。
# Azure Monitorエージェントを追加する
az vm extension set \
--resource-group $RESOURCE_GROUP_NAME \
--name AzureMonitorWindowsAgent \
--publisher Microsoft.Azure.Monitor \
--vm-name $VIRTUAL_MACHINE_NAME \
--enable-auto-upgrade true
# DCRとAzure VMのリソースIDを取得する
# DCR関連付けのためメモしておく
az vm show --resource-group $RESOURCE_GROUP_NAME --name $VIRTUAL_MACHINE_NAME --query id --output tsv
az monitor data-collection rule show --resource-group $RESOURCE_GROUP_NAME --data-collection-rule-name $DATA_COLLECTION_RULE_NAME --query id --output tsv
# DCRにAzure VMを関連付ける
# リソースIDを変数に格納し関連付け作成時に利用すると
# 「Operation returned an invalid status 'Bad Request'」とエラーになる
az monitor data-collection rule association create \
--association-name AzureMonitorAgent \
--rule-id "<DCRのリソースID>" \
--resource "<Azure VMのリソースID>"
取得したメトリクスの確認
Azure リソース作成後、VM から取得したメトリクスを確認します。Log Analytics ワークスペースの左ペインにあるログから詳細モードを開き以下のKQL を実行します。作成後にメトリクスが表示されない場合は5分から10分程度時間を置いて確認してください。
# Azure VMのパフォーマンスを確認する
Perf
| where Computer == 'vm-amatest'
# Azure VMのイベントログを確認する
Event
| where Computer == 'vm-amatest'
実行後にログの表示を確認します。該当のログを選択すると詳細な内容を確認できます。


リソースのクリーンアップ
データの確認後、リソースをクリーンアップします。
# Azureリソースを削除する
az group delete --name $RESOURCE_GROUP_NAME
まとめ
- Azure Monitor エージェントは仮想マシンやコンテナのパフォーマンス、イベントログ (システムログ) などを取得し、Azure Monitor に配信するツール
- Azure Monitor への配信はData Collection Rule に基づいてデータを取得する
- Data Collection Rule は簡素なルールを用途に応じて複数関連付けるのがベストプラクティスとなっている
- 取得したデータはKusto で確認したり、条件に応じたアラートの設定、Microsoft Sentinel などに利用できる