You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Python SDK/Azure CLI获取未启用Monitoring Insights的VM并启用该功能

如何通过Python SDK和Azure CLI管理VM Monitoring Insights

一、Python SDK 实现方案

1. 前置准备

先安装依赖包:

pip install azure-mgmt-monitor azure-mgmt-compute azure-identity

2. 获取订阅内未启用Monitoring Insights的VM列表

通过Azure Identity认证后,调用计算资源和监控API,筛选未启用功能的VM:

from azure.identity import DefaultAzureCredential
from azure.mgmt.compute import ComputeManagementClient
from azure.mgmt.monitor import MonitorManagementClient

# 替换为你的订阅ID
SUBSCRIPTION_ID = "your-subscription-id"

# 初始化客户端
credential = DefaultAzureCredential()
compute_client = ComputeManagementClient(credential, SUBSCRIPTION_ID)
monitor_client = MonitorManagementClient(credential, SUBSCRIPTION_ID)

# 获取订阅下所有VM
vms = compute_client.virtual_machines.list_all()

# 筛选未启用VM Insights的VM
unmonitored_vms = []
for vm in vms:
    # 检查是否存在VM Insights依赖的Agent扩展
    has_required_extension = False
    extensions = compute_client.virtual_machine_extensions.list(vm.resource_group_name, vm.name)
    for ext in extensions:
        if ext.name in ["OmsAgentForLinux", "MicrosoftMonitoringAgent"]:
            has_required_extension = True
            break
    
    # 结合监控API的启用状态判断
    try:
        insights_status = monitor_client.virtual_machine_insights.get_onboarding_status(
            resource_uri=f"/subscriptions/{SUBSCRIPTION_ID}/resourceGroups/{vm.resource_group_name}/providers/Microsoft.Compute/virtualMachines/{vm.name}"
        )
        if insights_status.onboarding_status != "Onboarded" and not has_required_extension:
            unmonitored_vms.append(f"{vm.name} (资源组: {vm.resource_group_name})")
    except Exception:
        if not has_required_extension:
            unmonitored_vms.append(f"{vm.name} (资源组: {vm.resource_group_name})")

print("未启用Monitoring Insights的VM列表:")
for vm in unmonitored_vms:
    print(vm)

3. 为VM启用Monitoring Insights

调用监控客户端接口启用功能,自动部署所需Agent扩展:

def enable_vm_insights(resource_group_name, vm_name):
    try:
        monitor_client.virtual_machine_insights.begin_enable(
            resource_group_name=resource_group_name,
            vm_name=vm_name
        ).result()
        print(f"已成功为VM {vm_name}启用Monitoring Insights")
    except Exception as e:
        print(f"启用失败:{str(e)}")

# 单个VM启用示例
enable_vm_insights("your-resource-group", "your-vm-name")

# 批量启用未监控VM
for vm_entry in unmonitored_vms:
    vm_name = vm_entry.split(" ")[0]
    rg_name = vm_entry.split("资源组: ")[1].rstrip(")")
    enable_vm_insights(rg_name, vm_name)

二、Azure CLI 实现方案

1. 获取订阅内未启用Monitoring Insights的VM列表

# 获取所有VM的资源ID
vm_ids=$(az vm list --query "[].id" -o tsv)

echo "未启用Monitoring Insights的VM列表:"
for vm_id in $vm_ids; do
    # 查询VM Insights启用状态
    status=$(az monitor vm insights get-onboarding-status --resource $vm_id --query "onboardingStatus" -o tsv)
    if [ "$status" != "Onboarded" ]; then
        # 提取VM名称和资源组
        vm_name=$(echo $vm_id | cut -d'/' -f9)
        rg_name=$(echo $vm_id | cut -d'/' -f5)
        echo "$vm_name (资源组: $rg_name)"
    fi
done

2. 为VM启用Monitoring Insights

单个VM启用

az monitor vm insights enable --resource-group your-resource-group --name your-vm-name

批量启用未监控VM

# 导出未启用VM的资源组和名称到临时文件
az vm list --query "[].{rg:resourceGroup, name:name}" -o json | jq -r '.[] | select( (az monitor vm insights get-onboarding-status --resource "/subscriptions/$(az account show --query id -o tsv)/resourceGroups/\(.rg)/providers/Microsoft.Compute/virtualMachines/\(.name)" --query "onboardingStatus" -o tsv) != "Onboarded" ) | "\(.rg) \(.name)"' > unmonitored_vms.txt

# 批量执行启用命令
while read rg vm; do
    az monitor vm insights enable --resource-group $rg --name $vm
done < unmonitored_vms.txt

内容的提问来源于stack exchange,提问作者doublethink13

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 11:57:42