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);
Copy

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:

  1. (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.

    1. 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');
      
      Copy
    2. 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')
      );
      
      Copy
    3. 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;
      
      Copy
  2. 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'
      );
      
      Copy

      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'
      );
      
      Copy
    • 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'
      );
      
      Copy

      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'
      );
      
      Copy
  3. 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();
    
    Copy

    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();
    
    Copy

Configuração da notificação de fila

Para configurar a notificação de fila:

  1. 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>';
    
    Copy

    Nota

    Para notificações de fila e webhook, é possível associar até 10 integrações de notificação a um orçamento.

  2. 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')
    );
    
    Copy
  3. 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;
    
    Copy
  4. 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',
    );
    
    Copy

    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',
    );
    
    Copy
  5. 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();
    
    Copy

    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();
    
    Copy

    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:

  1. 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;
    
    Copy

    Nota

    Para notificações de fila e webhook, é possível associar até 10 integrações de notificação a um orçamento.

  2. 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')
    );
    
    Copy
  3. 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;
    
    Copy
  4. 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;
    
    Copy
  5. 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',
    );
    
    Copy

    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',
    );
    
    Copy
  6. 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();
    
    Copy

    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();
    
    Copy

    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"
}
Copy

O objeto JSON contém os seguintes pares chave-valor:

Chave

Descrição

account_name

Nome de sua conta.

budget_name

Nome de seu orçamento. Para o orçamento de conta, o nome é ACCOUNT_ROOT_BUDGET.

type

O tipo de notificação (por exemplo, BUDGET_LIMIT_WARNING).

limit

O limite de gastos que você definiu para o orçamento.

spending

O valor do uso de crédito para esse mês.

spending_percent

A porcentagem do limite de gastos que já foi gasta (spending / limit).

spending_trend_percent

Percentual esperado do limite de gastos a ser utilizado até o fim do mês (spending_percent / time_percent * 100).

time_percent

Porcentagem do tempo decorrido no mês (por exemplo, 50.00 se o mês estiver na metade).

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'
  )
);
Copy

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);
Copy

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',
);
Copy