애플리케이션에 대한 로깅 및 이벤트 공유 설정하기

이 항목에서는 로깅 및 이벤트 공유를 설정하여 설치된 애플리케이션 문제를 해결하는 방법을 설명합니다.

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

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

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

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

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

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

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

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

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

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

애플리케이션에 로깅 및 이벤트 공유를 사용하기 전에 다음 사항을 고려해야 합니다.

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

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

  • 매니페스트 파일에서 애플리케이션의 기본 로그 수준 및 추적 수준을 정의해야 합니다.

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

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

참고

애플리케이션 컨슈머가 이벤트 테이블을 설정하지 않고 애플리케이션을 설치하기 전에 활성 테이블로 만들면 이벤트 및 로깅 데이터가 삭제됩니다.

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

이벤트 테이블을 생성하려면 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

계정 이름을 지정합니다. 지정된 리전에서 다른 계정이 이미 이벤트 계정으로 설정된 경우 이 명령을 실행하면 이벤트 계정이 여기에 지정된 계정으로 변경됩니다.

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

계정을 리전의 이벤트 계정이 되도록 설정 해제하려면 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

계정 이름을 지정합니다.

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

공급자 조직의 이벤트 계정을 표시하려면 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에 대한 해시 값을 계산하여 공급자에게 문의할 때 참조 값으로 사용할 수 있습니다.