预算通知

要在 Credit 使用量预计超过支出限额时接收通知,您必须设置预算,以便可以将通知发送到您选择的目的地。您可以通过以下方式接收通知:

  • 电子邮件。

  • 消息推送到由云服务提供的队列(Amazon SNS、Azure 事件网格或 Google Cloud PubSub)。

  • 对 Slack、Microsoft Teams 或 PagerDuty 的 Webhook 的调用。

备注

通过 Snowflake 的 Amazon Web Services (AWS) 部署,使用 AWS Simple Email Service (SES) 处理电子邮件通知。使用 AWS 发送的电子邮件内容可由 Snowflake 保留最多三十天,以便管理消息的传递。此期限过后,消息内容将会删除。

Controlling when notifications are sent

By default, notifications begin when the projected spending is more than 10% above the spending limit of the budget.

You can override this default by defining a notification threshold, which is a percentage of the budget's spending limit. Notifications are sent when Snowflake predicts that spending will exceed the threshold.

For example, suppose you want notifications sent when projected spending exceeds 50% of the budget's spending limit. To set this notification threshold for the account budget, run the following command:

CALL SNOWFLAKE.LOCAL.ACCOUNT_ROOT_BUDGET!SET_NOTIFICATION_THRESHOLD(50);
Copy

You can also set a notification threshold for custom budgets.

If you want to reset the notification threshold to the default, call the <budget_name>!SET_NOTIFICATION_THRESHOLD method with 110 as the argument.

设置电子邮件通知

要设置电子邮件通知,请执行以下操作:

  1. (可选)如果您想使用自己的通知集成,请创建一个通知集成或选择一个要使用的现有通知集成。通知集成使 Snowflake 能够向第三方系统发送通知。

    1. 创建一个通知集成,并将 TYPE = EMAIL 和 ALLOWED_RECIPIENTS 设置为收件人的已验证电子邮件地址列表。有关信息,请参阅 创建电子邮件通知集成限制可接收通知的电子邮件地址列表

      备注

      添加以用于接收预算通知的每个电子邮件地址都必须 经过验证。如果列表中的任何电子邮件地址 经过验证,则通知电子邮件设置会失败。

      例如:

      CREATE NOTIFICATION INTEGRATION budgets_notification_integration
        TYPE = EMAIL
        ENABLED = TRUE
        ALLOWED_RECIPIENTS = ('costadmin@example.com','budgetadmin@example.com');
      
      Copy
    2. 通过调用 SYSTEM$SEND_SNOWFLAKE_NOTIFICATION 存储过程以发送测试消息,验证通知集成是否按预期工作。

      例如,您可以以 JSON 格式发送测试消息:

      CALL SYSTEM$SEND_SNOWFLAKE_NOTIFICATION(
        SNOWFLAKE.NOTIFICATION.APPLICATION_JSON('{"name": "value"}'),
        SNOWFLAKE.NOTIFICATION.INTEGRATION('budgets_notification_integration')
      );
      
      Copy
    3. 向 SNOWFLAKE 应用程序授予通知集成的 USAGE 权限。USAGE 权限使预算能够使用通知集成来发送电子邮件。例如:

      GRANT USAGE ON INTEGRATION budgets_notification_integration
        TO APPLICATION snowflake;
      
      Copy
  2. 指定应接收通知的电子邮件地址。如果您创建或选择了要使用的通知集成,请将通知集成与预算关联。

    为此,请调用 <budget_name>!SET_EMAIL_NOTIFICATIONS 方法,并指定以下内容:

    • 如果您没有想要使用的通知集成,请传入一个以逗号分隔的经验证电子邮件地址列表。例如,如果您正在为账户预算配置通知:

      CALL SNOWFLAKE.LOCAL.ACCOUNT_ROOT_BUDGET!SET_EMAIL_NOTIFICATIONS(
        'costadmin@example.com, budgetadmin@example.com'
      );
      
      Copy

      如果您正在为自定义预算配置通知,请在自定义预算的对象上调用该方法。例如,如果您创建了一个名为 my_budget 的自定义预算:

      CALL my_budget!SET_EMAIL_NOTIFICATIONS(
        'costadmin@example.com, budgetadmin@example.com'
      );
      
      Copy
    • 如果您有想要使用的通知集成,请传入该集成的名称和一个以逗号分隔的经验证电子邮件地址列表。例如,如果您正在为账户预算配置通知:

      CALL SNOWFLAKE.LOCAL.ACCOUNT_ROOT_BUDGET!SET_EMAIL_NOTIFICATIONS(
        'budgets_notification_integration',
        'costadmin@example.com, budgetadmin@example.com'
      );
      
      Copy

      如果您正在为自定义预算配置通知,请在自定义预算的对象上调用该方法。例如,如果您创建了一个名为 my_budget 的自定义预算:

      CALL my_budget!SET_EMAIL_NOTIFICATIONS(
        'budgets_notification_integration',
        'costadmin@example.com, budgetadmin@example.com'
      );
      
      Copy
  3. 如果您将通知集成与预算关联,可以通过调用 <budget_name>!GET_NOTIFICATION_INTEGRATION_NAME 方法来验证预算是否与通知集成关联。此方法返回与预算相关的电子邮件通知集成的名称。

    例如,如果您正在为账户预算配置通知:

    CALL SNOWFLAKE.LOCAL.ACCOUNT_ROOT_BUDGET!GET_NOTIFICATION_INTEGRATION_NAME();
    
    Copy

    如果您正在为自定义预算配置通知,请在自定义预算的对象上调用该方法。例如,如果您创建了一个名为 my_budget 的自定义预算:

    CALL my_budget!GET_NOTIFICATION_INTEGRATION_NAME();
    
    Copy

设置队列通知

要设置队列通知,请执行以下操作:

  1. 创建一个通知集成或选择一个要使用的现有通知集成。通知集成使 Snowflake 能够向第三方系统发送通知。

    使用 TYPE=QUEUE、DIRECTION=OUTBOUND 以及云提供商所需的附加属性创建一个通知集成。有关信息,请参阅:

    备注

    您的账户必须与云提供商队列在同一 云平台 上。

    例如:

    CREATE OR REPLACE NOTIFICATION INTEGRATION budgets_notification_integration
      ENABLED = TRUE
      TYPE = QUEUE
      DIRECTION = OUTBOUND
      NOTIFICATION_PROVIDER = AWS_SNS
      AWS_SNS_TOPIC_ARN = '<ARN_for_my_SNS_topic>'
      AWS_SNS_ROLE_ARN = '<ARN_for_my_IAM_role>';
    
    Copy

    备注

    对于队列和 Webhook 通知,您可以将最多 10 个通知集成与预算关联。

  2. 通过调用 SYSTEM$SEND_SNOWFLAKE_NOTIFICATION 存储过程以发送测试消息,验证通知集成是否按预期工作。

    例如,您可以以 JSON 格式发送测试消息:

    CALL SYSTEM$SEND_SNOWFLAKE_NOTIFICATION(
      SNOWFLAKE.NOTIFICATION.APPLICATION_JSON('{"name": "value"}'),
      SNOWFLAKE.NOTIFICATION.INTEGRATION('budgets_notification_integration')
    );
    
    Copy
  3. 向 SNOWFLAKE 应用程序授予通知集成的 USAGE 权限。USAGE 权限使预算能够使用通知集成来发送电子邮件。例如:

    GRANT USAGE ON INTEGRATION budgets_notification_integration
      TO APPLICATION snowflake;
    
    Copy
  4. 将通知集成与预算关联。调用 <budget_name>!ADD_NOTIFICATION_INTEGRATION 方法,传入集成的名称。

    例如,如果您正在为账户预算配置通知:

    CALL SNOWFLAKE.LOCAL.ACCOUNT_ROOT_BUDGET!ADD_NOTIFICATION_INTEGRATION(
      'budgets_notification_integration',
    );
    
    Copy

    如果您正在为自定义预算配置通知,请在自定义预算的对象上调用该方法。例如,如果您创建了一个名为 my_budget 的自定义预算:

    CALL my_budget!ADD_NOTIFICATION_INTEGRATION(
      'budgets_notification_integration',
    );
    
    Copy
  5. 验证通知集成是否与预算相关。

    调用 <budget_name>!GET_NOTIFICATION_INTEGRATIONS 方法打印出与预算相关的通知集成列表。

    例如,如果您正在为账户预算配置通知:

    CALL SNOWFLAKE.LOCAL.ACCOUNT_ROOT_BUDGET!GET_NOTIFICATION_INTEGRATIONS();
    
    Copy

    如果您正在为自定义预算配置通知,请在自定义预算的对象上调用该方法。例如,如果您创建了一个名为 my_budget 的自定义预算:

    CALL my_budget!GET_NOTIFICATION_INTEGRATIONS();
    
    Copy

    该方法打印出一个表格,列出集成的名称、最后一次用于发送通知的时间以及它们的添加日期。

    +----------------------------------+------------------------+------------+
    |  INTEGRATION_NAME                | LAST_NOTIFICATION_TIME | ADDED_DATE |
    +----------------------------------+------------------------+------------+
    | budgets_notification_integration | -1                     | 2024-09-23 |
    +----------------------------------+------------------------+------------+
    

设置 Webhook 通知

要设置 Webhook 通知,请执行以下操作:

  1. 创建一个通知集成或选择一个要使用的现有通知集成。通知集成使 Snowflake 能够向第三方系统发送通知。

    使用 TYPE=WEBHOOK 以及 Webhook 所需的附加属性创建一个通知集成。有关信息,请参阅 发送 Webhook 通知

    通知消息采用 JSON 格式,因此您应该配置通知集成以处理此格式。例如,以下语句为 Slack Webhook 创建一个密钥和一个通知集成:

    CREATE OR REPLACE SECRET my_database.my_schema.slack_secret
      TYPE = GENERIC_STRING
      SECRET_STRING = '... secret in my Slack webhook URL ...';
    
    CREATE OR REPLACE NOTIFICATION INTEGRATION budgets_notification_integration
      ENABLED = TRUE
      TYPE = WEBHOOK
      WEBHOOK_URL = 'https://hooks.slack.com/services/SNOWFLAKE_WEBHOOK_SECRET'
      WEBHOOK_BODY_TEMPLATE='{"text": "SNOWFLAKE_WEBHOOK_MESSAGE"}'
      WEBHOOK_HEADERS=('Content-Type'='application/json')
      WEBHOOK_SECRET = slack_secret;
    
    Copy

    备注

    对于队列和 Webhook 通知,您可以将最多 10 个通知集成与预算关联。

  2. 通过调用 SYSTEM$SEND_SNOWFLAKE_NOTIFICATION 存储过程以发送测试消息,验证通知集成是否按预期工作。

    例如,您可以以 JSON 格式发送测试消息。确保转义 JSON 字符串中的双引号和反斜杠:

    CALL SYSTEM$SEND_SNOWFLAKE_NOTIFICATION(
      SNOWFLAKE.NOTIFICATION.APPLICATION_JSON('{\\\"name\\\": \\\"value\\\"}'),
      SNOWFLAKE.NOTIFICATION.INTEGRATION('budgets_notification_integration')
    );
    
    Copy
  3. 向 SNOWFLAKE 应用程序授予通知集成的 USAGE 权限。USAGE 权限使预算能够使用通知集成来发送电子邮件。例如:

    GRANT USAGE ON INTEGRATION budgets_notification_integration
      TO APPLICATION snowflake;
    
    Copy
  4. 如果您正在使用依赖于密钥的 Webhook 通知集成,请授予 SNOWFLAKE 应用程序以下权限。

    • 对该密钥的 READ 权限。

    • 对包含该密钥的架构的 USAGE 权限。

    • 对包含该架构的数据库的 USAGE 权限。

    例如:

    GRANT READ ON SECRET slack_secret TO APPLICATION snowflake;
    GRANT USAGE ON SCHEMA my_schema TO APPLICATION snowflake;
    GRANT USAGE ON DATABASE my_database TO APPLICATION snowflake;
    
    Copy
  5. 将通知集成与预算关联。

    调用 <budget_name>!ADD_NOTIFICATION_INTEGRATION 方法,并传入集成的名称。

    例如,如果您正在为账户预算配置通知:

    CALL SNOWFLAKE.LOCAL.ACCOUNT_ROOT_BUDGET!ADD_NOTIFICATION_INTEGRATION(
      'budgets_notification_integration',
    );
    
    Copy

    如果您正在为自定义预算配置通知,请在自定义预算的对象上调用该方法。例如,如果您创建了一个名为 my_budget 的自定义预算:

    CALL my_budget!ADD_NOTIFICATION_INTEGRATION(
      'budgets_notification_integration',
    );
    
    Copy
  6. 验证通知集成是否与预算相关。

    调用 <budget_name>!GET_NOTIFICATION_INTEGRATIONS 方法,该方法会打印出与预算相关的通知集成列表。

    例如,如果您正在为账户预算配置通知:

    CALL SNOWFLAKE.LOCAL.ACCOUNT_ROOT_BUDGET!GET_NOTIFICATION_INTEGRATIONS();
    
    Copy

    如果您正在为自定义预算配置通知,请在自定义预算的对象上调用该方法。例如,如果您创建了一个名为 my_budget 的自定义预算:

    CALL my_budget!GET_NOTIFICATION_INTEGRATIONS();
    
    Copy

    该方法打印出一个表格,列出集成的名称、最后一次用于发送通知的时间以及它们的添加日期。

    +----------------------------------+------------------------+------------+
    |  INTEGRATION_NAME                | LAST_NOTIFICATION_TIME | ADDED_DATE |
    +----------------------------------+------------------------+------------+
    | budgets_notification_integration | -1                     | 2024-09-23 |
    +----------------------------------+------------------------+------------+
    

解读 JSON 通知消息

当您配置预算以向云提供商队列或 Webhook 发送通知时,通知消息包含一个类似如下的 JSON 对象:

{
  "account_name": "MY_ACCOUNT",
  "budget_name": "MY_BUDGET_NAME",
  "type": "BUDGET_LIMIT_WARNING",
  "limit": "100",
  "spending": "67.42",
  "spending_percent": "67.42",
  "spending_trend_percent": "130.63",
  "time_percent":"51.61"
}
Copy

该 JSON 对象包含以下键值对:

描述

account_name

您的账户名称。

budget_name

您的预算名称。对于账户预算,名称是 ACCOUNT_ROOT_BUDGET

type

通知的类型(例如,BUDGET_LIMIT_WARNING)。

limit

您为预算设定的支出限额。

spending

本月的 Credit 使用量。

spending_percent

已经花费的支出限额百分比 (spending / limit)。

spending_trend_percent

预计到月底将花费的支出限额百分比 (spending_percent / time_percent * 100)。

time_percent

本月已过去的时间百分比(例如,如果本月过了一半,则为 50.00)。

检查有关预算的通知历史记录

要查看有关预算的通知历史记录,请调用 NOTIFICATION_HISTORY 函数并按集成名称进行筛选。例如:

SELECT * FROM TABLE(
  INFORMATION_SCHEMA.NOTIFICATION_HISTORY(
    INTEGRATION_NAME=>'budgets_notification_integration'
  )
);
Copy

表示预算通知的行对应的 message_source 列包含 BUDGET

禁用预算通知

要禁用预算通知,请调用 SET_NOTIFICATION_MUTE_FLAG 方法,并将 TRUE 作为实参传入。例如:

CALL SNOWFLAKE.LOCAL.ACCOUNT_ROOT_BUDGET!SET_NOTIFICATION_MUTE_FLAG(TRUE);
Copy

从预算中移除通知集成

要从预算中移除通知集成,请调用 <budget_name>!REMOVE_NOTIFICATION_INTEGRATION 方法,并传入集成的名称。例如:

CALL my_budget!REMOVE_NOTIFICATION_INTEGRATION(
  'budgets_notification_integration',
);
Copy
语言: 中文