你当前正在访问 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()
、arg()
、resource()
、workspace()
、app()
。跨服务查询仅支持数据检索。
跨服务查询支持仅“.show” 命令。 此功能允许跨群集查询直接引用 Azure Monitor、Azure 数据资源管理器或 Azure Resource Graph 表格函数。 跨服务查询支持下列命令:
.show functions
.show function {FunctionName}
.show database {DatabaseName} schema as json
mv-expand
最多支持 2,000 条记录。Azure Monitor 日志不支持此
external_table()
函数,这允许在 Azure 数据资源管理器中查询外部表。 若要查询外部表,请在 Azure 数据资源管理器中定义external_table(<external-table-name>)
为无参数函数。 然后,可以使用表达式adx("").<function-name>
调用函数。使用
join
运算符(而不是联合)时,需要使用hint
将 Azure 数据资源管理器或 Azure Resource Graph 中的数据与 Log Analytics 工作区中的数据合并。 使用Hint.remote={direction of the Log Analytics workspace}
。例如:
AzureDiagnostics | join hint.remote=left adx("cluster=ClusterURI").AzureDiagnostics on (ColumnName)
不支持标识群集中的“时间戳”列。 Log Analytics 查询 API 不会传递时间筛选器。
Azure Resource Graph 跨服务查询注意事项
- 从 Azure Monitor 查询 Azure Resource Graph 数据时:
- 使用
join
运算符可将一个 Azure Resource Graph 表中的数据与 Log Analytics 工作区中的一个表进行组合。 - 查询仅会返回前 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()
。
- 使用
- Microsoft Sentinel 不支持对 Azure Resource Graph 的跨服务查询。
使用 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')
。
将一个租户的 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>
提示
arg()
操作员现在可以在统一的 Microsoft Defender 平台中使用高级搜寻功能。 此功能仅允许对 Microsoft Sentinel 数据进行查询。 有关详细信息,请参阅将 arg() 运算符用于 Azure Resource Graph 查询。
下面是一些使用新 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 工作区的跨服务查询。
将 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"