|dcm|のモニターとトラブルシューティング

このトピックでは、DCMのデプロイメントをモニターし、失敗したDCMプランのトラブルシューティングを行う方法について説明します。

|dcm-object|のトラブルシューティング

|dcm-object|に不慣れな場合、設定ミスやその他の一般的な落とし穴からエラーが発生する可能性があります。このセクションでは、これらのエラーとその解決方法について説明します。

エラーの一般的な原因

次の表に、|dcm-object|の実行におけるエラーの一般的な原因を示します。

エラーカテゴリ

一般的な原因

セカンダリロール

  • ユーザーがDCMコマンドの実行時に無意識にセカンダリロールの権限を利用するため、一貫性のない動作が発生します。

不十分なロール権限

  • 定義されたオブジェクト型を作成するためのロール権限の不足

  • 別のロールが所有している既存のオブジェクトを変更またはドロップするためのロール権限の不足

  • システムDMFsを使用するためのロール権限の不足

  • 作成時に動的テーブルをリフレッシュするためにウェアハウスを実行するためのロール権限の不足

Jinjaのレンダリングの問題

  • 正しくないJinja構文によるJinjaのレンダリングの問題

  • Jinjaのレンダリングにおける値型の不一致による問題

プロジェクトの問題

  • 正しくないマニフェストパス

  • 空の定義フォルダ

  • 間違ったリポジトリブランチにある古い定義ファイル

  • 別の|dcm-object|によってすでにデプロイされているオブジェクト

  • 一致しないプロジェクトとオブジェクトの参照

|dcm-object|のデプロイメントのモニターと監査

|dcm|は、アカウントインフラストラクチャへのすべての変更に対する完全な透過性と監査トレースを提供するように設計されています。これには、インフラストラクチャのデプロイメントプロセスを設定するための、ソフトウェア開発のいくつかのベストプラクティスに従う必要があります。詳細については、 |dcm-object|デプロイの自動化 をご参照ください。

以下のソースを使用して、以前のデプロイメントを確認します。

  • |dcm-object|内に格納された:ref:label-dcm_projects_deployment_artifacts

  • デプロイ履歴

  • |dcm-object|からの:ref:`label-dcm_projects_event_logging`(ログレベルの設定による)

デプロイメントアーティファクト

実行されたすべてのデプロイメントに対して、デプロイメントアーティファクトの不変スナップショットが次の情報とともに|dcm-object|内に保存されます。

  • マニフェストファイル(manifest.yml

  • sources`フォルダ内のすべてのオブジェクト定義とマクロファイル(:file:.sql`ファイル)

  • PLAN操作(plan_result.json)およびDEPLOY操作(deploy_result.json)の出力。以下を含みます。

    • このデプロイメントで使用されるテンプレート変数

    • タイムスタンプ、オブジェクト名、クエリIDなどのデプロイメントメタデータ

    • 変更セット

この完全なセットにより、定義された状態のデバッグ、監査、または再デプロイのために、すべてのデプロイメントアクションを再現できるようになります。

次のコマンドは、|dcm-object|の監視と監査に使用できます。

  • MONITOR権限により、次を実行できます。

    • |dcm-object|内に格納されているすべてのデプロイメントをリストする。

    • 指定されたデプロイメント内のすべてのファイルをリストする。

    • そのデプロイメント内の特定のファイルを読み取り、コピー、またはダウンロードする。

  • OWNERSHIP権限により、機密データが含まれている場合は手動でデプロイメントをドロップできます。

  • READ権限により、DESCRIBEコマンドを実行して、選択した|dcm-object|の最新のデプロイメント名、エイリアス、およびタイムスタンプを表示できます。

コマンドの例:

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-object|の成功したデプロイメントと失敗したデプロイメントを確認できるようにします。

引数``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-object|オブジェクトに優先するLOG_LEVELを設定するか、親スキーマ、データベース、またはアカウントから定義済みのLOG_LEVELを継承できます。

|dcm-object|のLOG_LEVELが設定されている場合、失敗したPLANおよびDEPLOYの実行は対応するエラーメッセージとともにイベントとしてログに記録され、定義されたイベントテーブルをクエリすることでそれらを確認できます。イベントテーブルとログレベルの設定について詳しくは、:doc:`/developer-guide/logging-tracing/event-table-setting-up`を参照してください。

例:

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;