【问题标题】:Get Log analytics workspace ID of a virtual machine in Azure connected to a workspace in a different subscription获取 Azure 中连接到不同订阅中的工作区的虚拟机的 Log Analytics 工作区 ID
【发布时间】:2020-11-15 14:06:23
【问题描述】:

这是我的 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_workspace02。

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

我可以使用 python sdk 获取链接到 vm 的工作区 ID。这是代码的sn-p:

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,该虚拟机链接到与运行 VM 的订阅不同的订阅中的日志分析工作区。

谢谢。

【问题讨论】:

    标签: python azure azure-log-analytics


    【解决方案1】:

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

    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)
    

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

    【讨论】:

    • 我最终使用了类似的方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-01
    • 2019-07-23
    相关资源
    最近更新 更多