You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Snowflake中配置仓库RM每使用10%信用额度的通知告警

Snowflake仓库资源监视器按10%消耗阶梯告警配置方案

Snowflake原生资源监视器暂不支持直接配置多档位百分比重复触发告警,你可以通过「资源监视器基础配置+定时任务+通知集成」的自定义方案实现需求,具体步骤如下:

前置准备

  • 确保你的账号拥有ACCOUNTADMIN权限,或单独持有CREATE RESOURCE MONITOR、CREATE TASK、CREATE NOTIFICATION INTEGRATION权限
  • 提前确认需要监控的仓库范围、告警接收渠道(邮件、企业IM webhook都支持)

步骤1:配置基础资源监视器

先创建绑定目标仓库的资源监视器,记录总信用配额:

-- 创建资源监视器,配额、统计周期可按需调整
CREATE RESOURCE MONITOR RM_TARGET_WH
CREDIT_QUOTA = <你的总信用配额>
FREQUENCY = MONTHLY -- 支持调整为DAILY/WEEKLY/YEARLY
START_TIMESTAMP = '<周期起始时间,如2024-06-01 00:00 UTC>';

-- 绑定到目标仓库,多个仓库可以重复执行该语句绑定
ALTER WAREHOUSE <你的仓库名> SET RESOURCE_MONITOR = RM_TARGET_WH;

步骤2:创建通知集成

配置告警推送的通道,以邮件通知为例:

CREATE NOTIFICATION INTEGRATION RM_ALERT_CHANNEL
TYPE = EMAIL
ENABLED = TRUE
ALLOWED_RECIPIENTS = ('告警接收邮箱1', '告警接收邮箱2');

如果需要推送到Slack、Teams等渠道,将TYPE改为WEBHOOK,填写对应平台的webhook地址即可。

步骤3:创建告警逻辑与定时任务

先创建一张控制表记录上一次触发告警的百分比,避免同档位重复推送:

-- 创建告警状态控制表
CREATE TABLE RM_ALERT_RECORD (
    STAT_CYCLE DATE, -- 统计周期
    LAST_TRIGGER_PERCENT INT -- 上一次触发的百分比
);
-- 初始化当前周期的记录
INSERT INTO RM_ALERT_RECORD VALUES (DATE_TRUNC('MONTH', CURRENT_DATE()), 0);

再创建存储过程实现告警判断逻辑:

CREATE OR REPLACE PROCEDURE RM_10PERCENT_ALERT()
RETURNS STRING
LANGUAGE SQL
AS
$$
DECLARE
    total_quota NUMERIC;
    used_credit NUMERIC;
    current_percent INT;
    last_trigger INT;
BEGIN
    -- 获取资源监视器总配额
    SELECT CREDIT_QUOTA INTO total_quota FROM SNOWFLAKE.ACCOUNT_USAGE.RESOURCE_MONITORS WHERE NAME = 'RM_TARGET_WH';
    -- 获取当前周期已消耗信用
    SELECT SUM(CREDITS_USED) INTO used_credit FROM SNOWFLAKE.ACCOUNT_USAGE.WAREHOUSE_METERING_HISTORY 
    WHERE WAREHOUSE_NAME IN (<你的目标仓库列表>) AND START_TIME >= DATE_TRUNC('MONTH', CURRENT_DATE());
    -- 计算当前消耗百分比,取10的整数倍
    current_percent = FLOOR(used_credit / total_quota * 100 / 10) * 10;
    -- 获取上一次触发的百分比
    SELECT LAST_TRIGGER_PERCENT INTO last_trigger FROM RM_ALERT_RECORD WHERE STAT_CYCLE = DATE_TRUNC('MONTH', CURRENT_DATE());
    -- 判断是否需要触发告警
    IF current_percent > last_trigger AND current_percent >=10 THEN
        -- 发送邮件告警
        CALL SYSTEM$SEND_EMAIL(
            'RM_ALERT_CHANNEL',
            '告警接收邮箱',
            '仓库信用消耗告警:已消耗'||current_percent||'%配额',
            '当前仓库已消耗月度信用配额的'||current_percent||'%,总配额'||total_quota||',已使用'||used_credit
        );
        -- 更新触发记录
        UPDATE RM_ALERT_RECORD SET LAST_TRIGGER_PERCENT = current_percent WHERE STAT_CYCLE = DATE_TRUNC('MONTH', CURRENT_DATE());
        RETURN '告警已触发,当前档位:'||current_percent||'%';
    END IF;
    RETURN '未达到触发条件,当前档位:'||current_percent||'%,上次触发档位:'||last_trigger||'%';
END;
$$;

最后创建定时任务定期执行告警逻辑,示例为15分钟轮询一次:

CREATE TASK RM_ALERT_TASK
WAREHOUSE = <用来跑任务的小规格仓库,推荐X-SMALL>
SCHEDULE = '15 MINUTE'
AS
CALL RM_10PERCENT_ALERT();

-- 启动任务
ALTER TASK RM_ALERT_TASK RESUME;

注意事项

  • 跑定时任务的仓库选最小规格即可,每月开销不到1信用,成本极低
  • 如果统计周期不是月度,需要同步修改控制表、存储过程里的周期截断逻辑
  • 多仓库分开监控的话,每个仓库单独建对应的资源监视器和告警逻辑即可

内容的提问来源于stack exchange,提问作者Vicky

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 18:09:03