预算通知¶
要在 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);
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.
设置电子邮件通知¶
要设置电子邮件通知,请执行以下操作:
(可选)如果您想使用自己的通知集成,请创建一个通知集成或选择一个要使用的现有通知集成。通知集成使 Snowflake 能够向第三方系统发送通知。
创建一个通知集成,并将 TYPE = EMAIL 和 ALLOWED_RECIPIENTS 设置为收件人的已验证电子邮件地址列表。有关信息,请参阅 创建电子邮件通知集成 和 限制可接收通知的电子邮件地址列表。
备注
添加以用于接收预算通知的每个电子邮件地址都必须 经过验证。如果列表中的任何电子邮件地址 未 经过验证,则通知电子邮件设置会失败。
例如:
CREATE NOTIFICATION INTEGRATION budgets_notification_integration TYPE = EMAIL ENABLED = TRUE ALLOWED_RECIPIENTS = ('costadmin@example.com','budgetadmin@example.com');
通过调用 SYSTEM$SEND_SNOWFLAKE_NOTIFICATION 存储过程以发送测试消息,验证通知集成是否按预期工作。
例如,您可以以 JSON 格式发送测试消息:
CALL SYSTEM$SEND_SNOWFLAKE_NOTIFICATION( SNOWFLAKE.NOTIFICATION.APPLICATION_JSON('{"name": "value"}'), SNOWFLAKE.NOTIFICATION.INTEGRATION('budgets_notification_integration') );
向 SNOWFLAKE 应用程序授予通知集成的 USAGE 权限。USAGE 权限使预算能够使用通知集成来发送电子邮件。例如:
GRANT USAGE ON INTEGRATION budgets_notification_integration TO APPLICATION snowflake;
指定应接收通知的电子邮件地址。如果您创建或选择了要使用的通知集成,请将通知集成与预算关联。
为此,请调用 <budget_name>!SET_EMAIL_NOTIFICATIONS 方法,并指定以下内容:
如果您没有想要使用的通知集成,请传入一个以逗号分隔的经验证电子邮件地址列表。例如,如果您正在为账户预算配置通知:
CALL SNOWFLAKE.LOCAL.ACCOUNT_ROOT_BUDGET!SET_EMAIL_NOTIFICATIONS( 'costadmin@example.com, budgetadmin@example.com' );
如果您正在为自定义预算配置通知,请在自定义预算的对象上调用该方法。例如,如果您创建了一个名为
my_budget的自定义预算:CALL my_budget!SET_EMAIL_NOTIFICATIONS( 'costadmin@example.com, budgetadmin@example.com' );
如果您有想要使用的通知集成,请传入该集成的名称和一个以逗号分隔的经验证电子邮件地址列表。例如,如果您正在为账户预算配置通知:
CALL SNOWFLAKE.LOCAL.ACCOUNT_ROOT_BUDGET!SET_EMAIL_NOTIFICATIONS( 'budgets_notification_integration', 'costadmin@example.com, budgetadmin@example.com' );
如果您正在为自定义预算配置通知,请在自定义预算的对象上调用该方法。例如,如果您创建了一个名为
my_budget的自定义预算:CALL my_budget!SET_EMAIL_NOTIFICATIONS( 'budgets_notification_integration', 'costadmin@example.com, budgetadmin@example.com' );
如果您将通知集成与预算关联,可以通过调用 <budget_name>!GET_NOTIFICATION_INTEGRATION_NAME 方法来验证预算是否与通知集成关联。此方法返回与预算相关的电子邮件通知集成的名称。
例如,如果您正在为账户预算配置通知:
CALL SNOWFLAKE.LOCAL.ACCOUNT_ROOT_BUDGET!GET_NOTIFICATION_INTEGRATION_NAME();
如果您正在为自定义预算配置通知,请在自定义预算的对象上调用该方法。例如,如果您创建了一个名为
my_budget的自定义预算:CALL my_budget!GET_NOTIFICATION_INTEGRATION_NAME();
设置队列通知¶
要设置队列通知,请执行以下操作:
创建一个通知集成或选择一个要使用的现有通知集成。通知集成使 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>';
备注
对于队列和 Webhook 通知,您可以将最多 10 个通知集成与预算关联。
通过调用 SYSTEM$SEND_SNOWFLAKE_NOTIFICATION 存储过程以发送测试消息,验证通知集成是否按预期工作。
例如,您可以以 JSON 格式发送测试消息:
CALL SYSTEM$SEND_SNOWFLAKE_NOTIFICATION( SNOWFLAKE.NOTIFICATION.APPLICATION_JSON('{"name": "value"}'), SNOWFLAKE.NOTIFICATION.INTEGRATION('budgets_notification_integration') );
向 SNOWFLAKE 应用程序授予通知集成的 USAGE 权限。USAGE 权限使预算能够使用通知集成来发送电子邮件。例如:
GRANT USAGE ON INTEGRATION budgets_notification_integration TO APPLICATION snowflake;
将通知集成与预算关联。调用 <budget_name>!ADD_NOTIFICATION_INTEGRATION 方法,传入集成的名称。
例如,如果您正在为账户预算配置通知:
CALL SNOWFLAKE.LOCAL.ACCOUNT_ROOT_BUDGET!ADD_NOTIFICATION_INTEGRATION( 'budgets_notification_integration', );
如果您正在为自定义预算配置通知,请在自定义预算的对象上调用该方法。例如,如果您创建了一个名为
my_budget的自定义预算:CALL my_budget!ADD_NOTIFICATION_INTEGRATION( 'budgets_notification_integration', );
验证通知集成是否与预算相关。
调用 <budget_name>!GET_NOTIFICATION_INTEGRATIONS 方法打印出与预算相关的通知集成列表。
例如,如果您正在为账户预算配置通知:
CALL SNOWFLAKE.LOCAL.ACCOUNT_ROOT_BUDGET!GET_NOTIFICATION_INTEGRATIONS();
如果您正在为自定义预算配置通知,请在自定义预算的对象上调用该方法。例如,如果您创建了一个名为
my_budget的自定义预算:CALL my_budget!GET_NOTIFICATION_INTEGRATIONS();
该方法打印出一个表格,列出集成的名称、最后一次用于发送通知的时间以及它们的添加日期。
+----------------------------------+------------------------+------------+ | INTEGRATION_NAME | LAST_NOTIFICATION_TIME | ADDED_DATE | +----------------------------------+------------------------+------------+ | budgets_notification_integration | -1 | 2024-09-23 | +----------------------------------+------------------------+------------+
设置 Webhook 通知¶
要设置 Webhook 通知,请执行以下操作:
创建一个通知集成或选择一个要使用的现有通知集成。通知集成使 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;
备注
对于队列和 Webhook 通知,您可以将最多 10 个通知集成与预算关联。
通过调用 SYSTEM$SEND_SNOWFLAKE_NOTIFICATION 存储过程以发送测试消息,验证通知集成是否按预期工作。
例如,您可以以 JSON 格式发送测试消息。确保转义 JSON 字符串中的双引号和反斜杠:
CALL SYSTEM$SEND_SNOWFLAKE_NOTIFICATION( SNOWFLAKE.NOTIFICATION.APPLICATION_JSON('{\\\"name\\\": \\\"value\\\"}'), SNOWFLAKE.NOTIFICATION.INTEGRATION('budgets_notification_integration') );
向 SNOWFLAKE 应用程序授予通知集成的 USAGE 权限。USAGE 权限使预算能够使用通知集成来发送电子邮件。例如:
GRANT USAGE ON INTEGRATION budgets_notification_integration TO APPLICATION snowflake;
如果您正在使用依赖于密钥的 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;
将通知集成与预算关联。
调用 <budget_name>!ADD_NOTIFICATION_INTEGRATION 方法,并传入集成的名称。
例如,如果您正在为账户预算配置通知:
CALL SNOWFLAKE.LOCAL.ACCOUNT_ROOT_BUDGET!ADD_NOTIFICATION_INTEGRATION( 'budgets_notification_integration', );
如果您正在为自定义预算配置通知,请在自定义预算的对象上调用该方法。例如,如果您创建了一个名为
my_budget的自定义预算:CALL my_budget!ADD_NOTIFICATION_INTEGRATION( 'budgets_notification_integration', );
验证通知集成是否与预算相关。
调用 <budget_name>!GET_NOTIFICATION_INTEGRATIONS 方法,该方法会打印出与预算相关的通知集成列表。
例如,如果您正在为账户预算配置通知:
CALL SNOWFLAKE.LOCAL.ACCOUNT_ROOT_BUDGET!GET_NOTIFICATION_INTEGRATIONS();
如果您正在为自定义预算配置通知,请在自定义预算的对象上调用该方法。例如,如果您创建了一个名为
my_budget的自定义预算:CALL my_budget!GET_NOTIFICATION_INTEGRATIONS();
该方法打印出一个表格,列出集成的名称、最后一次用于发送通知的时间以及它们的添加日期。
+----------------------------------+------------------------+------------+ | 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"
}
该 JSON 对象包含以下键值对:
键 |
描述 |
|---|---|
|
您的账户名称。 |
|
您的预算名称。对于账户预算,名称是 |
|
通知的类型(例如, |
|
您为预算设定的支出限额。 |
|
本月的 Credit 使用量。 |
|
已经花费的支出限额百分比 ( |
|
预计到月底将花费的支出限额百分比 ( |
|
本月已过去的时间百分比(例如,如果本月过了一半,则为 |
检查有关预算的通知历史记录¶
要查看有关预算的通知历史记录,请调用 NOTIFICATION_HISTORY 函数并按集成名称进行筛选。例如:
SELECT * FROM TABLE(
INFORMATION_SCHEMA.NOTIFICATION_HISTORY(
INTEGRATION_NAME=>'budgets_notification_integration'
)
);
表示预算通知的行对应的 message_source 列包含 BUDGET。
禁用预算通知¶
要禁用预算通知,请调用 SET_NOTIFICATION_MUTE_FLAG 方法,并将 TRUE 作为实参传入。例如:
CALL SNOWFLAKE.LOCAL.ACCOUNT_ROOT_BUDGET!SET_NOTIFICATION_MUTE_FLAG(TRUE);
从预算中移除通知集成¶
要从预算中移除通知集成,请调用 <budget_name>!REMOVE_NOTIFICATION_INTEGRATION 方法,并传入集成的名称。例如:
CALL my_budget!REMOVE_NOTIFICATION_INTEGRATION(
'budgets_notification_integration',
);