Notifications pour les budgets¶
Pour recevoir des notifications lorsque votre utilisation du crédit est susceptible de dépasser vos limites de dépenses, vous devez définir le budget de manière à ce que les notifications puissent être envoyées à la destination de votre choix. Vous pouvez recevoir des notifications par les moyens suivants :
E-mail.
Messages poussés vers une file d’attente fournie par un service Cloud (Amazon SNS, Azure Event Grid ou Google Cloud PubSub).
Appels vers un webhook pour Slack, Microsoft Teams ou PagerDuty.
Note
Les notifications par e-mail sont traitées par les déploiements de Snowflake sur Amazon Web Services (AWS), à l’aide de AWS Simple Email Service (SES). Le contenu d’un e-mail envoyé à l’aide d’AWS peut être conservé par Snowflake pendant un maximum de trente jours afin de gérer la livraison du message. Après cette période, le contenu du message est supprimé.
Contrôle de l’envoi de notifications¶
Par défaut, les notifications commencent lorsque les dépenses prévues dépassent de plus de 10 % la limite de dépenses du budget.
Vous pouvez remplacer cette valeur par défaut en définissant un seuil de notification, qui correspond à un pourcentage de la limite de dépenses du budget. Les notifications sont envoyées lorsque Snowflake prévoit que les dépenses dépasseront le seuil.
Par exemple, supposons que vous souhaitiez que des notifications soient envoyées lorsque les dépenses prévues dépassent 50 % de la limite de dépenses du budget. Pour définir ce seuil de notification pour le budget du compte, exécutez la commande suivante :
CALL SNOWFLAKE.LOCAL.ACCOUNT_ROOT_BUDGET!SET_NOTIFICATION_THRESHOLD(50);
Vous pouvez également définir un seuil de notification pour les budgets personnalisés.
Si vous souhaitez réinitialiser le seuil de notification par défaut, appelez la méthode /sql-reference/classes/budget/methods/set_notification_threshold`avec ``110` comme argument.
Définir une notification par e-mail¶
Pour définir une notification par e-mail :
(Facultatif) Si vous souhaitez utiliser votre propre intégration de notification, créez une intégration de notification ou sélectionnez une intégration de notification existante que vous souhaitez utiliser. Une intégration de notification permet à Snowflake d’envoyer des notifications à un système tiers.
Créez une intégration de notification avec TYPE = EMAIL et ALLOWED_RECIPIENTS définis sur la liste des adresses e-mail vérifiées des destinataires. Pour plus d’informations, voir Créer une intégration des notifications par e-mail et Restreindre la liste des adresses électroniques pouvant recevoir des notifications.
Note
Chaque adresse e-mail ajoutée pour les notifications de budget doit être vérifiée. La configuration des notifications par e-mail échoue si une adresse e-mail de la liste n’est pas vérifiée.
Par exemple :
CREATE NOTIFICATION INTEGRATION budgets_notification_integration TYPE = EMAIL ENABLED = TRUE ALLOWED_RECIPIENTS = ('costadmin@example.com','budgetadmin@example.com');
Vérifiez que l’intégration de notification fonctionne comme prévu en appelant la procédure stockée SYSTEM$SEND_SNOWFLAKE_NOTIFICATION pour envoyer un message de test.
Par exemple, vous pouvez envoyer un message de test au format JSON :
CALL SYSTEM$SEND_SNOWFLAKE_NOTIFICATION( SNOWFLAKE.NOTIFICATION.APPLICATION_JSON('{"name": "value"}'), SNOWFLAKE.NOTIFICATION.INTEGRATION('budgets_notification_integration') );
Accordez le privilège USAGE sur l’intégration des notifications à l’application SNOWFLAKE. Le privilège USAGE permet au budget d’utiliser l’intégration de notification pour envoyer la notification. Par exemple :
GRANT USAGE ON INTEGRATION budgets_notification_integration TO APPLICATION snowflake;
Indiquez les adresses e-mail qui doivent recevoir la notification. Si vous avez créé ou sélectionné une intégration de notification à utiliser, associez l’intégration de notification au budget.
Pour ce faire, appelez la méthode <nom_budget>!SET_EMAIL_NOTIFICATIONS et spécifiez ce qui suit :
Si vous ne disposez pas d’une intégration de notification que vous souhaitez utiliser, transmettez une liste délimitée par des virgules d’adresses e-mail vérifiées. Par exemple, si vous configurez des notifications pour le budget du compte :
CALL SNOWFLAKE.LOCAL.ACCOUNT_ROOT_BUDGET!SET_EMAIL_NOTIFICATIONS( 'costadmin@example.com, budgetadmin@example.com' );
Si vous configurez des notifications pour un budget personnalisé, appelez la méthode sur l’objet du budget personnalisé. Par exemple, si vous avez créé un budget personnalisé appelé
my_budget
:CALL my_budget!SET_EMAIL_NOTIFICATIONS( 'costadmin@example.com, budgetadmin@example.com' );
Si vous souhaitez utiliser une intégration de notification, indiquez le nom de cette intégration et une liste délimitée par des virgules d’adresses e-mail vérifiées. Par exemple, si vous configurez des notifications pour le budget du compte :
CALL SNOWFLAKE.LOCAL.ACCOUNT_ROOT_BUDGET!SET_EMAIL_NOTIFICATIONS( 'budgets_notification_integration', 'costadmin@example.com, budgetadmin@example.com' );
Si vous configurez des notifications pour un budget personnalisé, appelez la méthode sur l’objet du budget personnalisé. Par exemple, si vous avez créé un budget personnalisé appelé
my_budget
:CALL my_budget!SET_EMAIL_NOTIFICATIONS( 'budgets_notification_integration', 'costadmin@example.com, budgetadmin@example.com' );
Si vous avez associé une intégration de notification au budget, vous pouvez vérifier que le budget est associé à votre intégration de notification en appelant la méthode <nom_budget>!GET_NOTIFICATION_INTEGRATION_NAME. Cette méthode renvoie le nom de l’intégration de notification par e-mail associée au budget.
Par exemple, si vous configurez des notifications pour le budget du compte :
CALL SNOWFLAKE.LOCAL.ACCOUNT_ROOT_BUDGET!GET_NOTIFICATION_INTEGRATION_NAME();
Si vous configurez des notifications pour un budget personnalisé, appelez la méthode sur l’objet du budget personnalisé. Par exemple, si vous avez créé un budget personnalisé appelé
my_budget
:CALL my_budget!GET_NOTIFICATION_INTEGRATION_NAME();
Définir la notification de file d’attente¶
Pour définir la notification de file d’attente
Créez une intégration de notification ou sélectionnez une intégration de notification existante que vous souhaitez utiliser. Une intégration de notification permet à Snowflake d’envoyer des notifications à un système tiers.
Créez une intégration de notification avec TYPE=QUEUE, DIRECTION=OUTBOUND, et les propriétés supplémentaires requises pour le fournisseur de Cloud. Pour plus d’informations, voir :
Note
Votre compte doit être sur la même plateforme cloud en tant que file d’attente du fournisseur de cloud.
Par exemple :
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>';
Note
Pour les notifications de file d’attente et de webhook, vous pouvez associer jusqu’à 10 intégrations de notification à un budget.
Vérifiez que l’intégration de notification fonctionne comme prévu en appelant la procédure stockée SYSTEM$SEND_SNOWFLAKE_NOTIFICATION pour envoyer un message de test.
Par exemple, vous pouvez envoyer un message de test au format JSON :
CALL SYSTEM$SEND_SNOWFLAKE_NOTIFICATION( SNOWFLAKE.NOTIFICATION.APPLICATION_JSON('{"name": "value"}'), SNOWFLAKE.NOTIFICATION.INTEGRATION('budgets_notification_integration') );
Accordez le privilège USAGE sur l’intégration des notifications à l’application SNOWFLAKE. Le privilège USAGE permet au budget d’utiliser l’intégration de notification pour envoyer la notification. Par exemple :
GRANT USAGE ON INTEGRATION budgets_notification_integration TO APPLICATION snowflake;
Associez l’intégration de notification au budget. Appelez la méthode <nom_budget>!ADD_NOTIFICATION_INTEGRATION en indiquant le nom de l’intégration.
Par exemple, si vous configurez des notifications pour le budget du compte :
CALL SNOWFLAKE.LOCAL.ACCOUNT_ROOT_BUDGET!ADD_NOTIFICATION_INTEGRATION( 'budgets_notification_integration', );
Si vous configurez des notifications pour un budget personnalisé, appelez la méthode sur l’objet du budget personnalisé. Par exemple, si vous avez créé un budget personnalisé appelé
my_budget
:CALL my_budget!ADD_NOTIFICATION_INTEGRATION( 'budgets_notification_integration', );
Vérifiez que l’intégration de notification est associée au budget.
Appelez la méthode <nom_budget>!GET_NOTIFICATION_INTEGRATIONS pour imprimer la liste des intégrations de notification associées au budget.
Par exemple, si vous configurez des notifications pour le budget du compte :
CALL SNOWFLAKE.LOCAL.ACCOUNT_ROOT_BUDGET!GET_NOTIFICATION_INTEGRATIONS();
Si vous configurez des notifications pour un budget personnalisé, appelez la méthode sur l’objet du budget personnalisé. Par exemple, si vous avez créé un budget personnalisé appelé
my_budget
:CALL my_budget!GET_NOTIFICATION_INTEGRATIONS();
Cette méthode permet d’imprimer une table qui liste les noms des intégrations, les dates auxquelles elles ont été utilisées pour envoyer des notifications et les dates auxquelles elles ont été ajoutées.
+----------------------------------+------------------------+------------+ | INTEGRATION_NAME | LAST_NOTIFICATION_TIME | ADDED_DATE | +----------------------------------+------------------------+------------+ | budgets_notification_integration | -1 | 2024-09-23 | +----------------------------------+------------------------+------------+
Définir une notification par webhook¶
Pour définir une notification par webhook :
Créez une intégration de notification ou sélectionnez une intégration de notification existante que vous souhaitez utiliser. Une intégration de notification permet à Snowflake d’envoyer des notifications à un système tiers.
Créez une intégration de notification avec TYPE=WEBHOOK et les propriétés supplémentaires requises pour le webhook. Pour plus d’informations, voir Envoi de notifications webhook.
Le message de notification est au format JSON, vous devez donc configurer l’intégration de notification pour qu’elle le prenne en charge. Par exemple, les instructions suivantes créent un secret et une intégration de notification pour un webhook Slack :
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;
Note
Pour les notifications de file d’attente et de webhook, vous pouvez associer jusqu’à 10 intégrations de notification à un budget.
Vérifiez que l’intégration de notification fonctionne comme prévu en appelant la procédure stockée SYSTEM$SEND_SNOWFLAKE_NOTIFICATION pour envoyer un message de test.
Par exemple, vous pouvez envoyer un message de test au format JSON. Assurez-vous d’échapper les guillemets doubles de la chaîne JSON et les barres obliques inverses :
CALL SYSTEM$SEND_SNOWFLAKE_NOTIFICATION( SNOWFLAKE.NOTIFICATION.APPLICATION_JSON('{\\\"name\\\": \\\"value\\\"}'), SNOWFLAKE.NOTIFICATION.INTEGRATION('budgets_notification_integration') );
Accordez le privilège USAGE sur l’intégration des notifications à l’application SNOWFLAKE. Le privilège USAGE permet au budget d’utiliser l’intégration de notification pour envoyer la notification. Par exemple :
GRANT USAGE ON INTEGRATION budgets_notification_integration TO APPLICATION snowflake;
Si vous utilisez une intégration de notification par webhook qui repose sur un secret, accordez les privilèges suivants à l’application SNOWFLAKE.
Le privilège READ relatif à ce secret.
Le privilège USAGE relatif au schéma contenant ce secret.
Le privilège USAGE relatif à la base de données contenant ce schéma.
Par exemple :
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;
Associez l’intégration de notification au budget.
Appelez la méthode <nom_budget>!ADD_NOTIFICATION_INTEGRATION et indiquez le nom de l’intégration.
Par exemple, si vous configurez des notifications pour le budget du compte :
CALL SNOWFLAKE.LOCAL.ACCOUNT_ROOT_BUDGET!ADD_NOTIFICATION_INTEGRATION( 'budgets_notification_integration', );
Si vous configurez des notifications pour un budget personnalisé, appelez la méthode sur l’objet du budget personnalisé. Par exemple, si vous avez créé un budget personnalisé appelé
my_budget
:CALL my_budget!ADD_NOTIFICATION_INTEGRATION( 'budgets_notification_integration', );
Vérifiez que l’intégration de notification est associée au budget.
Appelez la méthode <nom_budget>!GET_NOTIFICATION_INTEGRATIONS, qui imprime la liste des intégrations de notification associées au budget.
Par exemple, si vous configurez des notifications pour le budget du compte :
CALL SNOWFLAKE.LOCAL.ACCOUNT_ROOT_BUDGET!GET_NOTIFICATION_INTEGRATIONS();
Si vous configurez des notifications pour un budget personnalisé, appelez la méthode sur l’objet du budget personnalisé. Par exemple, si vous avez créé un budget personnalisé appelé
my_budget
:CALL my_budget!GET_NOTIFICATION_INTEGRATIONS();
Cette méthode permet d’imprimer une table qui liste les noms des intégrations, les dates auxquelles elles ont été utilisées pour envoyer des notifications et les dates auxquelles elles ont été ajoutées.
+----------------------------------+------------------------+------------+ | INTEGRATION_NAME | LAST_NOTIFICATION_TIME | ADDED_DATE | +----------------------------------+------------------------+------------+ | budgets_notification_integration | -1 | 2024-09-23 | +----------------------------------+------------------------+------------+
Interpréter le message de notification JSON¶
Lorsque vous configurez un budget pour envoyer une notification à une file d’attente d’un fournisseur de Cloud ou à un webhook, le message de notification contient un objet JSON similaire à ce qui suit :
{
"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"
}
L’objet JSON contient les paires clés-valeurs suivantes :
Clé |
Description |
---|---|
|
Nom de votre compte. |
|
Nom de votre budget. Pour le budget du compte, le nom est |
|
Le type de la notification (par exemple, |
|
La limite de dépenses que vous avez définie pour le budget. |
|
Le montant de l’utilisation du crédit pour ce mois. |
|
Le pourcentage de la limite de dépenses qui a déjà été dépensé ( |
|
Pourcentage prévu de la limite de dépenses à dépenser avant la fin du mois ( |
|
Pourcentage du temps écoulé pour le mois (par exemple, |
Consulter l’historique des notifications relatives à un budget¶
Pour voir l’historique des notifications pour un budget, appelez la fonction NOTIFICATION_HISTORY et filtrez par nom d’intégration. Par exemple :
SELECT * FROM TABLE(
INFORMATION_SCHEMA.NOTIFICATION_HISTORY(
INTEGRATION_NAME=>'budgets_notification_integration'
)
);
La colonne message_source
contient BUDGET
pour les lignes représentant les notifications de budget.
Désactiver les notifications pour un budget¶
Pour désactiver les notifications pour un budget, appelez la méthode SET_NOTIFICATION_MUTE_FLAG et passez TRUE comme argument. Par exemple :
CALL SNOWFLAKE.LOCAL.ACCOUNT_ROOT_BUDGET!SET_NOTIFICATION_MUTE_FLAG(TRUE);
Supprimer l’intégration d’une notification dans un budget¶
Pour supprimer une intégration de notification d’un budget, appelez la méthode <nom_budget>!REMOVE_NOTIFICATION_INTEGRATION en indiquant le nom de l’intégration. Par exemple :
CALL my_budget!REMOVE_NOTIFICATION_INTEGRATION(
'budgets_notification_integration',
);