如何通过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
相关产品推荐
相关产品推荐

