跨工作区查询
API 允许跨多个工作区进行查询。 可通过两种方法执行这些查询:隐式和显式。 隐式方法对请求的工作区中的数据执行自动联合,而显式方法可以提高精确度,并允许控制从每个工作区访问数据的方式。
任一跨资源查询中的最大资源数限制为 10 个。
资源标识符
对于隐式或显式跨工作区查询,需指定你要访问的资源。 有四种类型的标识符:
- 名称 - OMS 工作区的用户可读字符串 workspaceName<>
- 限定名称 - subscriptionName/resourceGroup/workspaceName 格式的字符串<><><>
- 工作区 ID - GUID 字符串
- Azure 资源 ID - /subscriptions/subscriptionId/resourceGroups/resourceGroup/providers/microsoft.operationalinsights /workspaces/workspaceName 格式的字符串<><><>
注意
强烈建议使用工作区的唯一工作区 ID 或 Azure 资源 ID 来标识工作区,因为它们可以消除歧义且性能更高。
隐式跨工作区查询
对于隐式语法,请指定要包含在查询范围内的工作区。 API 对列表中提供的每个应用程序执行单个查询。 跨工作区 POST 的语法为:
示例:
POST https://api.loganalytics.azure.cn/v1/workspaces/00000000-0000-0000-0000-000000000000/query
Authorization: Bearer <user token>
Content-Type: application/json
{
"query": "union * | where TimeGenerated > ago(1d) | summarize count() by Type, TenantId",
"workspaces": ["AIFabrikamDemo1", "AIFabrikamDemo2"]
}
与 GET 相同的请求(为便于阅读查询参数,示例中已换行):
GET https://api.loganalytics.azure.cn/v1/workspaces/00000000-0000-0000-0000-000000000000/query?query=union+*+%7C+where+TimeGenerated+%3E+ago(1d)+%7C+summarize+count()+by+Type%2C+TenantId&workspaces=AIFabrikamDemo1%2CAIFabrikamDemo2
Authorization: Bearer <user token>
Content-Type: application/json
此查询将对 AIFabrikamDemo1、AIFabrikamDemo2 和由 GUID 00000000-0000-0000-0000-000000000000 表示的工作区运行,并返回结果的并集。 在 GET 版本中,工作区查询参数是要查询的资源的逗号分隔列表。
显式跨工作区查询
在某些情况下,你可能希望对所需工作区中更有针对性的数据子集运行查询,并合并来自多个工作区的数据。 对于这种情况,请在查询中显式指明工作区和表,类似于在表之间进行跨群集或跨数据库查询或联接。
引用另一个应用程序的语法是:workspace('identifier').table。
示例:
POST https://api.loganalytics.azure.cn/v1/workspaces/00000000-0000-0000-0000-000000000000/query
Content-Type: application/json
Authorization: Bearer <user token>
{
"query": "union (AzureActivity | where timestamp > ago(1d)), (workspaces('00000000-0000-0000-0000-000000000000').AzureActivity | where timestamp> ago(1d))"
}
还可以对此查询进行 URL 编码并使其成为 GET 请求。 在这种情况下,其他工作区没有查询参数,因为工作区将从查询内部引用。
限制
出于速率限制的目的,一个跨资源查询将算作一个 API 查询,不管查询中有多少个资源。