你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

将 Azure 数据资源管理器和 Azure Resource Graph 中的数据与 Log Analytics 工作区中的数据相关联

可以将 Azure 数据资源管理器Azure Resource Graph 中的数据与 Log Analytics 工作区中的数据和 Application Insights 资源中的数据相关联,以增强 Azure Monitor 日志中的分析。 Microsoft Sentinel 还会将数据存储在 Log Analytics 工作区中,它支持对 Azure 数据资源管理器的跨服务查询,但不支持对 Azure Resource Graph 的跨服务查询。 本文介绍如何从存储在 Log Analytics 工作区中的任何服务运行跨服务查询。

通过使用支持 Kusto 查询语言 (KQL) 查询的任何客户端工具(包括 Log Analytics Web UI、工作簿、PowerShell 和 REST API)运行跨服务查询。

所需的权限

若要运行跨服务查询以将 Azure 数据资源管理器或 Azure Resource Graph 中的数据与 Log Analytics 工作区中的数据相关联,需要:

  • 对你查询的 Log Analytics 工作区具有 Microsoft.OperationalInsights/workspaces/query/*/read 权限,例如,Log Analytics 读者内置角色所提供的权限。
  • 对在 Azure Resource Graph 中查询的资源的读取者权限。
  • 对在 Azure 数据资源管理器中查询的表的查看者权限。

使用 adx() 查询 Azure 数据资源管理器中的数据

adx 模式的查询中输入 Azure 数据资源管理器群集的标识符,后跟数据库名称和表。

adx('https://help.kusto.windows.net/Samples').StormEvents

将 Azure 数据资源管理器群集表与 Log Analytics 工作区合并

使用 union 命令将群集表与 Log Analytics 工作区合并。

例如:

union customEvents, adx('https://help.kusto.windows.net/Samples').StormEvents
| take 10
let CL1 = adx('https://help.kusto.windows.net/Samples').StormEvents;
union customEvents, CL1 | take 10

提示

允许使用速记格式:ClusterName/InitialCatalog 。 例如 adx('help/Samples') 转换为 adx('help.kusto.windows.net/Samples')

使用 join 运算符(而不是联合)时,需要使用 hint 将 Azure 数据资源管理器群集中的数据与 Log Analytics 工作区合并。 请使用 Hint.remote={Direction of the Log Analytics Workspace}

例如:

AzureDiagnostics
| join hint.remote=left adx("cluster=ClusterURI").AzureDiagnostics on (ColumnName)

将一个租户的 Azure 数据资源管理器群集中的数据与另一个租户的 Azure Monitor 资源联接

不支持在服务之间跨服务查询。 你已登录到单个租户,可运行跨两个资源的查询。

如果 Azure 数据资源管理器资源位于租户 A 中,Log Analytics 工作区位于租户 B 中,那么请使用下述某种方法:

  • 使用 Azure 数据资源管理器可以为不同租户中的主体添加角色。 在 Azure 数据资源管理器群集上将用户 ID 作为授权用户添加到租户 B 中。 验证 Azure 数据资源管理器群集上的 TrustedExternalTenant 属性是否包含租户 B。在租户 B 中完全运行交叉查询。
  • 使用 Lighthouse 将 Azure Monitor 资源投射到租户 A。

从不同租户连接到 Azure 数据资源管理器群集

Kusto 资源管理器会自动将你登录到用户帐户最初所属的租户。 若要使用同一用户帐户访问其他租户中的资源,必须在以下连接字符串中显式指定 TenantId

Data Source=https://ade.applicationinsights.io/subscriptions/SubscriptionId/resourcegroups/ResourceGroupName;Initial Catalog=NetDefaultDB;AAD Federated Security=True;Authority ID=TenantId

使用 arg() 查询 Azure Resource Graph 中的数据(预览版)

输入 arg("") 模式,后跟 Azure Resource Graph 表名。

例如:

arg("").<Azure-Resource-Graph-table-name>

下面是一些使用新 Azure Resource Graph 跨服务查询功能的 Azure Log Analytics 查询示例:

  • 根据 Azure Resource Graph 查询的结果筛选 Log Analytics 查询:

    arg("").Resources 
    | where type == "microsoft.compute/virtualmachines" and properties.hardwareProfile.vmSize startswith "Standard_D"
    | join (
        Heartbeat
        | where TimeGenerated > ago(1d)
        | distinct Computer
        )
        on $left.name == $right.Computer
    
  • 创建仅适用于从 ARG 查询获取的某些资源的警报规则:

    • 基于标记排除资源 - 例如,不触发具有“测试”标记的 VM 的警报。

      arg("").Resources
      | where tags.environment=~'Test'
      | project name 
      
    • 检索与 CPU 使用率相关的性能数据,并使用“prod”标记筛选到资源。

      InsightsMetrics
      | where Name == "UtilizationPercentage"
      | lookup (
          arg("").Resources 
          | where type == 'microsoft.compute/virtualmachines' 
          | project _ResourceId=tolower(id), tags
          )
          on _ResourceId
      | where tostring(tags.Env) == "Prod"
      

更多用例:

  • 使用标记确定 VM 是应全天候运行还是应在夜间关闭。
  • 在包含一定数量的核心的任何服务器上显示警报。

从 Log Analytics 工作区创建基于跨服务查询的警报

若要从 Log Analytics 工作区创建基于跨服务查询的警报规则,请按照创建或编辑日志搜索警报规则中的步骤操作,在“范围”选项卡上选择 Log Analytics 工作区

注意

也可以选择相关资源作为警报范围,运行从 Azure 数据资源管理器和 Azure Resource Graph 到 Log Analytics 工作区的跨服务查询。

限制

常规跨服务查询限制

  • 跨服务查询不支持参数化函数和定义包含其他跨工作区或跨服务表达式的函数,包括 adx()arg()resource()workspace()app()
  • 跨服务查询支持仅“.show” 函数。 此功能允许跨群集查询直接引用 Azure Monitor、Azure 数据资源管理器或 Azure Resource Graph 表格函数。 跨服务查询支持下列命令:
    • .show functions
    • .show function {FunctionName}
    • .show database {DatabaseName} schema as json
  • 数据库名称区分大小写。
  • 不支持标识群集中的“时间戳”列。 Log Analytics 查询 API 将不通过时间筛选器。
  • 跨服务查询仅支持数据检索。
  • 专用链接(专用终结点)和 IP 限制不支持跨服务查询。
  • mv-expand 仅限 2000 个记录。
  • Azure Monitor 日志不支持此 external_table() 函数,这允许在 Azure 数据资源管理器中查询外部表。 若要查询外部表,请在 Azure 数据资源管理器中定义 external_table(<external-table-name>) 为无参数函数。 然后,可以使用表达式 adx("").<function-name> 调用函数。

Azure Resource Graph 跨服务查询限制

  • Microsoft Sentinel 不支持对 Azure Resource Graph 的跨服务查询。
  • 从 Azure Monitor 查询 Azure Resource Graph 数据时:
    • 查询仅会返回前 1000 条记录。
    • Azure Monitor 不返回 Azure Resource Graph 查询错误。
    • Log Analytics 查询编辑器将有效的 Azure Resource Graph 查询标记为语法错误。
    • 不支持以下运算符:smv-apply()rand()arg_max()arg_min()avg()avg_if()countif()sumif()percentile()percentiles()percentilew()percentilesw()stdev()stdevif()stdevp()variance()variancep()varianceif()

将 Azure Resource Graph 表与 Log Analytics 工作区合并

使用 union 命令将群集表与 Log Analytics 工作区合并。

例如:

union AzureActivity, arg("").Resources
| take 10
let CL1 = arg("").Resources ;
union AzureActivity, CL1 | take 10

使用 join 运算符(而不是联合)时,需要使用 hint 将 Azure Resource Graph 中的数据与 Log Analytics 工作区中的数据合并。 使用 Hint.remote={Direction of the Log Analytics Workspace}。 例如:

Perf | where ObjectName == "Memory" and (CounterName == "Available MBytes Memory")
| extend _ResourceId = replace_string(replace_string(replace_string(_ResourceId, 'microsoft.compute', 'Microsoft.Compute'), 'virtualmachines','virtualMachines'),"resourcegroups","resourceGroups")
| join hint.remote=left (arg("").Resources | where type =~ 'Microsoft.Compute/virtualMachines' | project _ResourceId=id, tags) on _ResourceId | project-away _ResourceId1 | where tostring(tags.env) == "prod"

后续步骤