アプリのイベントトレースを設定する¶
このトピックでは、アプリによって生成されたログメッセージとトレースイベントをキャプチャするために、イベントトレースの使用を設定する方法について説明します。また、イベント共有を有効にして、プロバイダーとログメッセージやトレースイベントを共有する方法についても説明します。
Snowflake Native App Framework でのイベントトレースについて¶
イベントトレースを使用すると、アプリはパフォーマンスと動作に関連する情報を出力できます。 Snowflake Native App Framework は、この情報を収集するためにSnowflakeの ログおよびトレース 機能の使用をサポートしています。アプリは次を出力できます。
アプリ内の特定の機能の状態に関する情報を含む、独立した詳細なメッセージのログメッセージ。
アプリの複数の部分にまたがる情報やグループ化された情報を取得するために使用できる、構造化データを使用したトレースイベント。
アプリのログメッセージとイベントの表示¶
アプリが発行するログメッセージやトレースイベントを表示するには、コンシューマーは自分のアカウントでイベントテーブルを設定し、これらの情報を収集する必要があります。詳細については、 イベントテーブルの設定 をご参照ください。
イベント共有について¶
コンシューマーは、イベント共有を有効にして、イベントデータをプロバイダーと共有することもできます。プロバイダーがイベント共有を有効にすると、コンシューマーアカウントのイベントテーブルに挿入されるログメッセージとトレースイベントが、プロバイダーアカウントのイベントテーブルにも挿入されます。
イベント共有により、プロバイダーはアプリのパフォーマンスと動作に関する情報を収集できます。詳細については、 アプリのイベント共有について をご参照ください。
イベント定義について¶
イベント定義は、アプリがプロバイダーとログメッセージやトレースイベントを共有する方法を指定します。イベント定義は、プロバイダーによって設定されたログメッセージおよびトレースイベントレベルのフィルターとして機能します。プロバイダーは、新しいバージョンまたはパッチが公開されたときにアプリのイベント定義を指定します。
注釈
イベント定義は必須ではありません。プロバイダーがアプリのイベント定義を指定しない場合、コンシューマーは必要に応じてイベント共有を有効または無効にできます。
プロバイダーは、イベント定義を必須またはオプションに設定できます。
アプリがインストールされると、必要なイベント定義が自動的に有効になります。アプリによって発行されたイベント定義を収集するには、コンシューマーはイベントテーブルを作成し、それを自分のアカウントのアクティブなイベントテーブルとして設定する必要があります。
オプションのイベント定義は、必要に応じてコンシューマーが有効化または無効化できます。オプションのイベント定義にはアクティブなイベントテーブルが必要ですが、アプリのインストールや使用には必要ありません。
注意
イベント定義は、プロバイダーによって設定されたログおよびトレースレベルと同じではありません。ログおよびトレースレベルによって、コンシューマーイベントテーブルに挿入される情報が決まります。
イベント定義は、ログメッセージとトレースイベントに作用するフィルターです。これらは、イベント共有が有効になっているときに、プロバイダーイベントテーブルに挿入される情報を決定します。
サポートされるイベント定義¶
次の表に、現在サポートされているイベント定義を示します。
型
名前
説明
フィルター
All
SNOWFLAKE$ALL
アプリが発行するすべてのログメッセージとトレースイベントを共有します。
*
Errors and warnings
SNOWFLAKE$ERRORS_AND_WARNINGS
エラー、警告、致命的なイベントに関連するログを共有します。
RECORD_TYPE = ‘LOG’ AND RECORD:severity_text in (‘FATAL’, ‘ERROR’, ‘WARN’)
Traces
SNOWFLAKE$TRACES
アプリケーション内のユーザーアクティビティと移動の詳細なトレースを共有します。
RECORD_TYPE in (‘SPAN’, ‘SPAN_EVENT’)
Usage logs
SNOWFLAKE$USAGE_LOGS
ユーザーアクションとアプリイベントに関連する高レベルのログを共有します。
RECORD_TYPE = LOG AND RECORD:severity_text = ‘INFO’
Debug logs
SNOWFLAKE$DEBUG_LOGS
アプリのトラブルシューティングに使用される技術ログを共有します。
RECORD_TYPE = ‘LOG’ AND RECORD:severity_text in (‘DEBUG’, ‘TRACE’)
注釈
プロバイダーがイベント定義を使用するようにアプリを構成していない場合、 Snowsight には All タイプのみが表示されます。
コンシューマーがイベント定義を使用する際の考慮事項¶
コンシューマーは既存の SHARE_EVENTS_WITH_PROVIDER プロパティを引き続き使用できますが、次の制限があります。
アプリが OPTIONALALL イベント定義のみを使用する場合、 SHARE_EVENTS_WITH_PROVIDER プロパティを
true
に設定するとイベント共有が有効になり、false
に設定するとイベント共有が無効になります。これは、プロバイダーがマニフェストファイルに OPTIONAL ALL イベント定義を明示的に追加した場合、またはアプリが既存のイベント共有機能から移行された場合に適用されます。
プロバイダーがマニフェストファイルに必須およびオプションのイベント定義を追加する場合、 SHARE_EVENTS_WITH_PROVIDER プロパティを
true
に設定すると、すべてのイベント定義が有効になります。対照的に、プロバイダーがオプションのイベント定義のみを追加する場合にのみ、 SHARE_EVENTS_WITH_PROVIDER プロパティをfalse
に設定できます。SHARE_EVENTS_WITH_PROVIDER は、すべてのイベント定義が有効になっている場合にのみ TRUE となり、それ以外の場合は FALSE となります。
アプリのイベントトレースを設定するワークフロー¶
次のワークフローでは、アプリのイベントトレースを設定する方法について説明します。
イベントトレースを使用する際の考慮事項¶
アプリのイベントトレースを設定する前に、次の点を考慮する必要があります。
この機能には、 アカウントでイベントテーブルを設定する 必要があります。
イベント共有を有効にする と、トレースイベントとログメッセージのマスクおよび編集されたコピーが、指定されたプロバイダーアカウントのイベントテーブルに自動的に挿入されます。
Snowflakeでは、イベント共有を有効にするために料金を請求することはありません。ただし、イベントテーブルにトレースイベントとログメッセージをインジェストするコストと、イベントテーブルのストレージコストはユーザーの負担となります。
プロバイダーとのイベント共有を有効にした後に、共有トレースイベントとログメッセージへのアクセスを取り消すことはできません。
イベント共有を使用して履歴イベントを共有することはできません。
Snowflakeは、共有イベントをご使用のアカウントと同じリージョン内の指定プロバイダーアカウントに送信します。この機能は、異なるリージョン間ではデータを共有しません。
アプリケーションのログまたはトレースレベルを変更することはできません。アプリのプロバイダーは、アプリを公開するときにこれらのレベルを設定します。
Snowflakeでは、イベント共有を有効にする前に、イベントテーブル内のトレースイベントとログメッセージを確認することをお勧めします。
Snowflakeは、アプリのトラブルシューティングを実行する必要がない場合には、イベントの共有を無効にすることをお勧めします。
イベントテーブルの設定¶
アプリによって発行されたログメッセージを収集し、イベントをトレースするには、コンシューマーは情報を保存するイベントテーブルを作成する必要があります。
注釈
コンシューマーがアプリをインストールする前にイベントテーブルを設定してアクティブイベントテーブルにしなかった場合、トレースイベントとログデータは破棄されます。
プロバイダーがアプリに必要なイベント定義を含める場合、インストール時にデフォルトで有効になります。ただし、コンシューマーにアクティブなイベントテーブルがない場合、アプリによって発行されたログメッセージとトレースイベントは破棄されます。
アカウントは複数のイベントテーブルを持つことができますが、一度にSnowflakeアカウントのアクティブなイベントテーブルとして設定できるのは1つだけです。アクティブなイベントテーブルがないと、アプリが発行するログメッセージとトレースイベントはキャプチャされません。これは、アプリの関数やプロシージャがログやトレースイベント APIs を直接呼び出す場合でも同じです。
イベントテーブルを作成するには、次の例に示すように CREATE EVENT TABLE コマンドを実行します。
CREATE EVENT TABLE event_db.event_schema.my_event_table;
このコマンドは、イベントテーブルを含むデータベースとスキーマを指定することに注意してください。
イベントテーブルを作成した後、 ALTER ACCOUNT コマンドを使用して、イベントテーブルがアカウントのアクティブテーブルであることを指定します。
ALTER ACCOUNT SET EVENT_TABLE=event_db.event_schema.my_event_table;
アプリのイベント共有を有効にする¶
Snowflake Native App Framework は、コンシューマーイベントテーブルに保存されているログメッセージとトレースイベントをアプリプロバイダーと共有することをサポートします。ログとイベント情報をプロバイダーと共有するには、コンシューマーがアプリのイベント共有を有効にする必要があります。
アプリのイベント共有を有効にするための前提条件¶
アプリインスタンスのイベント共有を有効にするには、以下の前提条件を満たす必要があります。
MANAGE EVENT SHARING グローバル権限を持つロールを使用する。ACCOUNTADMIN ロールはデフォルトでこの権限を持っており、他のロールにこの権限を付与できる。
Snowsight を使用してイベント共有を有効にする¶
注釈
プロバイダーがアプリに必要な イベント定義 を組み込んでいる場合、イベント共有と必要なイベント定義はインストール中に有効になり、後で無効にすることはできません。
アプリのイベント共有を有効にするには、次を実行します。
Snowsight にサインインします。
ナビゲーションメニューで Data Products » Apps を選択します。
アプリを選択します。
ツールバーの Security アイコンを選択します。
Events and logs タブを選択します。
Events and logs sharing エリアで、 Enable を選択します。
プロバイダーがアプリのイベント定義を定義している場合:
スライダーを使用してオプションのイベント定義を有効にします。
Review を選択します。
イベントテーブルが選択されていない場合は、 Event table location のリストからイベントテーブルを選択します。
注意
Snowsight のイベントテーブルを変更する際はご注意ください。各Snowflakeアカウントは、アカウント内で生成されたすべてのイベントに対して単一のイベントテーブルを使用します。イベントテーブルを変更すると、そのアカウントで生成されたすべてのイベントが新しい場所に保存されます。
SQL を使用してイベント共有を有効にする¶
SQL を使用してアプリのイベント共有を有効にするには、次を実行します。
アプリのイベント定義を決定するには、次のように SHOW TELEMETRY EVENT DEFINITIONS コマンドを使用します。
SHOW TELEMETRY EVENT DEFINITIONS IN APPLICATION hello_snowflake;
プロバイダーがイベント定義を使用するようにアプリを構成しなかった場合、
type
列にALL
と表示されます。それ以外の場合、このコマンドはアプリに指定されたオプションのイベント定義を一覧表示します。アプリに必要なイベント定義が含まれている場合は、次のように ALTER APPLICATION コマンドを使用して有効にします。
ALTER APPLICATION hello_snowflake SET AUTHORIZE_TELEMETRY_EVENT_SHARING=true
このコマンドは、必須のイベント定義をすべて有効にしますが、オプションのイベント定義は有効にしません。
注釈
アプリに必要なイベント定義を有効にした後は、イベント共有を無効にすることはできません。
アプリにオプションイベント定義が含まれている場合、次の例に示すように、 ALTER APPLICATION を使用してそれらを有効にします。
ALTER APPLICATION hello_snowflake SET SHARED TELEMETRY EVENTS ('SNOWFLAKE$TRACES', 'SNOWFLAKE$DEBUG_LOGS');
この例では、 SHOW TELEMETRY EVENT DEFINITIONS コマンドの出力に基づき、
SNOWFLAKE$TRACES
とSNOWFLAKE$DEBUG_LOGS
を有効にしています。イベントのトレースとログが有効になっていることを確認するには、次のように DESC APPLICATION コマンドを使用します。
DESC APPLICATION hello_snowflake;
出力の
authorize_telemetry_event_sharing
行とshare_events_with_provider
行は、イベント共有が有効になっているかどうかを示します。
SQL (旧機能)を使用してイベント共有を有効にする¶
注意
このセクションで説明されている、 SQL を使用してイベント共有を有効にする方法は、将来のリリースでは非推奨となります。Snowflakeでは、 SQL を使用してログとイベント共有を有効にする に記載されている方法により、 SQL を使用してイベント共有を有効にすることをお勧めします。
アプリケのイベント共有を有効にするには、 ALTER APPLICATION コマンドを実行して、 SHARE_EVENTS_WITH_PROVIDER を TRUE
に設定します。例:
ALTER APPLICATION HelloSnowflake SET SHARE_EVENTS_WITH_PROVIDER = TRUE;
アプリのイベント共有ステータスを表示するには、次の例のように DESC APPLICATION コマンドを使用します。
DESC APPLICATION HelloSnowflake;
SHARE_EVENTS_WITH_PROVIDER
は、アプリのイベント共有のステータスを示します。
アップグレード時にイベント定義を有効にする¶
アップグレード時に、イベント定義は次のように動作します。
イベント定義の変更
アップグレード時の動作
イベント定義の変更なし
イベント定義は、以前のバージョンまたはパッチと同じステータスを保持します。
新しいイベント定義
自動では有効になりません。これは、必須およびオプションの両方のイベント定義にあてはまります。コンシューマーは新しいイベント定義を手動で有効にする必要があります。
必須からオプションへ、またはオプションから必須への変更
イベント定義は、以前のバージョンまたはパッチと同じステータスを保持します。
削除されたイベント定義
以前のバージョンまたはパッチのログメッセージまたはトレースイベントフィルターのアップグレード後、イベント共有が停止します。
アップグレード時に、コンシューマーは以前のパッチまたはバージョンからのイベント定義の変更を確認するように求められます。
イベントテーブルでログメッセージとトレースイベントを表示する¶
イベントテーブルが有効になっている場合、コンシューマーはイベントテーブルをクエリして、アプリによって発行されたログメッセージやトレースイベントを表示できます。イベントテーブルをクエリするには、 SELECT コマンドを使用します。
SELECT * FROM event_db.event_schema.my_event_table;
このコマンドは、イベントテーブルに保存されているすべてのログメッセージとトレースイベントを返します。
アプリのログとトレースのレベルを表示する¶
アプリのログとトレースのレベルは、アプリを公開する前にプロバイダーによって定義されます。コンシューマーは、アプリのログとトレースのレベルを変更できません。
ただし、アプリにイベントトレースを設定したり、イベント共有を有効にしたりする前に、ログレベルを検証して、収集されプロバイダーと共有される情報のタイプを理解することをSnowflakeは推奨します。
アプリのログとトレースレベルを表示するには、次のコマンドを実行します。
DESC APPLICATION HelloSnowflake;
このコマンドは、アプリに設定されたログとトレースレベルに関する次の情報を含む、 HelloSnowflake
アプリに関する情報を表示します。
log_level: マニフェストファイルでプロバイダーによって定義されたログレベル。
trace_level: マニフェストファイルでプロバイダーによって定義されたトレースレベル。
effective_log_level: アプリで有効なログレベル。
effective_trace_level: アプリで有効なトレースレベル。
有効なログおよびトレースレベルは、コンシューマーがアプリに対して有効にするイベント定義に応じて決定されます。
たとえば、プロバイダーがログレベルを OFF と定義し、コンシューマーが ERROR_AND_WARNING イベント定義を有効にしている場合、アプリは動的にログレベルを WARN に変更し、 ERROR_AND_WARNING イベントを収集できるようになります。アプリは、 WARN と同等かそれ以下の詳細なイベントを発行し、それらのエラーおよび警告イベントをプロバイダーと共有します。log_levelの値は OFF となり、effective_log_levelの値は WARN となります。
対照的に、プロバイダーがログレベルを TRACE と定義し、コンシューマーが ERROR_AND_WARNING イベント定義を有効にしている場合、アプリはトレースと同等かそれ以下の詳細なイベントを出力しますが、エラーメッセージと警告メッセージのみがプロバイダーと共有されます。log_levelとeffective_log_levelの両方の値は TRACE になります。