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

使用汇总规则聚合 Log Analytics 工作区中的数据(预览版)

汇总规则允许按常规节奏聚合日志数据,并将聚合结果发送到 Log Analytics 工作区中的自定义日志表。 使用汇总规则优化以下各项的数据:

  • 分析和报告,尤其是针对大型数据集和时间范围,按照安全和事件分析、每月或年度业务报告等要求。 大型数据集上的复杂查询通常超时。分析和报告已清理已聚合的汇总数据更容易、更高效。

  • 针对详细日志实现成本节省,只需在廉价的基本日志表中根据需要保留相应或长或短的时长,并将汇总数据发送到分析表进行分析和报告即可。

  • 通过在可共享的汇总数据中删除或模糊处理隐私详细信息并限制对具有原始数据的表的访问,从而保护安全和数据隐私

本文介绍汇总规则的工作原理以及如何定义和查看汇总规则,并提供汇总规则在使用和优势方面的一些示例。

下面是一段视频,概述了摘要规则的一些优势:

汇总规则的工作原理

汇总规则直接在 Log Analytics 工作区中执行批处理。 汇总规则基于 KQL 查询,聚合按箱大小定义的数据区块,并将汇总结果重新引入到 Log Analytics 工作区中具有 Analytics 日志计划的自定义表中。

此图显示如何将数据引入 Log Analytics 工作区,以及如何使用汇总规则聚合数据并将其重新引入到工作区中。

无论表具有 Analytics 还是基本数据计划,你都可以从任何表聚合数据。 Azure Monitor 基于你定义的查询创建目标表架构。 如果目标表已存在,Azure Monitor 会追加支持查询结果所需的任何列。 所有目标表还包括一组包含汇总规则信息的标准字段,包括:

  • _RuleName:生成聚合日志项目的汇总规则。
  • _RuleLastModifiedTime:上次修改规则的时间。
  • _BinSize:聚合间隔。
  • _BinStartTime:聚合开始时间。

最多可以配置 30 个活动规则来聚合来自多个表的数据,并将聚合数据发送到单独的目标表或同一个表。

可以通过定义数据导出规则,将汇总数据从自定义日志表导出到存储帐户或事件中心,以便进一步集成。

示例:汇总 ContainerLogsV2 数据

如果要监视容器,则你需要将大量详细日志引入 ContainerLogsV2 表中。

可以在汇总规则中使用此查询在 60 分钟内聚合所有唯一日志条目,保留可用于分析的数据并删除不需要的数据:

ContainerLogV2 | summarize Count = count() by  Computer, ContainerName, PodName, PodNamespace, LogSource, LogLevel, Message = tostring(LogMessage.Message)

下面是 ContainerLogsV2 表中的原始数据:

显示 ContainerLogsV2 表中原始日志数据的屏幕截图。

下面是由汇总规则发送到目标表的聚合数据:

屏幕截图显示汇总规则发送到目标表的聚合数据。

目标表显示 KQL 查询中定义的每个唯一条目的计数,而不是在一小时内记录数百个类似的条目。 针对 ContainerLogsV2 表设置基本数据计划,以便以经济的方式保留原始数据,并使用目标表中的汇总数据满足分析需求。

所需的权限

操作 所需的权限
创建或更新汇总规则 对 Log Analytics 工作区具有 Microsoft.Operationalinsights/workspaces/summarylogs/write 权限,例如,Log Analytics 参与者内置角色所提供的权限
创建或更新目标表 对 Log Analytics 工作区具有 Microsoft.OperationalInsights/workspaces/tables/write 权限,例如,Log Analytics 参与者内置角色所提供的权限
在工作区中启用查询 对 Log Analytics 工作区具有 Microsoft.OperationalInsights/workspaces/query/read 权限,例如,Log Analytics 读者内置角色所提供的权限
查询工作区中的所有日志 对 Log Analytics 工作区具有 Microsoft.OperationalInsights/workspaces/query/*/read 权限,例如,Log Analytics 读者内置角色所提供的权限
查询表中的日志 对 Log Analytics 工作区具有 Microsoft.OperationalInsights/workspaces/query/<table>/read 权限,例如,Log Analytics 读者内置角色所提供的权限
表中的查询日志(表操作) 对 Log Analytics 工作区具有 Microsoft.OperationalInsights/workspaces/tables/query/read 权限,例如,Log Analytics 读者内置角色所提供的权限
使用客户管理的存储帐户中加密的查询 存储帐户的 Microsoft.Storage/storageAccounts/* 权限,例如,存储帐户参与者内置角色提供的

限制和局限

  • 工作区中活动规则的最大数目为 30。
  • 汇总规则目前仅在公有云中可用。
  • 汇总规则处理传入数据,不能在历史时间范围内配置。
  • 当箱执行重试已用尽时,系统将跳过该箱,并且无法重新执行该箱。
  • 不支持使用 Lighthouse 查询另一租户中的 Log Analytics 工作区。

定价模型

摘要规则没有额外费用。 你只需根据运行查询的源表的表计划,为查询和将结果引入目标的操作付费:

源表计划 查询成本 摘要结果引入成本
分析 免费 引入分析日志
基本和辅助 数据扫描 引入分析日志

例如,每个箱返回 100 条记录的每小时规则的成本计算如下:

源表计划 每月价格计算
分析 引入价格 x 记录大小 x 记录数 x 24 小时 x 30 天。
基本和辅助 数据扫描价格 x 扫描大小 + 引入价格 x 记录大小 x 记录数 x 24 小时 x 30 天。 对于持续运行的规则,将扫描源表的所有传入数据。

有关详细信息,请参阅 Azure Monitor 定价

创建或更新汇总规则

可以使用的查询命令取决于查询中使用的源表的计划。

  • Analytics:支持除以下各项外的所有 KQL 命令:
  • 基本:支持单个表上的所有 KQL 命令。 最多可以使用 lookup 运算符联接五个 Analytics 表。
  • 函数:不支持用户定义的函数。 支持 Microsoft 提供的系统函数。

当结果数量或大小显著减少时,考虑到成本和查询体验,汇总规则是最有利的。 例如,目标结果量为源的 0.01% 或更少。 在创建规则之前,试验 Log Analytics 中的查询,并验证查询是否未达到或接近查询 API 限制。 检查查询是否生成了预期结果和架构。 如果查询接近查询限制,请考虑使用较小的“箱大小”在每个箱中处理更少的数据。 你还可以修改查询以返回更少的记录或容量较高的字段。

更新查询时,如果摘要结果中的字段较少,Azure Monitor 不会自动删除目标表中的列,因此你需要手动删除表中的列

若要创建或更新汇总规则,请调用以下 PUT API:

PUT https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourcegroup}/providers/Microsoft.OperationalInsights/workspaces/{workspace}/summarylogs/{ruleName}?api-version=2023-01-01-preview
Authorization: {credential}

{
  "properties": {
      "ruleType": "User",
      "description": "My test rule",
      "ruleDefinition": {
          "query": "StorageBlobLogs | summarize count() by AccountName",
          "binSize": 30,
          "destinationTable": "MySummaryLogs_CL"
      }
  }
}

下表描述了汇总规则参数:

参数 有效值 说明
ruleType UserSystem 指定规则的类型。
- User:你定义的规则。
- System:由 Azure 服务管理的预定义规则。
description 字符串 描述规则及其函数。 如果你有多个规则,此参数非常有用,并且可以帮助进行规则管理。
binSize 2030601201803607201440(分钟) 定义聚合间隔和回溯时间范围。 例如,如果设置 "binSize": 120,可能会获取 02:00 to 04:0004:00 to 06:00 的条目。
query Kusto 查询语言 (KQL) 查询 定义要在规则中执行的查询。 不需要指定时间范围,因为 binSize 参数确定聚合间隔,例如,如果 "binSize": 6002:00 to 03:00。 如果在查询中添加时间筛选器,则查询中使用的时间范围是筛选器和箱大小之间的交集。
destinationTable tablename_CL 指定目标自定义日志表的名称。 名称值必须具有后缀 _CL。 Azure Monitor 根据你在规则中设置的查询,在工作区中创建表(如果尚不存在)。 如果该表已存在于工作区中,Azure Monitor 会添加查询中引入的任何新列。

如果汇总结果包含保留的列名称(例如 TimeGenerated_IsBillable_ResourceIdTenantIdType),Azure Monitor 会将前缀 _Original 追加到原始字段,以保留其原始值。
binDelay(可选) 整数(分钟) 设置在 bin 执行前等待的时间,在延迟到达的数据上执行时通常很有用,也称为引入延迟,并允许大多数数据到达。 默认延迟时间是从 3-5 分钟到 binSize 值的 10%。

如果你知道查询的数据通常延迟引入,请使用已知延迟值或更高的值设置 binDelay 参数,上限为 1440 分钟。 有关详细信息,请参阅《配置聚合计时》
在某些情况下,Azure Monitor 可能会在已设置的箱延迟后开始少量箱执行,以确保服务可靠性和查询成功。
binStartTime(可选) 日期/时间形式为
%Y-%n-%eT%H:%M %Z 格式
指定初始箱执行的日期和时间。 该值可以在规则创建日期/时间减去 binSize 值时开始,或者稍后并在完整小时内开始。 例如,如果日期/时间为 2023-12-03T12:13ZbinSize 为 1,440,则最早的有效 binStartTime 值为 2023-12-02T13:00Z,并且聚合包含记录在 02T13:00 和 03T13:00 之间的数据。 在此情况中,规则开始聚合 03T13:00 加上默认或指定的延迟。

参数 binStartTime 在每日汇总方案中非常有用。 假设你处于 UTC-8 时区,并在 2023-12-03T12:13Z 创建了一个每日规则。 你希望规则在 8:00 (00:00 UTC),也就是你的一天开始之前完成。 将 binStartTime 参数设置为 2023-12-02T22:00Z。 第一个聚合包括记录在 02T:06:00 和 03T:06:00 本地时间之间的所有数据,规则每天在同一时间运行。 有关详细信息,请参阅《配置聚合计时》

更新规则时,可以执行以下操作之一:
- 使用现有 binStartTime 值或删除 binStartTime 参数,在这种情况下,执行会根据初始定义继续进行。
- 使用新 binStartTime 值更新规则以设置新的日期/时间值。
timeSelector(可选) TimeGenerated 定义 Azure Monitor 用于聚合数据的时间戳字段。 例如,如果设置 "binSize": 120,则可能会获取 TimeGenerated 值介于 02:0004:00 之间的条目。

配置聚合计时

默认情况下,汇总规则会在下一完整小时后不久创建第一个聚合。

短延迟 Azure Monitor 会添加用于引入延迟的帐户,延迟即数据在受监视的系统中创建的时间与它在 Azure Monitor 中可用于分析的时间之间的时间。 默认情况下,此延迟介于 3 分 30 秒到聚合每个箱之前“箱大小”值的 10%。 在大多数情况下,此延迟可确保 Azure Monitor 聚合每个箱周期内记录的所有数据。

例如:

  • 在 14:44 创建箱大小为 30 分钟的汇总规则。

    规则在 15:00 之后不久创建第一个聚合,例如,对于在 14:30 到 15:00 之间记录的数据,则为 15:04。

  • 在 14:44 创建一个汇总规则,其箱大小为 720 分钟(12 小时)。

    规则在 13:00 之后的 72 分钟(占 720 个箱大小的 10%),即在 16:12 创建第一个聚合(对于在 03:00 到 15:00 之间记录的数据)。

使用 binStartTimebinDelay 参数更改第一个聚合的计时,并在每次聚合之前添加延迟 Azure Monitor。

后续部分提供默认聚合计时和更高级的聚合计时选项的示例。

使用默认聚合计时

在此示例中,汇总规则是在 2023-06-07 14:44 创建的,Azure Monitor 添加 4 分钟的默认延迟。

binSize(分钟) 初始规则运行 第一个聚合 第二个聚合
1440 2023-06-07 15:04 2023-06-06 15:00 - 2023-06-07 15:00 2023-06-07 15:00 - 2023-06-08 15:00
720 2023-06-07 15:04 2023-06-07 03:00 - 2023-06-07 15:00 2023-06-07 15:00 - 2023-06-08 03:00
360 2023-06-07 15:04 2023-06-07 09:00 - 2023-06-07 15:00 2023-06-07 15:00 - 2023-06-07 21:00
180 2023-06-07 15:04 2023-06-07 12:00 - 2023-06-07 15:00 2023-06-07 15:00 - 2023-06-07 18:00
120 2023-06-07 15:04 2023-06-07 13:00 - 2023-06-07 15:00 2023-06-07 15:00 - 2023-06-07 17:00
60 2023-06-07 15:04 2023-06-07 14:00 - 2023-06-07 15:00 2023-06-07 15:00 - 2023-06-07 16:00
30 2023-06-07 15:04 2023-06-07 14:30 - 2023-06-07 15:00 2023-06-07 15:00 - 2023-06-07 15:30
20 2023-06-07 15:04 2023-06-07 14:40 - 2023-06-07 15:00 2023-06-07 15:00 - 2023-06-07 15:20

设置可选的聚合计时参数

在此示例中,汇总规则是在 2023-06-07 14:44 创建的,该规则包括以下高级配置设置:

  • binStartTime:2023-06-08 07:00
  • binDelay8 分钟
binSize(分钟) 初始规则运行 第一个聚合 第二个聚合
1440 2023-06-09 07:08 2023-06-08 07:00 - 2023-06-09 07:00 2023-06-09 07:00 - 2023-06-10 07:00
720 2023-06-08 19:08 2023-06-08 07:00 - 2023-06-08 19:00 2023-06-08 19:00 - 2023-06-09 07:00
360 2023-06-08 13:08 2023-06-08 07:00 - 2023-06-08 13:00 2023-06-08 13:00 - 2023-06-08 19:00
180 2023-06-08 10:08 2023-06-08 07:00 - 2023-06-08 10:00 2023-06-08 10:00 - 2023-06-08 13:00
120 2023-06-08 09:08 2023-06-08 07:00 - 2023-06-08 09:00 2023-06-08 09:00 - 2023-06-08 11:00
60 2023-06-08 08:08 2023-06-08 07:00 - 2023-06-08 08:00 2023-06-08 08:00 - 2023-06-08 09:00
30 2023-06-08 07:38 2023-06-08 07:00 - 2023-06-08 07:30 2023-06-08 07:30 - 2023-06-08 08:00
20 2023-06-08 07:28 2023-06-08 07:00 - 2023-06-08 07:20 2023-06-08 07:20 - 2023-06-08 07:40

查看汇总规则

使用此 GET API 调用查看特定汇总规则的配置:

GET https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourcegroup}/providers/Microsoft.OperationalInsights/workspaces/{workspace}/summarylogs/{ruleName1}?api-version=2023-01-01-preview
Authorization: {credential}

使用此 GET API 调用查看配置,以查看 Log Analytics 工作区中所有汇总规则的配置:

GET https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourcegroup}/providers/Microsoft.OperationalInsights/workspaces/{workspace}/summarylogs?api-version=2023-01-01-preview
Authorization: {credential}

停止并重启汇总规则

可以让规则停止一段时间,例如,如果要验证数据是否引入到表,并且不想影响汇总表和报告。 重启规则时,Azure Monitor 将从下一完整小时开始处理数据,或基于定义的 binStartTime(可选)参数处理数据。

若要停止规则,请使用以下 POST API 调用:

POST https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourcegroup}/providers/Microsoft.OperationalInsights/workspaces/{workspace}/summarylogs/{ruleName}/stop?api-version=2023-01-01-preview
Authorization: {credential}

若要重启规则,请使用以下 POST API 调用:

POST https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourcegroup}/providers/Microsoft.OperationalInsights/workspaces/{workspace}/summarylogs/{ruleName}/start?api-version=2023-01-01-preview
Authorization: {credential}

删除汇总规则

Log Analytics 工作区中最多可以有 30 条活动的汇总规则。 如果要在已有 30 个活动规则的情况下创建新规则,则必须停止或删除活动汇总规则。

若要删除规则,请使用以下 DELETE API 调用:

DELETE https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourcegroup}/providers/Microsoft.OperationalInsights/workspaces/{workspace}/summarylogs/{ruleName}?api-version=2023-01-01-preview
Authorization: {credential}

监视汇总规则

若要监视汇总规则,请在 Log Analytics 工作区的“诊断设置”中启用“汇总日志”类别。 Azure Monitor 将汇总规则执行详细信息(包括汇总规则运行开始、成功和失败信息)发送到工作区中的 LASummaryLogs 表。

建议设置日志警报规则来接收箱失败或者箱执行即将超时的通知,如下所示。 根据失败原因,可以通过减小箱大小来对每个执行处理更少的数据,或通过修改查询来返回更少的记录或具有较高容量的字段。

此查询返回失败的运行:

LASummaryLogs | where Status == "Failed"

此查询返回箱运行,其中 QueryDurationMs 的值大于 0.9 x 600,000 毫秒:

LASummaryLogs | where QueryDurationMs > 0.9 * 600000

验证数据完整性

汇总规则用于进行缩放,它包含一种重试机制,该机制用来应对与查询限制相关的暂时性服务或查询失败问题。 重试机制使 10 次尝试在 8 小时内聚合为失败箱,如果用尽,则跳过一个箱。 规则设置为 isActive: false 并在连续 8 次重试后暂停。 如果启用监视汇总规则,Azure Monitor 会在工作区的 LASummaryLogs 表中记录事件。

你无法重新运行失败的箱运行,但可以使用以下查询查看失败的运行:

let startTime = datetime("2024-02-16");
let endtTime = datetime("2024-03-03");
let ruleName = "myRuleName";
let stepSize = 20m; // The stepSize value is equal to the bin size defined in the rule
LASummaryLogs
| where RuleName == ruleName
| where Status == 'Succeeded'
| make-series dcount(BinStartTime) default=0 on BinStartTime from startTime to endtTime step stepSize
| render timechart

此查询将结果呈现为时间表:

屏幕截图显示一张图表,该图表绘制在汇总规则中失败箱的查询结果。

有关规则修正选项和主动警报的信息,请参阅“监视汇总规则”部分。

使用客户管理的密钥加密汇总规则查询

KQL 查询可以在注释或查询语法中包含敏感信息。 若要加密汇总规则查询,请将存储帐户链接到 Log Analytics 工作区并使用客户管理的密钥

使用加密查询时的注意事项:

  • 将存储帐户链接并用于加密查询不会中断现有规则。
  • 默认情况下,Azure Monitor 将在 Log Analytics 存储中存储汇总规则。 如果在将存储帐户链接到 Log Analytics 工作区之前已有汇总规则,请更新汇总规则,以便将现有查询保存到存储帐户中。
  • 在存储帐户中保存的查询位于 CustomerConfigurationStoreTable 表中。 这些查询被视为服务项目,其格式可能会更改。
  • 可以将同一存储帐户用于汇总规则查询、Log Analytics 中保存的查询日志警报

汇总规则问题故障排除

本部分提供有关汇总规则故障排除的技巧提示。

意外删除汇总规则目标表

如果在汇总规则处于活动状态时删除目标表,则规则将暂停,Azure Monitor 会向 LASummaryLogs 表发送一个事件,其中包含表明规则已暂停的消息。

如果不需要目标表中的汇总结果,请删除规则和表。 如果需要恢复汇总结果,请按照“创建或更新汇总规则”部分中的步骤重新创建表。 系统将还原目标表,包括删除前引入的数据,具体取决于表中的保留策略。

如果不需要目标表中的汇总结果,请删除规则和表。 如果需要汇总结果,请按照“创建或更新汇总规则”部分中的步骤重新创建目标表并还原所有数据,包括删除前引入的数据,具体取决于表中的保留策略。

查询使用在目标表中创建新列的运算符

目标表架构在创建或更新汇总规则时定义。 如果汇总规则中的查询包含允许基于传入数据的输出架构扩展的运算符(例如,如果查询使用 arg_max(expression, *) 函数),Azure Monitor 在你创建或更新汇总规则后不会向目标表添加新列,并且需要这些列的输出数据将被删除。 若要将新字段添加到目标表,请更新汇总规则手动向表添加列

已移除列中的数据将根据表的保留设置保留在工作区中

在查询中移除字段时,列和数据将继续存在于目标中,并基于表或工作区上定义的保留期来保留相应时长。 如果不需要目标表中的移除列,请从表架构中删除列。 如果随后添加具有相同名称的列,则存在时间未超过保留期的所有数据都将重新出现。