Compartir a través de

创建警报以监视逻辑分区键的存储是否接近 20 GB

适用对象: NoSQL MongoDB Cassandra Gremlin

Azure Cosmos DB 强制执行的最大逻辑分区键大小为 20 GB。 例如,如果容器/集合按 UserId 分区,“Alice”逻辑分区内的数据最多可以存储 20 GB 的数据。

可以使用警报来监视是否有任何逻辑分区键接近 20 GB 的逻辑分区限制。 触发条件时,警报可以通过电子邮件的形式发送通知,也可以执行 Azure 函数或逻辑应用等操作。

在本文中,我们将创建一个警报,当逻辑分区键的存储超过 20 GB 限制的 70%(存储大小超过 14 GB)时,将触发该警报。 可以通过具体 Azure Cosmos DB 帐户中的“警报”窗格或 Azure 门户中的 Azure Monitor 服务设置警报。 这两个界面提供相同的选项。 本文演示如何通过 Azure Monitor 设置警报。

先决条件

我们将使用来自诊断日志中 PartitionKeyStatistics 日志类别的数据创建警报。 诊断日志是一个可选的功能,需要先启用它,然后再继续操作。 在我们的示例中,我们将使用推荐的“特定于资源的日志”选项。

按照使用 Azure 中的诊断设置监视 Azure Cosmos DB 数据中的说明操作,确保:

  • 在要监视的 Azure Cosmos DB 帐户上启用诊断日志
  • 已配置 PartitionKeyStatistics 日志类别的集合
  • 诊断日志被发送到 Log Analytics 工作区

创建警报

  1. 登录到 Azure 门户

  2. 在左侧导航栏中选择“监视”,然后选择“警报”。

  3. 选择“新建警报规则”按钮以打开“创建警报规则”窗格。

  4. 填充“作用域”部分:

    • 打开“选择资源”窗格,配置以下内容:

    • 选择订阅名称。

    • 选择“Azure Cosmos DB 帐户”作为“资源类型”。

    • 选择 Azure Cosmos DB 帐户的“位置”。

    • 填写详细信息后,会显示所选范围中的 Azure Cosmos DB 帐户的列表。 选择要为其配置警报的帐户,然后选择“完成”。

  5. 填充“条件”部分:

    • 打开“选择条件”窗格,以便打开“选择信号”页并配置以下内容:

    • 对于“信号类型”,选择“日志”。

    • 对于“监视服务”,选择“Log Analytics”。

    • 对于“信号名称”,选择“自定义日志搜索”。

    • 在查询编辑器中,添加以下查询。 可以运行查询来预览结果。

    注意

    如果查询当前没有返回任何结果,则完全正常。 只有当存在具有相当大的存储大小的逻辑分区键时,PartitionKeyStatistics 日志才显示数据,因此如果没有返回任何结果,则意味着没有此类键。 如果将来出现此类键,将会触发警报。

    CDBPartitionKeyStatistics
    // Get the latest storage size for each logical partition key value
    | summarize arg_max(TimeGenerated, *) by AccountName, DatabaseName, CollectionName, _ResourceId, PartitionKey 
    | extend utilizationOf20GBLogicalPartition = SizeKb / (20.0 * 1024.0 * 1024.0) // Current storage / 20GB
    | project TimeGenerated, AccountName, DatabaseName, CollectionName, _ResourceId, PartitionKey, SizeKb, utilizationOf20GBLogicalPartition
    
    • 选择“继续编辑警报”。

    • 在“度量”部分中:

      • 对于“度量值”,选择“utilizationOf20GBLogicalPartition”。

      • 对于“聚合类型”,选择“最大”。

      • 根据需要选择所需的“聚合粒度”。 在我们的示例中,我们将选择“1 小时”。 这意味着,警报将使用最高存储值(以小时为单位)计算逻辑分区的存储大小。

    • 在“按维度拆分”部分中:

      • 添加以下六个维度:AccountName、DatabaseName、CollectionName、_ResourceId、PartitionKey、SizeKb。 这可确保在触发警报时,你将能够识别触发了警报的具体 Azure Cosmos DB 帐户、数据库、集合和分区键。

      • 对于“SizeKb”维度,选择“选择所有当前值和未来值”作为“维度值”。

      • 对于所有其他维度:

        • 如果只希望监视特定的 Azure Cosmos DB 帐户、数据库、集合或分区键,请选择特定值;如果该值当前未显示在下拉列表中,请选择“添加自定义值”。

        • 否则,请选择“选择所有当前值和未来值”。 例如,如果 Azure Cosmos DB 帐户当前具有两个数据库和五个集合,则为“Database”和“CollectionName”维度选择“所有当前值和未来值”将确保警报应用于所有现有数据库和集合,以及你将来可能会创建的任何数据库和集合。

    • 在“警报逻辑”部分中:

      • 对于“运算符”,选择“大于”。

      • 选择所需的阈值。 根据我们编写查询的方式,有效阈值将是一个介于 0 和 1(含)之间的数字。 在我们的示例中,我们希望在逻辑分区键达到允许的存储的 70% 时触发警报,因此输入 0.7。 你可以根据需要调整此数字。

      • 根据需要选择所需的“评估频率”。 在我们的示例中,我们将选择“1 小时”。 请注意,此值必须小于或等于警报评估周期。

      完成步骤 5 后,“条件”部分将如以下示例所示。

      Screenshot of an example configuration for signal logic

  6. 填写“操作”部分:

    • 选择现有的操作组或创建新的操作组。 操作组用于定义在触发警报时要执行的操作。 在此示例中,请创建一个新的操作组,用于在触发警报时接收电子邮件通知。 打开“创建操作组”窗格。

    • 在“基本信息”部分中:

      • 选择要在其中创建此操作组的订阅和资源组。

      • 操作组名称 - 操作组名称在资源组中必须独一无二。

      • 显示名称 - 此值包含在电子邮件和短信通知中,用于标识哪个操作组是通知的来源。

    • 在“通知”部分中:

      • 为通知提供一个名称。

      • 选择“电子邮件/短信”作为“通知类型”,并输入你的电子邮件、短信、推送通知或语音信息。

      S
    • 可选:在“操作”部分中,可以选择要运行的操作,例如“操作”部分中的 Azure 函数或逻辑应用。

    • 选择“审阅并创建”以创建操作组。

  7. 填写“详细信息”部分:

    • 定义警报的名称,提供一个可选的说明和警报的严重性级别,然后选择是否在创建规则后启用规则。
    • 选择“审阅并创建”,然后选择“创建”以完成警报创建。

创建警报后,它会在 10 分钟内激活。

示例警报

在 Azure 门户中查看警报:

  1. 登录到 Azure 门户

  2. 在左侧导航栏中选择“监视”,然后选择“警报”。

触发警报时,它将包括:

  • 数据库帐户名称
  • 数据库名称
  • 集合名称
  • 逻辑分区键
  • 逻辑分区键的存储大小(以 KB 为单位)
  • 20 GB 限制的利用率

例如,在下面触发的警报中,我们看到“ContosoTenant”的逻辑分区已达到 20GB 逻辑分区存储限制的 0.78,并且特定数据库和集合中具有 16GB 的数据。

Screenshot of an alert fired when logical partition key size exceeds threshold

修正步骤

达到 20 GB 的逻辑分区大小限制时,你将无法向该逻辑分区写入更多数据。 因此,作为一个长期的解决方案,建议使用不同的分区键重新构建应用程序。

为了帮助为此留出时间,可以请求临时增加现有应用程序的逻辑分区键限制。 提交 Azure 支持票证,在“支持类型”中选择“配额”,在“服务类型”中选择“DocumentDB”,在“问题标题”中键入“临时增加容器的逻辑分区键大小”。 请注意,这是一种临时缓解措施,不建议作为长期解决方案,因为增加限制后不会遵守 SLA 保证。 若要删除配置,请提交支持票证,并选择配额类型“将容器的逻辑分区键大小还原为默认值(20 GB)”。 可以在删除数据以满足 20 GB 逻辑分区限制,或者使用不同的分区键重新构建应用程序后完成此操作。

若要了解有关管理其分区键需要更高存储或吞吐量限制的工作负荷的最佳做法,请参阅创建合成分区键

后续步骤