예산(Budgets) 알림
예산(Budgets) 알림
크레딧 사용량이 지출 한도를 초과할 것으로 예상될 때 알림을 받으려면 선택한 대상으로 알림을 보낼 수 있도록 예산을 설정해야 해요. 다음 수단으로 알림을 받을 수 있어요.
- 이메일(E-mail)
- 클라우드 서비스가 제공하는 큐로 푸시되는 메시지(Amazon SNS, Azure Event Grid, Google Cloud PubSub)
- Slack, Microsoft Teams, PagerDuty의 웹훅 호출
출처: Snowflake 문서
본문
참고(Note): 이메일 알림은 Snowflake의 Amazon Web Services(AWS) 배포를 통해 AWS Simple Email Service(SES)를 사용해 처리돼요. AWS를 사용해 보낸 이메일 메시지의 내용은 메시지 전달 관리를 위해 Snowflake가 최대 30일 동안 보관할 수 있어요. 이 기간이 지나면 메시지 내용이 삭제돼요.
알림이 전송되는 시점 제어
기본적으로 예상 지출이 예산 지출 한도보다 10% 이상 높을 때 알림이 시작돼요.
알림 임계값(예산 지출 한도의 백분율)을 정의해 이 기본값을 재정의할 수 있어요. Snowflake가 지출이 임계값을 초과할 것이라고 예측하면 알림이 전송돼요.
예를 들어 예상 지출이 예산 지출 한도의 50%를 초과할 때 알림을 보내고 싶다고 가정해 봐요. 계정 예산에 대해 이 알림 임계값을 설정하려면 다음 명령을 실행해요.
CALL SNOWFLAKE.LOCAL.ACCOUNT_ROOT_BUDGET!SET_NOTIFICATION_THRESHOLD(50);
커스텀 예산에 대해서도 알림 임계값을 설정할 수 있어요.
알림 임계값을 기본값으로 재설정하려면 <budget_name>!SET_NOTIFICATION_THRESHOLD 메서드를 인자 110으로 호출해요.
이메일 알림 설정
이메일 알림을 설정하려면:
- (선택 사항) 자체 알림 통합을 사용하려면 알림 통합을 만들거나 사용하려는 기존 알림 통합을 선택해요. 알림 통합은 Snowflake가 서드파티 시스템에 알림을 보낼 수 있게 해줘요.
- TYPE = EMAIL이고 ALLOWED_RECIPIENTS가 수신자의 검증된 이메일 주소 목록으로 설정된 알림 통합을 만들어요. 자세한 내용은 이메일 알림 통합 생성과 알림을 받을 수 있는 이메일 주소 목록 제한을 참고해요.
참고(Note): 예산 알림용으로 추가된 각 이메일 주소는 검증(verified)되어야 해요. 목록의 이메일 주소 중 하나라도 검증되지 않으면 이메일 알림 설정이 실패해요.
예를 들어:
CREATE NOTIFICATION INTEGRATION budgets_notification_integration
TYPE = EMAIL
ENABLED = TRUE
ALLOWED_RECIPIENTS = ('[email protected]','[email protected]');
- SYSTEM$SEND_SNOWFLAKE_NOTIFICATION 저장 프로시저를 호출해 테스트 메시지를 보내 알림 통합이 예상대로 작동하는지 확인해요.
예를 들어 JSON 형식으로 테스트 메시지를 보낼 수 있어요.
CALL SYSTEM$SEND_SNOWFLAKE_NOTIFICATION(
SNOWFLAKE.NOTIFICATION.APPLICATION_JSON('{"name": "value"}'),
SNOWFLAKE.NOTIFICATION.INTEGRATION('budgets_notification_integration')
);
- 알림 통합에 대한 USAGE 권한을 SNOWFLAKE 애플리케이션에 부여해요. 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(
'[email protected], [email protected]'
);
커스텀 예산의 알림을 구성한다면 커스텀 예산의 객체에서 메서드를 호출해요. 예를 들어 my_budget이라는 커스텀 예산을 만들었다면:
CALL my_budget!SET_EMAIL_NOTIFICATIONS(
'[email protected], [email protected]'
);
- 사용하려는 알림 통합이 있으면 그 통합의 이름과 검증된 이메일 주소의 쉼표로 구분된 목록을 전달해요. 예를 들어 계정 예산의 알림을 구성한다면:
CALL SNOWFLAKE.LOCAL.ACCOUNT_ROOT_BUDGET!SET_EMAIL_NOTIFICATIONS(
'budgets_notification_integration',
'[email protected], [email protected]'
);
커스텀 예산의 알림을 구성한다면 커스텀 예산의 객체에서 메서드를 호출해요. 예를 들어 my_budget이라는 커스텀 예산을 만들었다면:
CALL my_budget!SET_EMAIL_NOTIFICATIONS(
'budgets_notification_integration',
'[email protected], [email protected]'
);
- 알림 통합을 예산과 연결했다면 <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인 알림 통합을 만들어요. 자세한 내용은 다음을 참고해요.
- Amazon SNS 토픽으로 알림을 보내는 알림 통합 생성
- Microsoft Azure Event Grid 토픽으로 알림을 보내는 알림 통합 생성
- Google Cloud Pub/Sub 토픽으로 알림을 보내는 알림 통합 생성
참고(Note): 계정이 클라우드 제공자 큐와 같은 클라우드 플랫폼에 있어야 해요.
예를 들어:
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): 큐 및 웹훅 알림의 경우 예산에 최대 10개의 알림 통합을 연결할 수 있어요.
- SYSTEM$SEND_SNOWFLAKE_NOTIFICATION 저장 프로시저를 호출해 테스트 메시지를 보내 알림 통합이 예상대로 작동하는지 확인해요.
예를 들어 JSON 형식으로 테스트 메시지를 보낼 수 있어요.
CALL SYSTEM$SEND_SNOWFLAKE_NOTIFICATION(
SNOWFLAKE.NOTIFICATION.APPLICATION_JSON('{"name": "value"}'),
SNOWFLAKE.NOTIFICATION.INTEGRATION('budgets_notification_integration')
);
- 알림 통합에 대한 USAGE 권한을 SNOWFLAKE 애플리케이션에 부여해요. 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 |
+----------------------------------+------------------------+------------+
웹훅 알림 설정
웹훅 알림을 설정하려면:
- 알림 통합을 만들거나 사용하려는 기존 알림 통합을 선택해요. 알림 통합은 Snowflake가 서드파티 시스템에 알림을 보낼 수 있게 해줘요.
웹훅에 필요한 추가 속성과 함께 TYPE=WEBHOOK인 알림 통합을 만들어요. 자세한 내용은 웹훅 알림 보내기를 참고해요.
알림 메시지는 JSON 형식이므로 이에 맞게 알림 통합을 구성해야 해요. 예를 들어 다음 문장은 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): 큐 및 웹훅 알림의 경우 예산에 최대 10개의 알림 통합을 연결할 수 있어요.
- SYSTEM$SEND_SNOWFLAKE_NOTIFICATION 저장 프로시저를 호출해 테스트 메시지를 보내 알림 통합이 예상대로 작동하는지 확인해요.
예를 들어 JSON 형식으로 테스트 메시지를 보낼 수 있어요. JSON 문자열의 큰따옴표와 백슬래시를 이스케이프해야 해요.
CALL SYSTEM$SEND_SNOWFLAKE_NOTIFICATION(
SNOWFLAKE.NOTIFICATION.APPLICATION_JSON('{\\\"name\\\": \\\"value\\\"}'),
SNOWFLAKE.NOTIFICATION.INTEGRATION('budgets_notification_integration')
);
- 알림 통합에 대한 USAGE 권한을 SNOWFLAKE 애플리케이션에 부여해요. USAGE 권한은 예산이 알림 통합을 사용해 알림을 보낼 수 있게 해줘요. 예를 들어:
GRANT USAGE ON INTEGRATION budgets_notification_integration
TO APPLICATION snowflake;
- 시크릿에 의존하는 웹훅 알림 통합을 사용한다면 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 알림 메시지 해석
예산이 클라우드 제공자 큐나 웹훅으로 알림을 보내도록 구성하면 알림 메시지에는 다음과 유사한 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 객체는 다음 키-값 쌍을 포함해요.
| 키 | 설명 |
|---|---|
| account_name | 계정의 이름 |
| budget_name | 예산의 이름. 계정 예산의 이름은 ACCOUNT_ROOT_BUDGET |
| type | 알림의 유형(예: BUDGET_LIMIT_WARNING) |
| limit | 예산에 설정한 지출 한도 |
| spending | 이번 달의 크레딧 사용량 |
| 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'
)
);
예산 알림을 나타내는 행에 대해 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',
);
더 알아보기 (Learn more)
- 예산(Budgets) 개요 — 예산 기능 소개
- 예산 비용 — 예산 사용 비용
- 웹훅 알림 — 웹훅 알림 통합