이전 로깅 및 이벤트 공유 기능 — 더 이상 사용되지 않음

이 항목에서는 이벤트 정의가 도입되기 전에 로깅 및 이벤트 공유를 설정하는 데 사용되던 더 이상 사용되지 않는 방법을 설명합니다.

로깅 및 이벤트 공유를 설정하는 공급자는 앱에 대한 로깅 및 이벤트 추적 구성하기 섹션에서 설명이 제공되는 방법을 사용해야 합니다. 더 이상 사용되지 않는 기능에서 새로운 로깅 및 이벤트 공유 기능으로 마이그레이션하는 방법에 대한 자세한 내용은 이전 이벤트 공유 함수에서 마이그레이션할 때의 고려 사항 섹션을 참조하십시오.

경고

이 항목에서 설명하는 로깅 및 이벤트 공유를 설정하는 프로세스는 향후 릴리스에서는 더 이상 지원되지 않습니다.

이전 로깅 및 이벤트 공유 기능

이 항목에서는 로깅 및 이벤트 공유를 공급자로 설정하는 방법에 대한 정보를 제공합니다. 이 기능을 구성하기 위한 컨슈머 요구 사항은 앱에 대한 로깅 및 이벤트 공유 활성화하기 섹션을 참조하십시오.

로깅 및 추적 이벤트를 사용하면 앱에 대한 정보를 수집하여 오류를 해결할 수 있습니다. 로깅 및 추적 이벤트를 사용하면 앱의 실행 방식을 더 잘 파악하고 나중에 앱을 개선할 수도 있습니다.

로깅 및 이벤트 공유를 공급자로 설정하기 위한 워크플로

공급자는 다음을 수행하여 앱에 대한 로깅 및 이벤트 공유를 설정할 수 있습니다.

  1. 로깅 및 이벤트 공유 사용을 위한 고려 사항을 검토합니다.

  2. 함수 및 저장 프로시저에 대한 로깅 및 추적 이벤트를 구성합니다.

  3. 매니페스트 파일에서 로그 및 추적 수준을 설정합니다.

  4. 공유 이벤트를 저장하도록 계정을 구성합니다.

컨슈머가 앱을 설치하고 로깅 및 이벤트 공유를 활성화하면 애플리케이션에서 공유하는 로깅 및 이벤트 정보를 볼 수 있습니다.

로깅 및 이벤트 공유 사용 시 고려 사항

앱에 대한 로깅 및 이벤트 공유를 사용하기 전에 공급자는 다음 사항을 고려해야 합니다.

  • 데이터 수집 및 저장을 포함하여 공급자 측의 이벤트 공유와 관련된 모든 비용은 공급자의 책임입니다.

  • 공급자에게는 이벤트 공유를 지원할 각 리전에 공유 이벤트를 저장할 계정 이 있어야 합니다.

  • 공급자는 매니페스트 파일에서 앱의 기본 로그 수준 및 추적 수준을 정의해야 합니다.

참고

이벤트 공유는 해당 이벤트가 기반한 애플리케이션 패키지와 동일한 계정에 설치된 앱에 대해 활성화할 수 없습니다. 앱의 이벤트 공유를 테스트하려면 공급자가 여러 계정을 사용해야 합니다.

함수 및 프로시저에서 로깅 및 추적 이벤트 구성하기

Native Apps Framework에서는 앱의 함수 및 저장 프로시저에서 생성된 로그 메시지와 추적 이벤트를 저장하는 이벤트 테이블이 필요합니다.

참고

앱 컨슈머가 이벤트 테이블을 설정하지 않고 앱을 설치하기 전에 활성 테이블로 생성하면 이벤트 및 로깅 데이터가 삭제됩니다.

한 계정에 여러 이벤트 테이블이 있을 수 있지만, 한 번에 그중 하나만 Snowflake 계정의 활성 이벤트 테이블로 설정할 수 있습니다. 활성 이벤트 테이블이 없으면 앱에서 생성된 로그 메시지와 추적 이벤트가 캡처되지 않습니다. 이는 앱의 함수와 프로시저가 로깅 및 추적 이벤트 APIs를 호출하는 경우에도 마찬가지입니다.

이벤트 테이블을 생성하려면 CREATE EVENT TABLE 명령을 사용하십시오. 자세한 내용은 이벤트 테이블 개요 섹션을 참조하십시오.

코드가 로그 메시지와 추적 이벤트를 기록한 후 공급자는 기록된 데이터를 쿼리할 수 있습니다.

로그 및 추적 데이터 기록과 쿼리에 대한 정보는 다음을 참조하십시오.

매니페스트 파일에서 로그 및 추적 수준 설정하기

앱 버전에 대한 기본 로그 및 추적 이벤트 수준을 설정하려면 다음 예와 같이 매니페스트 파일에 log_leveltrace_level 매개 변수를 설정합니다.

artifacts:
  setup_script: setup.sql
configuration:
  trace_level: OFF
  log_level: DEBUG
Copy

공급자가 추적을 활성화하면 Snowflake Native App 은 모든 쿼리와 저장 프로시저 호출의 시작 시간과 종료 시간을 자동으로 캡처합니다.

참고

trace_level 속성이 OFF 이외의 값으로 설정된 Snowflake Native App 을 게시하면 이벤트 테이블을 볼 수 있는 컨슈머 계정의 모든 사용자에게 숨겨진 저장 프로시저에 대한 호출이 노출될 수 있습니다.

trace_levellog_level 에 지원되는 값에 대한 자세한 내용은 로깅, 메트릭 및 추적을 위한 수준 설정하기로깅, 메트릭 및 추적을 위한 수준 설정하기 섹션을 참조하십시오.

Snowflake Native App 을 처음 설치 시 앱은 매니페스트 파일에 정의된 로그 수준을 사용합니다. 후속 업그레이드에서 로그 수준이 변경되면 업그레이드 프로세스 완료 후 새 로그 수준이 적용됩니다.

로그 및 추적 수준은 매니페스트 파일 내에서만 설정할 수 있습니다. 컨슈머는 ALTER APPLICATION 또는 ALTER DATABASE 명령을 사용하여 로그 수준을 수정할 수 없습니다.

마찬가지로, 로깅 수준에 대한 모든 세션 수준 설정은 앱에서 무시됩니다.

공유 이벤트를 저장하도록 계정 구성하기

공유 로그와 이벤트를 저장하려면 공급자가 이벤트 테이블을 보관할 계정을 선택해야 합니다. 공급자가 액세스할 수 있는 임의의 계정일 수 있습니다. 그러나 조직에 앱 패키지를 게시하는 공급자가 여러 명 있는 경우에는 컨슈머의 공유 이벤트를 저장하는 전용 Snowflake 계정을 사용하는 것이 좋습니다.

공유 이벤트를 저장하는 데 사용되는 계정에는 다음과 같은 제한이 적용됩니다.

  • 이벤트를 저장하는 데 사용되는 계정으로 계정을 설정하려면 ORGADMIN 역할을 사용해야 합니다.

  • 계정에는 활성 이벤트 테이블 이 있어야 합니다.

  • 지정된 계정은 다음 중 하나일 수 없습니다.

    • 잠기거나 일시 중단된 계정.

    • 독자 계정.

    • 평가판 계정.

    • Snowflake 관리 계정.

참고

공급자는 컨슈머가 앱을 설치한 리전과 동일한 리전에서만 로그와 공유 이벤트를 수집할 수 있습니다. 공급자는 컨슈머가 앱에 대한 공유를 구성하는 모든 리전에서 공유 이벤트를 저장할 계정을 설정해야 합니다.

계정을 이벤트 계정으로 설정하기

계정을 리전의 이벤트 계정이 되도록 설정하려면 SYSTEM$SET_EVENT_SHARING_ACCOUNT_FOR_REGION 시스템 함수를 호출하십시오.

CALL SYSTEM$SET_EVENT_SHARING_ACCOUNT_FOR_REGION('<snowflake_region>', '<region_group>', '<account_name>')
Copy

여기서

snowflake_region

계정이 위치한 리전을 지정합니다(예: AWS_US_WEST_2, AWS_US_EAST_1).

region_group

리전 그룹을 지정합니다(예: PUBLIC). 자세한 내용은 리전 그룹 섹션을 참조하십시오.

account_name

계정 이름을 지정합니다. 지정된 리전에서 다른 계정이 이미 이벤트 계정으로 설정된 경우 이 명령을 실행하면 이벤트 계정이 여기에 지정된 계정으로 변경됩니다. 항상 Snowflake 계정 식별자가 아닌 계정 이름을 사용합니다.

참고

이 함수를 호출하려면 ORGADMIN 역할을 사용해야 합니다.

계정을 이벤트 계정으로 설정 해제하기

계정을 리전의 이벤트 계정이 되도록 설정 해제하려면 SYSTEM$UNSET_EVENT_SHARING_ACCOUNT_FOR_REGION 시스템 함수를 호출하십시오.

CALL SYSTEM$UNSET_EVENT_SHARING_ACCOUNT_FOR_REGION('<snowflake_region>', '<region_group>', '<account_name>')
Copy

여기서

snowflake_region

계정이 위치한 리전을 지정합니다(예: AWS_US_WEST_2, AWS_US_EAST_1).

region_group

리전 그룹을 지정합니다(예: PUBLIC).

account_name

계정 이름을 지정합니다. 항상 Snowflake 계정 식별자가 아닌 계정 이름을 사용합니다.

참고

이 함수를 호출하려면 ORGADMIN 역할을 사용해야 합니다.

공급자 조직에서 이벤트 계정 보기

공급자 조직의 이벤트 계정을 표시하려면 SYSTEM$SHOW_EVENT_SHARING_ACCOUNTS 시스템 함수를 호출하십시오.

CALL SYSTEM$SHOW_EVENT_SHARING_ACCOUNTS()
Copy

참고

이 함수를 호출하려면 ORGADMIN 역할을 사용해야 합니다.

이 시스템 함수는 조직 내의 이벤트 계정 목록이 포함된 문자열을 JSON 형식으로 반환합니다. 메타데이터가 모든 리전에 전파되기까지 시간이 약간 걸리므로, 이 함수는 사용자가 조직의 이벤트 계정을 설정/설정 해제한 후 최신 이벤트 계정을 표시할 때 약간의 지연이 발생할 수 있습니다.

애플리케이션 패키지에 정의된 로깅 및 추적 이벤트 수준 보기

DESCRIBE APPLICATION 명령을 사용하여 다음 명령에 표시된 것처럼 앱의 로깅 수준을 확인합니다.

DESC APPLICATION HelloSnowflake;
Copy

다음 예와 같이 애플리케이션 패키지에 정의된 로깅 수준과 애플리케이션 버전을 보려면 SHOW VERSIONS 명령을 사용합니다.

SHOW VERSIONS
  IN APPLICATION PACKAGE HelloSnowflake;
Copy

이벤트 테이블에서 로그 및 이벤트 보기

이벤트 테이블에 저장된 로그와 이벤트를 보려면 다음 예와 같이 SELECT 명령을 사용하십시오.

SELECT * FROM EVENT_DB.EVENT_SCHEMA.MY_EVENT_TABLE
Copy

공급자에게 제공되는 공유 이벤트 정보

다음 섹션에서는 Native Apps Framework가 공급자와 공유하는 정보를 설명합니다.

공급자와 공유되는 앱 이벤트 컨텍스트

공급자가 공유 이벤트의 원본을 쉽게 식별하는 데 도움이 되도록, 공급자와 공유 시 이벤트 테이블의 RESOURCE_ATTRIBUTES 열에 다음 필드가 채워집니다.

  • snow.application.package.name

  • snow.application.consumer.organization

  • snow.application.consumer.name

  • snow.listing.name

  • snow.listing.global_name

공급자와 공유되지 않는 필드

컨슈머 정보를 보호하기 위해, RESOURCE_ATTRIBUTES 열의 다음 필드는 공급자와 공유되지 않습니다.

  • snow.database.id

  • snow.database.name

  • snow.schema.id

  • snow.executable.id

  • snow.owner.name

  • snow.owner.id

  • snow.warehouse.name

  • snow.warehouse.id

  • snow.query.id

  • snow.session.id

  • snow.session.role.primary.name

  • snow.session.role.primary.id

  • snow.user.name

  • snow.user.id

  • db.user

snow.database.namesnow.query.id 필드를 공급자와 직접 공유하는 대신, Snowflake는 이 두 필드의 해시 값(SHA-1)을 다음 필드로 공유합니다.

  • snow.database.hash

  • snow.query.hash

Snowflake는 이러한 특성을 마스킹하는 데 사용되는 SHA-1 함수 를 제공합니다. 컨슈머는 데이터베이스 이름과 쿼리 ID에 대한 해시 값을 계산하여 공급자에게 문의할 때 참조 값으로 사용할 수 있습니다.

컨슈머 계정에서 이벤트 공유가 활성화되어 있는지 확인

일부 상황에서는 공급자가 컨슈머 계정에서 이벤트 공유가 활성화되었는지 확인해야 할 수도 있습니다. 예를 들어, 이벤트 테이블을 사용할 수 없는 경우 공급자는 앱 기능을 비활성화해야 할 수 있습니다.

컨슈머 계정에서 이벤트 공유가 활성화되어 있는지 확인하기 위해 공급자는 앱 로직을 정의할 때 다음 시스템 함수를 호출할 수 있습니다.

  • 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;
$$;
Copy

앱의 설정 스크립트에 이러한 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;
Copy

이 예제에서 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()
Copy

이 예제에서 critical_feature_that_requires_event_sharing() 메서드는 다음 중 하나에 해당하는 경우에만 호출됩니다.

  • 이벤트 공유가 활성화되어 있으며 이벤트 테이블이 있습니다.

  • Snowflake Native App 는 애플리케이션 패키지와 동일한 계정에 설치됩니다.

두 조건이 모두 해당하지 않으면 Streamlit 앱은 request_event_sharing() 메서드를 호출하여 컨슈머에게 이벤트 테이블을 선택하라는 메시지를 표시합니다.

자세한 내용은 컨슈머 계정에서 이벤트 공유가 활성화되어 있는지 확인 섹션을 참조하십시오.