Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 获取Azure中连接到其他订阅中工作区的虚拟机的日志分析工作区ID_Python_Azure_Azure Log Analytics - Fatal编程技术网

Python 获取Azure中连接到其他订阅中工作区的虚拟机的日志分析工作区ID

Python 获取Azure中连接到其他订阅中工作区的虚拟机的日志分析工作区ID,python,azure,azure-log-analytics,Python,Azure,Azure Log Analytics,以下是我的Azure设置: subscription1: virtualmachine01 --> linked to log_analytics_workspace01 in subscription01 virtualmachine02 --> linke to log_analytics_workspace02 in subscription02 log_analytics_workspace01 subscription2:

以下是我的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可以访问这两个订阅。 为了将租户下所有虚拟机的指标记录在一个日志分析工作区中,以便进行报告/审核,我已使用arm模板将所有虚拟机virtualmachine01和virtualmachine02链接到单日志分析工作区log_analytics_Workspace2

我的自动化要求我将工作区id附加到订阅中的所有虚拟机。在这里订阅

我可以使用python sdk将工作区id链接到vm。以下是代码片段:

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)
该脚本循环通过我有权访问的多个订阅,并获取该订阅中每个vm的日志分析工作区id。 上述代码的问题在于,它仅获取与vm(subscription1)在同一订阅中连接到工作区的vm的工作区id,但在尝试获取链接到与vm不同订阅中的工作区的vm的工作区id时失败

如何获取虚拟机的日志分析工作区id,该虚拟机链接到与VM运行的订阅不同的订阅中的日志分析工作区


谢谢。

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

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)

一定要让我知道它是否有效。谢谢

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

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)

一定要让我知道它是否有效。谢谢

我最终使用了一种类似的方法。