获取连接到不同订阅中的工作区的 Azure 中虚拟机的 Log Analytics 工作区 ID

Get Log analytics workspace ID of a virtual machine in Azure connected to a workspace in a different subscription

这是我的 Azure 设置:

subscription1:
   virtualmachine01        --> linked to log_analytics_workspace01 in subscription01
   virtualmachine02        --> linke to log_analytics_workspace02 in subscription02
   log_analytics_workspace01   
subscription2:
   virtualmachine03        --> linked to log_analytics_workspace02 in subscription02
   log_analytics_workspace02

两个订阅都在同一个租户下,我的用户 ID 可以访问两个订阅。 为了 reporting/auditing 目的,为了在一个日志分析工作区中记录租户下所有虚拟机的指标,我使用 arm 模板将所有虚拟机 virtualmachine01 和 virtualmachine02 链接到单个日志分析工作区 log_analytics_workspace02。

我的自动化要求我获取附加到订阅中所有虚拟机的工作区 ID。例如。在这里订阅 1。

我可以使用 python sdk 获取链接到虚拟机的工作区 ID。这是代码片段:

compute_client = ComputeManagementClient(credentials, subscription_id)
vm_list = compute_client.virtual_machines.list_all()
for vm in vm_list:
  vm_name = vm.id.split('/')[-1]
  vm_rg = vm.id.split('/')[4]
  for extn in vm.resources:
    if extn.id.split('/')[-1] in ['MicrosoftMonitoringAgent', 'MMAExtension', 'OMSExtension', 'OmsAgentForLinux']:
       customer_id = compute_client.virtual_machine_extensions.get(
                            vm_rg,
                            vm_name,
                            extn.id.split('/')[-1]).settings['workspaceId']
law_client = LogAnalyticsManagementClient(credentials, subscription_id)
workspaces = law_client.workspaces.list()
for w in workspaces:
   if w.customer_id == customer_id:
      workspace_id = w.id
      print('Workspace_id '+workspace_id)

脚本循环遍历我有权访问的多个订阅,并获取该订阅中每个虚拟机的日志分析工作区 ID。 上面代码的问题在于它只获取附加到与 vm (subscription1) 相同订阅中的工作空间的 vm 的工作空间 ID,但是当它试图获取链接到不同工作空间的 vm 的工作空间 ID 时失败订阅比 vm.

如何获取虚拟机的 Log Analytics 工作区 ID,该虚拟机链接到不同订阅中的 Log Analytics 工作区,而不是 VM 运行。

谢谢。

您好,我无法测试您在 Python 中的代码,因为我正在使用 PowerShell 生成连接到多个订阅中的日志分析的虚拟机。但请参阅下面修改后的代码片段。希望逻辑有所帮助。

subscription_id_list = ["xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxxx", "yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy"]

for subscription_id in subscription_id_list:
    law_client += LogAnalyticsManagementClient(credentials, subscription_id)

workspaces = law_client.workspaces.list()

for subscription_id in subscription_id_list:
    compute_client = ComputeManagementClient(credentials, subscription_id)
    vm_list = compute_client.virtual_machines.list_all()
    for vm in vm_list:
    vm_name = vm.id.split('/')[-1]
    vm_rg = vm.id.split('/')[4]
    for extn in vm.resources:
        if extn.id.split('/')[-1] in ['MicrosoftMonitoringAgent', 'MMAExtension', 'OMSExtension', 'OmsAgentForLinux']:
        customer_id = compute_client.virtual_machine_extensions.get(
                                vm_rg,
                                vm_name,
                                extn.id.split('/')[-1]).settings['workspaceId']
    for w in workspaces:
        if w.customer_id == customer_id:
            workspace_id = w.id
            print('Workspace_id '+ workspace_id)

如果有效请告诉我。谢谢!