이전 로깅 및 이벤트 공유 기능 — 더 이상 사용되지 않음¶
이 항목에서는 이벤트 정의가 도입되기 전에 로깅 및 이벤트 공유를 설정하는 데 사용되던 더 이상 사용되지 않는 방법을 설명합니다.
로깅 및 이벤트 공유를 설정하는 공급자는 앱에 대한 로깅 및 이벤트 추적 구성하기 섹션에서 설명이 제공되는 방법을 사용해야 합니다. 더 이상 사용되지 않는 기능에서 새로운 로깅 및 이벤트 공유 기능으로 마이그레이션하는 방법에 대한 자세한 내용은 이전 이벤트 공유 함수에서 마이그레이션할 때의 고려 사항 섹션을 참조하십시오.
경고
이 항목에서 설명하는 로깅 및 이벤트 공유를 설정하는 프로세스는 향후 릴리스에서는 더 이상 지원되지 않습니다.
이전 로깅 및 이벤트 공유 기능¶
이 항목에서는 로깅 및 이벤트 공유를 공급자로 설정하는 방법에 대한 정보를 제공합니다. 이 기능을 구성하기 위한 컨슈머 요구 사항은 앱에 대한 로깅 및 이벤트 공유 활성화하기 섹션을 참조하십시오.
로깅 및 추적 이벤트를 사용하면 앱에 대한 정보를 수집하여 오류를 해결할 수 있습니다. 로깅 및 추적 이벤트를 사용하면 앱의 실행 방식을 더 잘 파악하고 나중에 앱을 개선할 수도 있습니다.
로깅 및 이벤트 공유를 공급자로 설정하기 위한 워크플로¶
공급자는 다음을 수행하여 앱에 대한 로깅 및 이벤트 공유를 설정할 수 있습니다.
컨슈머가 앱을 설치하고 로깅 및 이벤트 공유를 활성화하면 애플리케이션에서 공유하는 로깅 및 이벤트 정보를 볼 수 있습니다.
로깅 및 이벤트 공유 사용 시 고려 사항¶
앱에 대한 로깅 및 이벤트 공유를 사용하기 전에 공급자는 다음 사항을 고려해야 합니다.
데이터 수집 및 저장을 포함하여 공급자 측의 이벤트 공유와 관련된 모든 비용은 공급자의 책임입니다.
공급자에게는 이벤트 공유를 지원할 각 리전에 공유 이벤트를 저장할 계정 이 있어야 합니다.
공급자는 매니페스트 파일에서 앱의 기본 로그 수준 및 추적 수준을 정의해야 합니다.
참고
이벤트 공유는 해당 이벤트가 기반한 애플리케이션 패키지와 동일한 계정에 설치된 앱에 대해 활성화할 수 없습니다. 앱의 이벤트 공유를 테스트하려면 공급자가 여러 계정을 사용해야 합니다.
함수 및 프로시저에서 로깅 및 추적 이벤트 구성하기¶
Native Apps Framework에서는 앱의 함수 및 저장 프로시저에서 생성된 로그 메시지와 추적 이벤트를 저장하는 이벤트 테이블이 필요합니다.
참고
앱 컨슈머가 이벤트 테이블을 설정하지 않고 앱을 설치하기 전에 활성 테이블로 생성하면 이벤트 및 로깅 데이터가 삭제됩니다.
한 계정에 여러 이벤트 테이블이 있을 수 있지만, 한 번에 그중 하나만 Snowflake 계정의 활성 이벤트 테이블로 설정할 수 있습니다. 활성 이벤트 테이블이 없으면 앱에서 생성된 로그 메시지와 추적 이벤트가 캡처되지 않습니다. 이는 앱의 함수와 프로시저가 로깅 및 추적 이벤트 APIs를 호출하는 경우에도 마찬가지입니다.
이벤트 테이블을 생성하려면 CREATE EVENT TABLE 명령을 사용하십시오. 자세한 내용은 이벤트 테이블 개요 섹션을 참조하십시오.
코드가 로그 메시지와 추적 이벤트를 기록한 후 공급자는 기록된 데이터를 쿼리할 수 있습니다.
로그 및 추적 데이터 기록과 쿼리에 대한 정보는 다음을 참조하십시오.
매니페스트 파일에서 로그 및 추적 수준 설정하기¶
앱 버전에 대한 기본 로그 및 추적 이벤트 수준을 설정하려면 다음 예와 같이 매니페스트 파일에 log_level
및 trace_level
매개 변수를 설정합니다.
artifacts:
setup_script: setup.sql
configuration:
trace_level: OFF
log_level: DEBUG
공급자가 추적을 활성화하면 Snowflake Native App 은 모든 쿼리와 저장 프로시저 호출의 시작 시간과 종료 시간을 자동으로 캡처합니다.
참고
trace_level
속성이 OFF
이외의 값으로 설정된 Snowflake Native App 을 게시하면 이벤트 테이블을 볼 수 있는 컨슈머 계정의 모든 사용자에게 숨겨진 저장 프로시저에 대한 호출이 노출될 수 있습니다.
trace_level
및 log_level
에 지원되는 값에 대한 자세한 내용은 로깅, 메트릭 및 추적을 위한 수준 설정하기 및 로깅, 메트릭 및 추적을 위한 수준 설정하기 섹션을 참조하십시오.
Snowflake Native App 을 처음 설치 시 앱은 매니페스트 파일에 정의된 로그 수준을 사용합니다. 후속 업그레이드에서 로그 수준이 변경되면 업그레이드 프로세스 완료 후 새 로그 수준이 적용됩니다.
로그 및 추적 수준은 매니페스트 파일 내에서만 설정할 수 있습니다. 컨슈머는 ALTER APPLICATION 또는 ALTER DATABASE 명령을 사용하여 로그 수준을 수정할 수 없습니다.
마찬가지로, 로깅 수준에 대한 모든 세션 수준 설정은 앱에서 무시됩니다.
애플리케이션 패키지에 정의된 로깅 및 추적 이벤트 수준 보기¶
DESCRIBE APPLICATION 명령을 사용하여 다음 명령에 표시된 것처럼 앱의 로깅 수준을 확인합니다.
DESC APPLICATION HelloSnowflake;
다음 예와 같이 애플리케이션 패키지에 정의된 로깅 수준과 애플리케이션 버전을 보려면 SHOW VERSIONS 명령을 사용합니다.
SHOW VERSIONS
IN APPLICATION PACKAGE HelloSnowflake;
이벤트 테이블에서 로그 및 이벤트 보기¶
이벤트 테이블에 저장된 로그와 이벤트를 보려면 다음 예와 같이 SELECT 명령을 사용하십시오.
SELECT * FROM EVENT_DB.EVENT_SCHEMA.MY_EVENT_TABLE
컨슈머 계정에서 이벤트 공유가 활성화되어 있는지 확인¶
일부 상황에서는 공급자가 컨슈머 계정에서 이벤트 공유가 활성화되었는지 확인해야 할 수도 있습니다. 예를 들어, 이벤트 테이블을 사용할 수 없는 경우 공급자는 앱 기능을 비활성화해야 할 수 있습니다.
컨슈머 계정에서 이벤트 공유가 활성화되어 있는지 확인하기 위해 공급자는 앱 로직을 정의할 때 다음 시스템 함수를 호출할 수 있습니다.
IS_APPLICATION_SHARING_EVENTS_WITH_PROVIDER
앱에서 이벤트 공유를 활성화하고 컨슈머 계정에서 활성 이벤트 테이블을 사용할 수 있는 경우 TRUE를 반환합니다. 그렇지 않으면, FALSE를 반환합니다.
IS_APPLICATION_INSTALLED_FROM_SAME_ACCOUNT
앱의 기반이 되는 애플리케이션 패키지와 동일한 계정에 앱이 설치된 경우 TRUE를 반환합니다. 그렇지 않으면, FALSE를 반환합니다.
참고
이러한 시스템 함수는 앱 내에서만 호출할 수 있습니다. Python Permission SDK 를 사용하여 이벤트 공유가 활성화되어 있는지 확인 및 SQL을 사용하여 이벤트 공유가 활성화되어 있는지 확인 섹션을 참조하십시오.
Python Permission SDK 를 사용하여 이벤트 공유가 활성화되어 있는지 확인¶
Python Permission SDK 는 컨슈머 계정에서 공유가 활성화되어 있는지 여부를 판단하는 다음 함수를 제공합니다.
is_event_sharing_enabled()
SHARE_EVENTS_WITH_PROVIDER 속성이 true이고 컨슈머 계정에 활성 이벤트 테이블이 구성된 경우 TRUE를 반환합니다. 그렇지 않으면, FALSE를 반환합니다.
is_application_local_to_package()
앱이 애플리케이션 패키지와 동일한 계정에 있는 경우 TRUE를 반환합니다. 그렇지 않으면, FALSE를 반환합니다.
SQL을 사용하여 이벤트 공유가 활성화되어 있는지 확인¶
다음 예제는 컨슈머 계정에서 이벤트 공유가 활성화된 경우 저장 프로시저를 호출하는 방법을 보여줍니다.
두 숫자의 합을 계산하는 함수를 생성하는 다음 SQL 저장 프로시저를 살펴보겠습니다.
CREATE OR ALTER VERSIONED SCHEMA app_schema;
CREATE OR REPLACE PROCEDURE app_schema.hidden_sum(num1 float, num2 float)
RETURNS FLOAT
LANGUAGE SQL
EXECUTE AS OWNER
AS $$
DECLARE
SUM FLOAT;
BEGIN
SYSTEM$LOG('INFO', 'CALCULATE THE SUM OF TWO NUMBERS');
SUM := :NUM1 + :NUM2;
RETURN SUM;
END;
$$;
앱의 설정 스크립트에 이러한 SQL 명령을 추가하면 앱이 설치될 때 컨슈머 계정에 hidden_sum
저장 프로시저가 생성됩니다. 그러나 이 저장 프로시저는 애플리케이션 역할에 대한 USAGE 권한이 저장 프로시저에 부여되지 않았기 때문에 컨슈머에게는 보이지 않습니다.
다음 예제는 IS_APPLICATION_SHARING_EVENTS_WITH_PROVIDER 및 IS_APPLICATION_INSTALLED_FROM_SAME_ACCOUNT 시스템 함수가 반환하는 값을 사용하여 hidden_sum
저장 프로시저를 호출하는 방법을 보여줍니다.
CREATE OR REPLACE PROCEDURE app_schema.sum(num1 float, num2 float)
RETURNS STRING
LANGUAGE SQL
EXECUTE AS OWNER
AS $$
BEGIN
IF (SYSTEM$IS_APPLICATION_INSTALLED_FROM_SAME_ACCOUNT() or SYSTEM$IS_APPLICATION_SHARING_EVENTS_WITH_PROVIDER()) THEN
CALL APP_SCHEMA.HIDDEN_SUM(:NUM1, :NUM2);
ELSE
-- notify consumers that they need to enable event sharing
RETURN 'Sorry you can\'t access the API, please enable event sharing.';
END IF;
END;
$$;
CREATE APPLICATION ROLE IF NOT EXISTS ADMIN_ROLE;
GRANT USAGE ON SCHEMA APP_SCHEMA TO APPLICATION ROLE ADMIN_ROLE;
이 예제에서 sum
저장 프로시저는 IS_APPLICATION_SHARING_EVENTS_WITH_PROVIDER 및 IS_APPLICATION_INSTALLED_FROM_SAME_ACCOUNT 저장 프로시저의 값을 테스트합니다. 값 중 하나가 true
인 경우 sum
저장 프로시저는 hidden_sum
저장 프로시저를 호출합니다.
Python Permission SDK 를 사용하여 컨슈머에게 이벤트 공유 요청¶
공급자는 Python Permission SDK 를 사용하여 Streamlit 앱을 생성하여 컨슈머에게 계정에서 이벤트 공유를 활성화하라는 메시지를 표시할 수 있습니다.
SDK는 컨슈머에게 계정에서 이벤트 공유를 활성화할지 묻는 대화 상자를 Snowsight 에 표시하는 request_event_sharing()
메서드를 제공합니다. 이벤트 테이블이 컨슈머 계정에 없는 경우 대화 상자를 통해 컨슈머가 ACCOUNTADMIN 역할을 사용하는 경우 이벤트 테이블을 설정할 수 있습니다.
예제: 이벤트 테이블과 함께 Python Permission SDK 사용하기¶
다음 Streamlit 예제에서는 Python Permission SDK 를 사용하여 다음을 수행하는 방법을 보여줍니다.
이벤트 공유가 활성화되어 있는지 확인합니다.
이벤트 공유가 활성화된 경우
critical_feature_that_requires_event_sharing()
함수를 호출합니다.이벤트 공유가 활성화되어 있지 않은 경우
request_event_sharing()
함수를 호출하여 Snowsight 에 컨슈머에게 이벤트 공유를 활성화하라는 대화 상자를 표시합니다.
import streamlit as st
import snowflake.permissions as permissions
def critical_feature_that_requires_event_sharing():
st.write("critical_feature_that_requires_event_sharing")
def main():
if permissions.is_event_sharing_enabled() or permissions.is_application_local_to_package():
critical_feature_that_requires_event_sharing()
else:
permissions.request_event_sharing()
if __name__ == "__main__":
main()
이 예제에서 critical_feature_that_requires_event_sharing()
메서드는 다음 중 하나에 해당하는 경우에만 호출됩니다.
이벤트 공유가 활성화되어 있으며 이벤트 테이블이 있습니다.
Snowflake Native App 는 애플리케이션 패키지와 동일한 계정에 설치됩니다.
두 조건이 모두 해당하지 않으면 Streamlit 앱은 request_event_sharing()
메서드를 호출하여 컨슈머에게 이벤트 테이블을 선택하라는 메시지를 표시합니다.
자세한 내용은 컨슈머 계정에서 이벤트 공유가 활성화되어 있는지 확인 섹션을 참조하십시오.