アプリケーション用ログおよびイベント共有を設定する

このトピックでは、インストールされたアプリケーションのトラブルシューティングのためにログとイベント共有を設定する方法について説明します。

このトピックでは、プロバイダーとしてのログおよびイベント共有の設定に関する情報を提供します。この機能を構成するためのコンシューマーの要件については、 アプリケーションのログおよびイベント共有の有効化 をご参照ください。

ログとトレースイベントは、エラーをトラブルシューティングするための、アプリケーションに関する情報を収集することができます。ログとトレースイベントを使用すると、アプリケーションがどのように動作しているかをよりよく把握し、後でアプリケーションを改善することもできます。

プロバイダーとしてログおよびイベント共有を設定するワークフロー

プロバイダーとして、アプリケーションのログとイベント共有を設定するには、以下を実行します。

  1. ログとイベント共有を使用する際の考慮事項を確認 します。

  2. 関数とストアドプロシージャのログとトレースイベントを構成 します。

  3. マニフェストファイルでログレベルとトレースレベルを設定 します。

  4. 共有イベントを保存するアカウントを構成 します。

コンシューマーがアプリケーションをインストールし、ログとイベントの共有を有効にすると、インストールされたアプリケーションによって共有されるログとイベント情報を表示できます。

ログおよびイベント共有の使用に関する考慮事項

アプリケーションにログとイベント共有を使用する前に、以下を考慮する必要があります。

  • データインジェスチョンやストレージなど、プロバイダー側でのイベント共有に関連するコストはすべてお客様の負担となります。

  • イベント共有をサポートする各リージョンで、 共有イベントを保存するためのアカウント を持っている必要があります。

  • マニフェストファイルで、アプリケーションのデフォルトのログレベルとトレースレベルを定義する必要があります。

関数およびプロシージャでログおよびトレースイベントを構成する

Native Apps Frameworkには、アプリケーション内の関数やストアドプロシージャから生成されるログメッセージやトレースイベントを格納するためにイベントテーブルが必要です。

注釈

アプリケーションのコンシューマーが、アプリケーションをインストールする前にイベントテーブルを設定してアクティブテーブルにしない場合は、イベントとログのデータが破棄されます。

アカウントは複数のイベントテーブルを持つことができますが、一度にSnowflakeアカウントのアクティブなイベントテーブルとして設定できるのは1つだけです。アクティブなイベントテーブルがないと、アプリケーションによって生成されたログメッセージやトレースイベントはキャプチャされません。これは、アプリケーションの関数やプロシージャがログやトレースイベント APIs を呼び出す場合でも同じです。

イベントテーブルを作成するには、 CREATE EVENT TABLE コマンドを使用します。詳細については、 イベントテーブルの設定 をご参照ください。

コードがログメッセージとトレースイベントを記録した後に、記録されたデータをクエリできます。

ログとトレースデータの記録とクエリに関する情報については、以下をご参照ください。

マニフェストファイルでログレベルとトレースレベルを設定する

アプリケーションのバージョンに対してデフォルトのログおよびトレースイベントレベルを設定するには、次の例に示すように、マニフェストファイルで log_level および trace_level パラメーターを設定します。

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

プロバイダーがトレースを有効にすると、 Snowflake Native App はすべてのクエリとストアドプロシージャ呼び出しの開始時刻と終了時刻を自動的にキャプチャします。

注釈

trace_level プロパティが OFF 以外の値に設定された Snowflake Native App を公開すると、イベントテーブルを表示できるコンシューマーアカウントのすべてのユーザーに、非表示のストアドプロシージャへの呼び出しが公開される可能性があります。

trace_level および log_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

アカウントがあるSnowflakeリージョンの名前(例: 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

アカウントがあるSnowflakeリージョンの名前(例: 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.name および snow.query.id フィールドをプロバイダーと直接共有する代わりに、Snowflakeはこれら2つのフィールドのハッシュ値(SHA-1)を以下のフィールドとして共有します。

  • snow.database.hash

  • snow.query.hash

Snowflakeは、これらの属性をマスクするために使用される SHA-1関数 を提供します。コンシューマーは、データベース名とクエリIDのハッシュ値を計算し、プロバイダーに問い合わせる際の参照値として使用できます。