Snowflake Intelligence 资源预算

资源预算可让您监控账户的 Snowflake Intelligence 支出,并在支出超过支出阈值时采取行动。这使您可以控制 Snowflake Intelligence 的成本,并自动采取措施,例如在支出超过配置的限制时撤销访问权限。通过资源预算,您可以控制整个 Snowflake Intelligence 服务在汇总级别上消耗的 Credit。

资源预算的运作方式

资源预算使用 Snowflake 基于标签的成本归因模型。您创建一个标签,将其应用于 Snowflake Intelligence 对象,然后将该标签与预算相关联。Snowflake 跟踪标记对象的 Credit 使用量,并定期根据预算限额评估支出。资源预算对于限制整个账户中 Snowflake Intelligence 的聚合支出非常有用。

Snowflake 通过以下流程强制执行资源预算:

  1. 创建标签

  2. 将标签应用于 Snowflake Intelligence 对象。

  3. 创建预算并指定要跟踪支出的标签。在创建预算时,您还可以设置每月支出限额(以 Credit 为单位)。

  4. 添加一个存储过程,该存储过程将在支出达到配置的预算阈值时执行。例如,您可以调用一个存储过程以在 80% 时发出警报,并调用另一个存储过程以在 100% 时撤销访问权限。

  5. Snowflake 跟踪标记对象的 Credit 使用量。

  6. 当支出达到预算的配置阈值(例如 80% 或 100%)时,Snowflake 会执行为该阈值定义的存储过程。

Snowflake 会定期计算使用情况、评估阈值并触发任何配置的操作。预算超额后,最多可能需要 8 小时才能强制执行预算限制。

创建标签

  1. 创建标签以标识与 Snowflake Intelligence 对象关联的成本中心:

    -- Create a tag with allowed cost center values
    CREATE TAG cost_mgmt_db.tags.cost_center
       ALLOWED_VALUES 'org-level'
       COMMENT = 'cost_center tag';
    
  2. 将标签应用于 Snowflake Intelligence 对象,将其与成本中心关联:

    -- Apply the cost center tag to the Snowflake Intelligence object
    ALTER SNOWFLAKE INTELLIGENCE IF EXISTS si_instance_1
       SET TAG cost_mgmt_db.tags.cost_center = 'org-level';
    

设置资源预算

您可以使用 Snowsight 或 SQL 创建预算并将其与 Snowflake Intelligence 对象关联。

  1. 登录 Snowsight

  2. 在导航菜单中,选择 Admin » Cost management

  3. 选择 Budgets

  4. 选择 + Budget

  5. 对于 Location to store,选择要在其中创建预算的数据库和架构名称。

  6. 对于 Name,请使用 my_budget

  7. 对于 Budget (credits per month),输入 10000 作为预算的支出限额。

  8. 若要缩短 预算刷新间隔 以便更严密地监控支出,请选择 Enable low latency budget

  9. 对于 Threshold,输入 80 作为通知阈值。

  10. 对于 Notify,输入用于接收通知电子邮件的电子邮件地址。

  11. 选择 Next

  12. 对于 Budget scope,将 Snowflake Intelligence 对象上的标签添加到资源预算中。

  13. 选择 Create

现在,Snowflake 会跟踪 si_instance_1 的 Credit 使用量,同时设置每月限额为 10,000 Credit 的 my_budget 预算。

配置阈值操作

您可以附加在支出达到特定阈值时执行的存储过程,这些阈值以支出限额的百分比表示,适用于每月预算期。有关更多信息,请参阅 预算的自定义操作

发送通知

您可以在支出达到阈值时发送通知。有关更多信息,请参阅 预算通知

  1. 设置用于发送通知的电子邮件地址:

    CALL my_budget!SET_EMAIL_NOTIFICATIONS(
      'budgets_notification_integration',
       'costadmin@example.com, budgetadmin@example.com'
    );
    
  2. 设置通知阈值:

    CALL my_budget!SET_NOTIFICATION_THRESHOLD(80);
    

撤消访问权限

  1. 创建一个存储过程,用于撤销对 Snowflake Intelligence 的访问权限。在存储过程中,您可以限制对特定角色的访问权限,以撤销该角色的 USAGE。

    -- Create a stored procedure that revokes access to the SI object
    CREATE OR REPLACE PROCEDURE budgets_db.budgets_schema.sp_revoke_si_access(
       si_name STRING, role_name STRING
    )
    RETURNS STRING
    LANGUAGE SQL
    AS
    BEGIN
       EXECUTE IMMEDIATE 'REVOKE ROLE si_' || si_name || '_role FROM ROLE ' || role_name;
       RETURN 'Access revoked for ' || si_name;
    END;
    

    重要

    确保 role_name 和用户无权通过其他角色访问 Snowflake Intelligence。有关正确配置角色和权限的指南,请参阅 用户权限和访问控制

  2. 设置自定义操作,在预算使用达到 100% 时阻止访问:

    -- Provide access to the stored procedures
    GRANT USAGE ON DATABASE budgets_db TO APPLICATION SNOWFLAKE;
    GRANT USAGE ON SCHEMA budgets_db.budgets_schema TO APPLICATION SNOWFLAKE;
    GRANT USAGE ON PROCEDURE budgets_db.budgets_schema.sp_revoke_si_access(STRING, STRING)
       TO APPLICATION SNOWFLAKE;
    
    -- Block access at 100% of the budget
    CALL budgets_db.budgets_schema.my_budget!ADD_CUSTOM_ACTION(
       SYSTEM$REFERENCE('PROCEDURE',
          'budgets_db.budgets_schema.sp_revoke_si_access(string, string)'),
       ARRAY_CONSTRUCT('SI_NAME', 'ROLE_NAME'),
       'ACTUAL',
       100);
    

备注

您还可以使用自定义操作来发送通知,在预计支出超过预算限额时采取行动。有关更多信息,请参阅 预算的自定义操作

处理支出限额的例外情况

在某些情况下,您需要在达到预算限制后恢复访问权限,例如在财报季或其他高峰期。您可以将阈值配置为超过 100%(最高可达 500%),以处理这些异常情况。

该工作流程假定,当支出达到预算阈值时,使用配置的存储过程撤销访问权限。在以下示例中,支出达到 100% 阈值后,访问权限已被撤销。管理员恢复用户子集并重新授予访问权限。当支出达到 200% 时,撤销过程会再次以硬停止形式运行。

  1. 创建存储过程以恢复对角色的访问权限:

    -- Create a stored procedure that reinstates access to the SI object
    CREATE OR REPLACE PROCEDURE budgets_db.budgets_schema.sp_reinstate_si_access(
       si_name STRING, role_name STRING
    )
    RETURNS STRING
    LANGUAGE SQL
    AS
    BEGIN
       EXECUTE IMMEDIATE 'GRANT ROLE si_' || si_name || '_role TO ROLE ' || role_name;
       RETURN 'Access reinstated for ' || si_name;
    END;
    
  2. 使用恢复访问权限的存储过程配置超过 100% 的阈值。这使您可以提高例外期间的有效预算。当支出达到预算的 200% 时,将再次撤销访问权限:

    -- Add grants for this procedure
    GRANT USAGE ON DATABASE budgets_db TO APPLICATION SNOWFLAKE;
    GRANT USAGE ON SCHEMA budgets_db.budgets_schema TO APPLICATION SNOWFLAKE;
    GRANT USAGE ON PROCEDURE budgets_db.budgets_schema.sp_revoke_si_access(STRING, STRING)
       TO APPLICATION SNOWFLAKE;
    
    -- Issue a reinstatement for a subset of users
    CALL budgets_db.budgets_schema.sp_reinstate_si_access('si_instance_1', 'power_user_role');
    
    -- Set another threshold at 200% as a hard stop
    CALL budgets_db.budgets_schema.my_budget!ADD_CUSTOM_ACTION(
       SYSTEM$REFERENCE(
          'PROCEDURE',
          'budgets_db.budgets_schema.sp_revoke_si_access(string, string)'
       ),
       ARRAY_CONSTRUCT('si_instance_1', 'power_user_role'),
       'ACTUAL',
       200
    );
    

恢复访问权限

为确保用户可以在下一个预算周期开始时再次访问 Snowflake Intelligence,请将以下存储过程设置为在预算周期重新启动时调用。

  1. 创建存储过程以恢复对角色的访问权限:

    -- Create a stored procedure that reinstates access to the SI object
    CREATE OR REPLACE PROCEDURE budgets_db.budgets_schema.sp_reinstate_si_access(
       si_name STRING, role_name STRING
    )
    RETURNS STRING
    LANGUAGE SQL
    AS
    BEGIN
       EXECUTE IMMEDIATE 'GRANT ROLE si_' || si_name || '_role TO ROLE ' || role_name;
       RETURN 'Access reinstated for ' || si_name;
    END;
    
  2. 设置预算的周期开始操作:

    GRANT USAGE ON DATABASE budgets_db TO APPLICATION SNOWFLAKE;
    GRANT USAGE ON SCHEMA budgets_db.budgets_schema TO APPLICATION SNOWFLAKE;
    GRANT USAGE ON PROCEDURE budgets_db.budgets_schema.sp_reinstate_si_access(STRING, STRING)
       TO APPLICATION SNOWFLAKE;
    
    CALL budgets_db.budgets_schema.my_budget!SET_CYCLE_START_ACTION(
       SYSTEM$REFERENCE('PROCEDURE', 'budgets_db.budgets_schema.sp_reinstate_si_access(string, string)'),
       ARRAY_CONSTRUCT('si_instance_1', 'power_user_role')
    );
    

根据预计支出设置警报

要根据预测支出而非实际支出接收警报或执行操作,可以将触发器类型设置为 PROJECTED。例如,要在预计消耗达到预算限制的 75% 时调用名为 alert_team 的过程,请运行以下命令:

CALL budget_db.sch1.my_budget!ADD_CUSTOM_ACTION(
   SYSTEM$REFERENCE('PROCEDURE', 'code_db.sch1.alert_team(string, string, string)'),
   ARRAY_CONSTRUCT('admin@example.com', 'Budget Alert', 'Spending at 75% of budget limit'),
   'PROJECTED',
   75);

列出自定义操作

  • 要列出预算上配置的所有自定义操作,请使用 GET_CUSTOM_ACTIONS 方法:

    -- View all custom actions on the budget
    CALL budgets_db.budgets_schema.my_budget!GET_CUSTOM_ACTIONS();
    

有关更多信息,请参阅 预算的自定义操作

监控使用情况

  • 要查看每个 Snowflake Intelligence 对象的 Credit 使用量,请使用预算的使用情况报告方法:

    -- View usage for the current month
    CALL budgets_db.budgets_schema.my_budget!GET_SERVICE_TYPE_USAGE_V2(
       '2026-02',
       '2026-03'
    );
    

    输出包含以下列:

    描述

    服务类型

    服务类别 (AI)

    实体类型

    对象类型 (SI)

    实体 ID

    Snowflake Intelligence 对象的唯一标识符

    名称

    显示 Snowflake Intelligence 对象的名称

    使用的 Credit

    指定时间段内使用的总 Credit

    Credit 云

    云服务 Credit 使用数量。

预算执行延迟

定期进行预算计算和阈值执行:

  1. Snowflake 计算已标记 Snowflake Intelligence 对象的 Credit 使用量。

  2. 系统根据所有配置的阈值评估支出。

  3. 如果达到阈值,则执行关联的存储过程。

  4. 使用情况仪表板已更新为最新数据。

如果启用了低延迟预算,则预算将在超出预算后两小时内强制执行。否则,可能需要在超出预算后长达 8 小时才能执行。要缩短 :ref:` 刷新间隔 <label-budgets_refresh_interval>`,您可以更频繁地触发预算执行,例如每 60 分钟执行一次。

警告

在 Credit 被消耗和预算系统检测到超出阈值之间存在固有的延迟。在执行间隔期间,在执行操作之前,支出可能会超过配置的阈值。相应地规划阈值。例如,将警报设置为 80%,以便在触发 100% 操作之前给您做出响应的时间。

限制

以下限制适用于 Snowflake Intelligence 的资源预算:

  • 仅限单团队资源: 资源预算适用于整个 Snowflake Intelligence 对象。

  • 执行延迟: 预算执行按周期运行,在超出预算后最多可能需要 8 小时才能执行预算。在操作触发之前的时间间隔内,支出可能超过阈值。

  • 基于角色的访问权限撤销: 要在阈值处撤销访问权限,必须为 Snowflake Intelligence 对象创建专用角色。目前尚不支持直接阻止对象访问的操作。

  • 每月周期: 预算以月为周期运行。您无法配置资源预算期。

  • 标签延迟: 当您更改对象的标签时,更改最多可能需要 8 个小时才能反映在使用标签的预算中。有关更多信息,请参阅 自定义预算