搜索作业是在 Log Analytics 中对任何数据运行的异步查询(包括交互式保留和长期保留的数据),这使得查询结果可在工作区内用于新搜索表中的交互式查询。 搜索任务利用并行处理,可以在大型数据集上运行数小时。 本文介绍如何创建搜索作业以及如何查询其结果数据。
此视频介绍何时以及如何使用搜索任务:
所需的权限
行动 |
所需的权限 |
运行搜索任务 |
对 Log Analytics 工作区的 Microsoft.OperationalInsights/workspaces/tables/write 和 Microsoft.OperationalInsights/workspaces/searchJobs/write 权限,例如 Log Analytics 参与者内置角色所提供的权限。 |
注意
目前不支持跨租户搜索作业,即使通过 Azure Lighthouse 管理 Entra ID 租户也不例外。
何时使用搜索作业
可以使用搜索作业完成以下操作:
- 从长期保留内容以及基本计划和辅助计划的表中检索记录,并将其整合到一个新的 Analytics 表中,以便充分利用 Azure Monitor 日志的完整分析功能。
- 如果 10 分钟的日志查询超时时间不够,则可扫描大量数据。
搜索作业的用途是什么?
搜索作业将其结果发送到与源数据位于同一工作区中的新表中。 搜索作业开始后,结果表即告可用,但结果可能需要一段时间才能开始显示。
搜索作业结果表是一个分析表,可用于日志查询和其他使用工作区中表的 Azure Monitor 功能。 该表使用为工作区设置的保留值,但你可以在创建表后修改此值。
搜索结果表架构基于源表架构和指定的查询。 以下其他列可帮助你跟踪源记录:
列 |
值 |
_OriginalType |
Type 值来自源表。 |
_OriginalItemId |
源表中的 _ItemID 值。 |
_OriginalTimeGenerated |
源表中的 TimeGenerated 值。 |
TimeGenerated |
搜索作业运行的时间。 |
对结果表的查询显示在日志查询审核中,但不显示在初始搜索作业中。
运行搜索任务
运行搜索作业,以将大型数据集中的记录提取到工作区中的新搜索结果表中。
提示
运行搜索作业会产生费用。 因此,在运行搜索作业之前,请在交互式查询模式下写入和优化查询。
若要运行搜索作业,请在 Azure 门户中执行以下操作:
在“Log Analytics 工作区”菜单中,选择“日志”。
键入一个搜索作业查询或仅选择所需的表。
选择屏幕右侧的省略号菜单,然后选择 “搜索作业”。
使用时间选取器指定搜索作业日期范围。 最大范围为一年,但可以是数据保留期允许的任何一年。
如果你的 Kusto 查询还指定了时间范围,则使用时间范围的合并来进行搜索作业。
请输入搜索作业结果表的名称,然后选择“运行搜索作业”。
Azure Monitor 日志运行搜索作业,并在工作区中为搜索作业结果创建新表。
新表准备就绪后,选择 “<查看”searchtablename>_SRCH“ 以查看 Log Analytics 中的表。
搜索作业结果在开始流入新创建的搜索作业结果表时可用。
Azure Monitor 日志显示搜索作业已完成时,会出现已完成消息。 当你看到该消息或进度显示为 100%时,结果表格已经准备好,包含与搜索查询匹配的所有记录。
若要运行搜索作业,请调用表 - 创建或更新 API。 该调用包括要创建的结果表的名称。 结果表的名称必须以 _SRCH 结尾。
PUT https://management.azure.com/subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/Microsoft.OperationalInsights/workspaces/{workspaceName}/tables/<TableName>_SRCH?api-version=2021-12-01-preview
请求正文
在请求正文中包含以下值:
名称 |
类型 |
说明 |
properties.searchResults.query |
字符串 |
用 KQL 编写的日志查询以检索数据。 |
properties.searchResults.limit |
整数 |
结果集中的最大记录数,最多 100 万条记录。 (可选) |
properties.searchResults.startSearchTime |
字符串 |
搜索时间范围的开始时间。 |
properties.searchResults.endSearchTime |
字符串 |
搜索时间范围的结束时间。 |
示例请求
此示例创建一个名为 Syslog_suspected_SRCH 的表,其中包含在 Syslog 表中搜索特定记录的查询结果。
请求
PUT https://management.azure.com/subscriptions/00000000-0000-0000-0000-00000000000/resourcegroups/testRG/providers/Microsoft.OperationalInsights/workspaces/testWS/tables/Syslog_suspected_SRCH?api-version=2021-12-01-preview
请求正文
{
"properties": {
"searchResults": {
"query": "Syslog | where * has 'suspected.exe'",
"limit": 1000,
"startSearchTime": "2020-01-01T00:00:00Z",
"endSearchTime": "2020-01-31T00:00:00Z"
}
}
}
响应
状态代码:202 已接受。
若要运行搜索作业,请运行 az monitor log-analytics workspace table search-job create 命令。 你使用 --name
参数设置的结果表的名称必须以“_SRCH”结尾。
示例
az monitor log-analytics workspace table search-job create --subscription ContosoSID --resource-group ContosoRG --workspace-name ContosoWorkspace --name HeartbeatByIp_SRCH --search-query 'Heartbeat | where ComputerIP has "00.000.00.000"' --limit 1500 --start-search-time "2022-01-01T00:00:00.000Z" --end-search-time "2022-01-08T00:00:00.000Z" --no-wait
若要运行搜索作业,请运行 New-AzOperationalInsightsSearchTable 命令。 你使用 TableName
参数设置的结果表的名称必须以“_SRCH”结尾。
示例
New-AzOperationalInsightsSearchTable -ResourceGroupName ContosoRG -WorkspaceName ContosoWorkspace -TableName HeartbeatByIp_SRCH -SearchQuery "Heartbeat" -StartSearchTime "01-01-2022 00:00:00" -EndSearchTime "01-01-2022 00:00:00"
获取搜索任务状态和详细信息
在“Log Analytics 工作区”菜单中,选择“日志”。
在“表搜索结果”>中,将鼠标悬停在搜索结果表上以查看进度。
搜索作业结果表中的图标会显示更新指示器图标,直到搜索作业完成。
调用 Tables - Get API 获取搜索作业的状态和详细信息:
GET https://management.azure.com/subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/Microsoft.OperationalInsights/workspaces/{workspaceName}/tables/<TableName>_SRCH?api-version=2021-12-01-preview
表格状态
每个搜索作业表都有一个名为 provisioningState 的属性,该属性可以具有下列值之一:
状态 |
说明 |
正在更新 |
填充表及其架构。 |
正在进行 |
搜索作业正在运行,正在获取数据。 |
已成功 |
搜索作业已完成。 |
正在删除 |
正在删除搜索作业表。 |
示例请求
本示例检索上一示例中搜索作业的表状态。
请求
GET https://management.azure.com/subscriptions/00000000-0000-0000-0000-00000000000/resourcegroups/testRG/providers/Microsoft.OperationalInsights/workspaces/testWS/tables/Syslog_SRCH?api-version=2021-12-01-preview
响应
{
"properties": {
"retentionInDays": 30,
"totalRetentionInDays": 30,
"archiveRetentionInDays": 0,
"plan": "Analytics",
"lastPlanModifiedDate": "Mon, 01 Nov 2021 16:38:01 GMT",
"schema": {
"name": "Syslog_SRCH",
"tableType": "SearchResults",
"description": "This table was created using a Search Job with the following query: 'Syslog | where * has 'suspected.exe'.'",
"columns": [...],
"standardColumns": [...],
"solutions": [
"LogManagement"
],
"searchResults": {
"query": "Syslog | where * has 'suspected.exe'",
"limit": 1000,
"startSearchTime": "Wed, 01 Jan 2020 00:00:00 GMT",
"endSearchTime": "Fri, 31 Jan 2020 00:00:00 GMT",
"sourceTable": "Syslog"
}
},
"provisioningState": "Succeeded"
},
"id": "subscriptions/00000000-0000-0000-0000-00000000000/resourcegroups/testRG/providers/Microsoft.OperationalInsights/workspaces/testWS/tables/Syslog_SRCH",
"name": "Syslog_SRCH"
}
若要检查搜索作业表的状态和详细信息,请运行 az monitor log-analytics workspace table show 命令。
示例
az monitor log-analytics workspace table show --subscription ContosoSID --resource-group ContosoRG --workspace-name ContosoWorkspace --name HeartbeatByIp_SRCH --output table \
若要检查搜索作业表的状态和详细信息,请运行 Get-AzOperationalInsightsTable 命令。
示例
Get-AzOperationalInsightsTable -ResourceGroupName "ContosoRG" -WorkspaceName "ContosoWorkspace" -tableName "HeartbeatByIp_SRCH"
注意
如果未提供“-TableName”,该命令将列出与工作区关联的所有表。
删除搜索作业表
我们建议你在查询完表后删除搜索作业表。 此最佳做法可减少工作区混乱和数据保留的额外费用。
限制
搜索作业存在以下限制:
- 已经优化为一次只查询一个表。
- 搜索日期范围最长为一年。
- 支持最长运行 24 小时的搜索,超时后停止。
- 记录集中的结果记录数量限制为 100 万条。
- 每个工作区最多可同时执行五个搜索作业。
- 每个工作区限制为 100 个搜索结果表。
- 每个工作区每天只能执行 100 个搜索作业。
达到记录限制时,Azure 将中止作业,状态为“部分成功”,并且表中仅包含截至该点引入的记录。
KQL 查询限制
搜索作业旨在扫描特定表中的大量数据。 因此,搜索作业查询必须始终以表名开头。 为了使用分布和分段启用异步执行,查询支持 KQL 的子集,包括运算符:
[where](/azure/data-explorer/kusto/query/whereoperator)
[extend](/azure/data-explorer/kusto/query/extendoperator)
[project](/azure/data-explorer/kusto/query/projectoperator)
[project-away](/azure/data-explorer/kusto/query/projectawayoperator)
[project-keep](/azure/data-explorer/kusto/query/project-keep-operator)
[project-rename](/azure/data-explorer/kusto/query/projectrenameoperator)
[project-reorder](/azure/data-explorer/kusto/query/projectreorderoperator)
[parse](/azure/data-explorer/kusto/query/parse-operator)
[parse-where](/azure/data-explorer/kusto/query/parse-where-operator)
可以在这些运算符中使用所有函数和二元运算符。
定价模型
搜索作业的费用基于以下因素:
例如,如果对基本表进行搜索的时间跨度为 30 天,而该表每天保存 500 GB 的数据,则需要支付 15,000 GB 的扫描数据费用。 如果搜索作业返回 1,000 条记录,则需要支付将这 1,000 条记录引入结果表中的费用。
有关详细信息,请参阅 Azure Monitor 定价。
后续步骤