DCM Projects 모니터링 및 문제 해결

이 항목에서는 DCM 배포를 모니터링하고 실패한 DCM 계획 문제를 해결하는 방법에 대해 설명합니다.

DCM project 문제 해결

DCM project 에 익숙하지 않은 경우, 구성 오류 또는 기타 일반적인 위험으로 인해 오류가 발생할 수 있습니다. 이 섹션에서는 이러한 오류와 해결 방법에 대해 설명합니다.

오류의 일반적인 원인

다음 테이블에는 DCM project 실행 시 오류의 일반적인 원인이 나열되어 있습니다.

오류 카테고리

일반적인 원인

보조 역할

  • DCM 명령을 실행할 때 보조 역할 권한을 무의식적으로 활용하여 사용자에게 일관되지 않은 동작이 발생합니다.

역할 권한이 충분하지 않음

  • 정의된 오브젝트 유형을 생성하기 위한 역할 권한이 충분하지 않음

  • 현재 다른 역할이 소유한 기존 오브젝트를 변경하거나 삭제할 수 있는 역할 권한이 충분하지 않음

  • 시스템 DMFs를 사용하기 위한 역할 권한이 충분하지 않음

  • 생성 시 동적 테이블을 새로 고치기 위해 웨어하우스를 실행하기에 역할 권한이 충분하지 않음

Jinja 렌더링 문제

  • 잘못된 Jinja 구문으로 인한 Jinja 렌더링 문제

  • 값 유형 불일치로 인한 Jinja 렌더링 문제

프로젝트 문제

  • 잘못된 매니페스트 경로

  • 빈 정의 폴더

  • 잘못된 리포지토리 분기의 오래된 정의 파일

  • 다른 DCM project 에 의해 이미 배포된 오브젝트

  • 일치하지 않는 프로젝트 및 오브젝트 참조

관찰 및 감사 DCM project 배포

DCM Projects 는 계정 인프라의 모든 변경 사항에 대한 완전한 투명성과 감사 추적을 제공하도록 설계되었습니다. 이를 위해서는 인프라 배포 프로세스를 설정하기 위한 몇 가지 소프트웨어 개발 모범 사례를 따라야 합니다. 자세한 내용은 DCM project 배포 자동화 섹션을 참조하십시오.

다음 소스를 사용하여 이전 배포를 검토합니다.

배포 아티팩트

실행된 모든 배포에 대해 배포 아티팩트의 변경 불가능한 스냅샷이 다음 정보와 함께 DCM project 내부에 저장됩니다.

  • 매니페스트 파일(manifest.yml)

  • sources 폴더 내부의 모든 오브젝트 정의 및 매크로 파일(.sql 파일)

  • 다음을 포함하여 PLAN 작업(plan_result.json) 및 DEPLOY 작업(deploy_result.json)의 출력

    • 이 배포에 사용되는 템플릿 변수

    • 타임스탬프, 오브젝트 이름, 쿼리 ID를 포함한 배포 메타데이터

    • 변경 세트

이 완전한 세트를 통해 정의된 상태를 디버깅, 감사 또는 재배포하기 위한 모든 배포 작업을 재현할 수 있습니다.

DCM project 를 관찰하고 감사하는 데 사용할 수 있는 명령은 다음과 같습니다.

  • MONITOR 권한으로 다음을 수행할 수 있습니다.

    • DCM project 내부에 저장된 모든 배포를 나열합니다.

    • 지정된 배포 내의 모든 파일을 나열합니다.

    • 해당 배포 내에서 특정 파일을 읽거나 복사하거나 다운로드합니다.

  • 배포에 민감한 데이터가 포함된 경우 OWNERSHIP 권한으로 수동 삭제할 수 있습니다.

  • READ 권한으로 DESCRIBE 명령을 실행하여 선택한 DCM project 의 가장 최근 배포 이름, 별칭 및 타임스탬프를 확인할 수 있습니다.

예제 명령:

DESCRIBE DCM PROJECT DCM_DEMO.PROJECTS.DCM_PROJECT_DEV;

SHOW DEPLOYMENTS IN DCM PROJECT DCM_DEMO.PROJECTS.DCM_PROJECT_DEV;

LIST 'snow://project/DCM_DEMO.PROJECTS.DCM_PROJECT_DEV/deployments/DEPLOYMENT$1/';

ALTER DCM PROJECT DCM_DEMO.PROJECTS.DCM_PROJECT_DEV DROP DEPLOYMENT DEPLOYMENT$1;

배포 기록

INFORMATION_SCHEMA 함수는 선택한 DCM project 에 대한 배포 성공 및 실패를 확인할 수 있는 역할 기반 액세스와 짧은 대기 시간 방법을 제공합니다.

모든 인자 project_name``result_limit``는 선택 사항입니다.

예제 명령:

SELECT
  START_TIMESTAMP,
  END_TIMESTAMP,
  STATUS,
  DEPLOYMENT_NUMBER,
  DEPLOYMENT_ALIAS,
  CONFIGURATION_PROFILE,
  ERROR_MESSAGE,
  EXECUTOR_ROLE,
  STATS
FROM
  TABLE (DCM_DEMO.INFORMATION_SCHEMA.DCM_DEPLOYMENT_HISTORY(
    project_name => 'DCM_DEMO.PROJECTS.DCM_PROJECT_DEV',
    result_limit => 50
  ));

이벤트 로그

DCM project 오브젝트에 선호하는 LOG_LEVEL을 설정하거나 상위 스키마, 데이터베이스 또는 계정에서 정의된 LOG_LEVEL을 상속할 수 있습니다.

DCM project 의 LOG_LEVEL이 설정되면 실패한 PLAN 및 DEPLOY 실행이 해당 오류 메시지와 함께 이벤트로 기록되며, 정의된 이벤트 테이블을 쿼리하여 확인할 수 있습니다. 이벤트 테이블 및 로그 수준 설정에 대한 자세한 내용은 이벤트 테이블 개요 섹션을 참조하세요.

예:

SELECT
  TIMESTAMP,
  RESOURCE_ATTRIBUTES:"snow.executable.name" ::STRING AS PROJECT_NAME,
  CASE
    WHEN RESOURCE_ATTRIBUTES:"snow.project.dcm.execution.command" ::STRING = 'plan' THEN 'PLAN'
    WHEN RESOURCE_ATTRIBUTES:"snow.project.dcm.execution.command" ::STRING = 'deploy' THEN 'DEPLOY'
    ELSE RESOURCE_ATTRIBUTES:"snow.project.dcm.execution.command" ::STRING
  END AS COMMAND,
  CASE
    WHEN VALUE:"state" ::STRING = 'SUCCEEDED' THEN 'SUCCEEDED'
    WHEN VALUE:"state" ::STRING = 'FAILED' THEN 'FAILED'
    ELSE VALUE:"state" ::STRING
  END AS STATUS,
  COALESCE(
    CONCAT('Error message: ',VALUE:"message"::STRING),
    VALUE:"operation"::STRING)
  AS OPERATIONS,
  RESOURCE_ATTRIBUTES:"snow.session.role.primary.name" ::STRING AS ROLE,
  RESOURCE_ATTRIBUTES:"db.user" ::STRING AS USER_NAME,
  RECORD:"severity_text" ::STRING AS SEVERITY
FROM
  SNOWFLAKE.TELEMETRY.EVENTS
WHERE
  RESOURCE_ATTRIBUTES:"snow.executable.type" ::STRING = 'DCM_PROJECT'
ORDER BY
  TIMESTAMP DESC
LIMIT
  250;