Notificações sobre orçamentos¶
Para receber notificações quando se espera que seu uso de crédito exceda os limites de gastos, é necessário configurar o orçamento para que as notificações possam ser enviadas para o destino de sua escolha. Você pode receber notificações das seguintes maneiras:
E-mail.
Mensagens enviadas para uma fila fornecida por um serviço de nuvem (Amazon SNS, Azure Event Grid ou Google Cloud PubSub).
Chamadas para um webhook do Slack, Microsoft Teams ou PagerDuty.
Nota
As notificações por e-mail são processadas por meio das implementações do Amazon Web Services (AWS) do Snowflake, usando o AWS Simple Email Service (SES). O conteúdo de uma mensagem de e-mail enviada usando AWS pode ser retido pela Snowflake por até trinta dias para gerenciar a entrega da mensagem. Após esse período, o conteúdo da mensagem é excluído.
Controle de quando as notificações são enviadas¶
Por padrão, as notificações começam quando os gastos projetados atingem mais de 10% do limite de gastos do orçamento.
Você pode substituir esse padrão definindo um limite de notificação, que é uma porcentagem do limite de gastos do orçamento. As notificações são enviadas quando o Snowflake prevê que os gastos excederão o limite.
Por exemplo, suponha que você queira receber notificações quando os gastos projetados excederem 50% do limite de gastos do orçamento. Para definir esse limite de notificação para o orçamento da conta, execute o seguinte comando:
CALL SNOWFLAKE.LOCAL.ACCOUNT_ROOT_BUDGET!SET_NOTIFICATION_THRESHOLD(50);
Você também pode definir um limite de notificação para orçamentos personalizados.
Se você quiser redefinir o limite de notificação ao padrão, chame o método <budget_name>!SET_NOTIFICATION_THRESHOLD com o argumento 110
.
Configuração da notificação por e-mail¶
Para configurar a notificação por e-mail:
(Opcional) Se quiser usar sua própria integração de notificação, crie uma ou escolha uma existente. Uma integração de notificação permite que o Snowflake envie notificações para um sistema de terceiros.
Crie uma integração de notificação com TYPE = EMAIL e ALLOWED_RECIPIENTS definidos como a lista de endereços de e-mail verificados dos destinatários. Para obter informações, consulte Criar uma integração de notificação por e-mail e Restringir a lista de endereços de e-mail que podem receber notificações.
Nota
Cada endereço de e-mail adicionado para notificações de orçamento deve ser verificado. A configuração do e-mail de notificação falhará se algum endereço de e-mail da lista não for verificado.
Por exemplo:
CREATE NOTIFICATION INTEGRATION budgets_notification_integration TYPE = EMAIL ENABLED = TRUE ALLOWED_RECIPIENTS = ('costadmin@example.com','budgetadmin@example.com');
Verifique se a integração de notificação funciona conforme o esperado chamando o procedimento armazenado SYSTEM$SEND_SNOWFLAKE_NOTIFICATION para enviar uma mensagem de teste.
Por exemplo, é possível enviar uma mensagem de teste no formato JSON:
CALL SYSTEM$SEND_SNOWFLAKE_NOTIFICATION( SNOWFLAKE.NOTIFICATION.APPLICATION_JSON('{"name": "value"}'), SNOWFLAKE.NOTIFICATION.INTEGRATION('budgets_notification_integration') );
Conceda o privilégio USAGE na integração de notificação ao aplicativo SNOWFLAKE. O privilégio USAGE permite que o orçamento use a integração de notificação para enviar a notificação. Por exemplo:
GRANT USAGE ON INTEGRATION budgets_notification_integration TO APPLICATION snowflake;
Especifique os endereços de e-mail que devem receber a notificação. Se você criou ou selecionou uma integração de notificação a ser usada, associe a integração de notificação ao orçamento.
Para fazer isso, chame o método <budget_name>!SET_EMAIL_NOTIFICATIONS e especifique o seguinte:
Se você não tiver uma integração de notificação que deseja usar, passe uma lista delimitada por vírgulas de endereços de e-mail verificados. Por exemplo, se você estiver configurando notificações para o orçamento da conta:
CALL SNOWFLAKE.LOCAL.ACCOUNT_ROOT_BUDGET!SET_EMAIL_NOTIFICATIONS( 'costadmin@example.com, budgetadmin@example.com' );
Se você estiver configurando notificações para um orçamento personalizado, chame o método no objeto do orçamento personalizado. Por exemplo, se você criou um orçamento personalizado chamado
my_budget
:CALL my_budget!SET_EMAIL_NOTIFICATIONS( 'costadmin@example.com, budgetadmin@example.com' );
Se você tiver uma integração de notificação que deseja usar, passe o nome dessa integração e uma lista delimitada por vírgulas de endereços de e-mail verificados. Por exemplo, se você estiver configurando notificações para o orçamento da conta:
CALL SNOWFLAKE.LOCAL.ACCOUNT_ROOT_BUDGET!SET_EMAIL_NOTIFICATIONS( 'budgets_notification_integration', 'costadmin@example.com, budgetadmin@example.com' );
Se você estiver configurando notificações para um orçamento personalizado, chame o método no objeto do orçamento personalizado. Por exemplo, se você criou um orçamento personalizado chamado
my_budget
:CALL my_budget!SET_EMAIL_NOTIFICATIONS( 'budgets_notification_integration', 'costadmin@example.com, budgetadmin@example.com' );
Se você associou uma integração de notificação ao orçamento, poderá verificar se o orçamento está associado à sua integração de notificação chamando o método <budget_name>!GET_NOTIFICATION_INTEGRATION_NAME. Esse método retorna o nome da integração de notificação por e-mail associada ao orçamento.
Por exemplo, se você estiver configurando notificações para o orçamento da conta:
CALL SNOWFLAKE.LOCAL.ACCOUNT_ROOT_BUDGET!GET_NOTIFICATION_INTEGRATION_NAME();
Se você estiver configurando notificações para um orçamento personalizado, chame o método no objeto do orçamento personalizado. Por exemplo, se você criou um orçamento personalizado chamado
my_budget
:CALL my_budget!GET_NOTIFICATION_INTEGRATION_NAME();
Configuração da notificação de fila¶
Para configurar a notificação de fila:
Crie uma integração de notificação ou escolha uma integração de notificação existente que deseje usar. Uma integração de notificação permite que o Snowflake envie notificações para um sistema de terceiros.
Crie uma integração de notificação com TYPE=QUEUE, DIRECTION=OUTBOUND e as propriedades adicionais necessárias para o provedor de nuvem. Para obter mais informações, consulte:
Nota
Sua conta deve estar na mesma plataforma de nuvem que a fila do provedor de nuvem.
Por exemplo:
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>';
Nota
Para notificações de fila e webhook, é possível associar até 10 integrações de notificação a um orçamento.
Verifique se a integração de notificação funciona conforme o esperado chamando o procedimento armazenado SYSTEM$SEND_SNOWFLAKE_NOTIFICATION para enviar uma mensagem de teste.
Por exemplo, é possível enviar uma mensagem de teste no formato JSON:
CALL SYSTEM$SEND_SNOWFLAKE_NOTIFICATION( SNOWFLAKE.NOTIFICATION.APPLICATION_JSON('{"name": "value"}'), SNOWFLAKE.NOTIFICATION.INTEGRATION('budgets_notification_integration') );
Conceda o privilégio USAGE na integração de notificação ao aplicativo SNOWFLAKE. O privilégio USAGE permite que o orçamento use a integração de notificação para enviar a notificação. Por exemplo:
GRANT USAGE ON INTEGRATION budgets_notification_integration TO APPLICATION snowflake;
Associe a integração da notificação ao orçamento. Chame o método <budget_name>!ADD_NOTIFICATION_INTEGRATION, passando o nome da integração.
Por exemplo, se você estiver configurando notificações para o orçamento da conta:
CALL SNOWFLAKE.LOCAL.ACCOUNT_ROOT_BUDGET!ADD_NOTIFICATION_INTEGRATION( 'budgets_notification_integration', );
Se você estiver configurando notificações para um orçamento personalizado, chame o método no objeto do orçamento personalizado. Por exemplo, se você criou um orçamento personalizado chamado
my_budget
:CALL my_budget!ADD_NOTIFICATION_INTEGRATION( 'budgets_notification_integration', );
Verifique se a integração de notificação está associada ao orçamento.
Chame o método <budget_name>!GET_NOTIFICATION_INTEGRATIONS para imprimir a lista de integrações de notificação associadas ao orçamento.
Por exemplo, se você estiver configurando notificações para o orçamento da conta:
CALL SNOWFLAKE.LOCAL.ACCOUNT_ROOT_BUDGET!GET_NOTIFICATION_INTEGRATIONS();
Se você estiver configurando notificações para um orçamento personalizado, chame o método no objeto do orçamento personalizado. Por exemplo, se você criou um orçamento personalizado chamado
my_budget
:CALL my_budget!GET_NOTIFICATION_INTEGRATIONS();
O método imprime uma tabela que lista os nomes das integrações, os horários em que foram usadas pela última vez para enviar notificações e as datas em que foram adicionadas.
+----------------------------------+------------------------+------------+ | INTEGRATION_NAME | LAST_NOTIFICATION_TIME | ADDED_DATE | +----------------------------------+------------------------+------------+ | budgets_notification_integration | -1 | 2024-09-23 | +----------------------------------+------------------------+------------+
Configuração da notificação por webhook¶
Para configurar a notificação por webhook:
Crie uma integração de notificação ou escolha uma integração de notificação existente que deseje usar. Uma integração de notificação permite que o Snowflake envie notificações para um sistema de terceiros.
Crie uma integração de notificação com TYPE=WEBHOOK e as propriedades adicionais necessárias para o webhook. Para obter mais informações, consulte Envio de notificações de webhook.
A mensagem de notificação está no formato JSON, portanto, você deve configurar a integração de notificação para lidar com isso. Por exemplo, as instruções a seguir criam um segredo e uma integração de notificação para um webhook do 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;
Nota
Para notificações de fila e webhook, é possível associar até 10 integrações de notificação a um orçamento.
Verifique se a integração de notificação funciona conforme o esperado chamando o procedimento armazenado SYSTEM$SEND_SNOWFLAKE_NOTIFICATION para enviar uma mensagem de teste.
Por exemplo, é possível enviar uma mensagem de teste no formato JSON. Certifique-se de escapar as aspas duplas na cadeia de caracteres JSON e as barras invertidas:
CALL SYSTEM$SEND_SNOWFLAKE_NOTIFICATION( SNOWFLAKE.NOTIFICATION.APPLICATION_JSON('{\\\"name\\\": \\\"value\\\"}'), SNOWFLAKE.NOTIFICATION.INTEGRATION('budgets_notification_integration') );
Conceda o privilégio USAGE na integração de notificação ao aplicativo SNOWFLAKE. O privilégio USAGE permite que o orçamento use a integração de notificação para enviar a notificação. Por exemplo:
GRANT USAGE ON INTEGRATION budgets_notification_integration TO APPLICATION snowflake;
Se estiver usando uma integração de notificação por webhook que dependa de um segredo, conceda os seguintes privilégios ao aplicativo SNOWFLAKE.
O privilégio READ sobre esse segredo.
O privilégio USAGE no esquema que contém esse segredo.
O privilégio USAGE no banco de dados que contém esse esquema.
Por exemplo:
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;
Associe a integração da notificação ao orçamento.
Chame o método <budget_name>!ADD_NOTIFICATION_INTEGRATION e passe o nome da integração.
Por exemplo, se você estiver configurando notificações para o orçamento da conta:
CALL SNOWFLAKE.LOCAL.ACCOUNT_ROOT_BUDGET!ADD_NOTIFICATION_INTEGRATION( 'budgets_notification_integration', );
Se você estiver configurando notificações para um orçamento personalizado, chame o método no objeto do orçamento personalizado. Por exemplo, se você criou um orçamento personalizado chamado
my_budget
:CALL my_budget!ADD_NOTIFICATION_INTEGRATION( 'budgets_notification_integration', );
Verifique se a integração de notificação está associada ao orçamento.
Chame o método <budget_name>!GET_NOTIFICATION_INTEGRATIONS, que imprime a lista de integrações de notificação associadas ao orçamento.
Por exemplo, se você estiver configurando notificações para o orçamento da conta:
CALL SNOWFLAKE.LOCAL.ACCOUNT_ROOT_BUDGET!GET_NOTIFICATION_INTEGRATIONS();
Se você estiver configurando notificações para um orçamento personalizado, chame o método no objeto do orçamento personalizado. Por exemplo, se você criou um orçamento personalizado chamado
my_budget
:CALL my_budget!GET_NOTIFICATION_INTEGRATIONS();
O método imprime uma tabela que lista os nomes das integrações, os horários em que foram usadas pela última vez para enviar notificações e as datas em que foram adicionadas.
+----------------------------------+------------------------+------------+ | INTEGRATION_NAME | LAST_NOTIFICATION_TIME | ADDED_DATE | +----------------------------------+------------------------+------------+ | budgets_notification_integration | -1 | 2024-09-23 | +----------------------------------+------------------------+------------+
Interpretação da mensagem de notificação JSON¶
Ao configurar um orçamento para enviar uma notificação a uma fila de provedor de nuvem ou a um webhook, a mensagem de notificação contém um objeto JSON semelhante ao seguinte:
{
"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"
}
O objeto JSON contém os seguintes pares chave-valor:
Chave |
Descrição |
---|---|
|
Nome de sua conta. |
|
Nome de seu orçamento. Para o orçamento de conta, o nome é |
|
O tipo de notificação (por exemplo, |
|
O limite de gastos que você definiu para o orçamento. |
|
O valor do uso de crédito para esse mês. |
|
A porcentagem do limite de gastos que já foi gasta ( |
|
Percentual esperado do limite de gastos a ser utilizado até o fim do mês ( |
|
Porcentagem do tempo decorrido no mês (por exemplo, |
Verificação do histórico de notificações de um orçamento¶
Para visualizar o histórico de notificações de um orçamento, chame a função NOTIFICATION_HISTORY e filtre pelo nome da integração. Por exemplo:
SELECT * FROM TABLE(
INFORMATION_SCHEMA.NOTIFICATION_HISTORY(
INTEGRATION_NAME=>'budgets_notification_integration'
)
);
A coluna message_source
contém BUDGET
para linhas que representam notificações de orçamento.
Desativação das notificações de um orçamento¶
Para desativar as notificações de um orçamento, chame o método SET_NOTIFICATION_MUTE_FLAG e passe TRUE como argumento. Por exemplo:
CALL SNOWFLAKE.LOCAL.ACCOUNT_ROOT_BUDGET!SET_NOTIFICATION_MUTE_FLAG(TRUE);
Remoção de uma integração de notificação de um orçamento¶
Para remover uma integração de notificação de um orçamento, chame o método <budget_name>!REMOVE_NOTIFICATION_INTEGRATION, informando o nome da integração. Por exemplo:
CALL my_budget!REMOVE_NOTIFICATION_INTEGRATION(
'budgets_notification_integration',
);