アプリのイベントトレースを設定する

このトピックでは、アプリによって生成されたログメッセージとトレースイベントをキャプチャするために、イベントトレースの使用を設定する方法について説明します。また、イベント共有を有効にして、プロバイダーとログメッセージやトレースイベントを共有する方法についても説明します。

Snowflake Native App Framework でのイベントトレースについて

イベントトレースを使用すると、アプリはパフォーマンスと動作に関連する情報を出力できます。 Snowflake Native App Framework は、この情報を収集するためにSnowflake ログおよびトレース 機能の使用をサポートしています。アプリは次を出力できます。

  • アプリ内の特定の機能の状態に関する情報を含む、独立した詳細なメッセージのログメッセージ。

  • アプリの複数の部分にまたがる情報やグループ化された情報を取得するために使用できる、構造化データを使用したトレースイベント。

  • Snowflakeが生成する CPU とメモリメトリクスを含むメトリクスデータ。

アプリのログメッセージ、トレースイベント、メトリクスの表示

アプリが発行するログメッセージやトレースイベントを表示するには、コンシューマーは自分のアカウントでイベントテーブルを設定し、これらの情報を収集する必要があります。詳細については、 イベントテーブルの設定 をご参照ください。

イベント共有について

コンシューマーは、イベント共有を有効にして、イベントデータをプロバイダーと共有することもできます。プロバイダーがイベント共有を有効にすると、コンシューマーアカウントのイベントテーブルに挿入されるログメッセージとトレースイベントが、プロバイダーアカウントのイベントテーブルにも挿入されます。

イベント共有により、プロバイダーはアプリのパフォーマンスと動作に関する情報を収集できます。詳細については、 アプリのイベント共有について をご参照ください。

イベント定義について

イベント定義は、アプリがプロバイダーとログメッセージやトレースイベントを共有する方法を指定します。イベント定義は、プロバイダーによって設定されたログメッセージおよびトレースイベントレベルのフィルターとして機能します。プロバイダーは、新しいバージョンまたはパッチが公開されたときにアプリのイベント定義を指定します。

注釈

イベント定義は必須ではありません。プロバイダーがアプリのイベント定義を指定しない場合、コンシューマーは必要に応じてイベント共有を有効または無効にできます。

プロバイダーは、イベント定義を必須またはオプションに設定できます。

  • アプリがインストールされると、必要なイベント定義が自動的に有効になります。アプリによって発行されたイベント定義を収集するには、コンシューマーはイベントテーブルを作成し、それを自分のアカウントのアクティブなイベントテーブルとして設定する必要があります。

  • オプションのイベント定義は、必要に応じてコンシューマーが有効化または無効化できます。オプションのイベント定義にはアクティブなイベントテーブルが必要ですが、アプリのインストールや使用には必要ありません。

注意

イベント定義は、プロバイダーによって設定されたログおよびトレースレベルと同じではありません。ログおよびトレースレベルによって、コンシューマーイベントテーブルに挿入される情報が決まります。

イベント定義は、ログメッセージとトレースイベントに作用するフィルターです。これらは、イベント共有が有効になっているときに、プロバイダーイベントテーブルに挿入される情報を決定します。

サポートされるイベント定義

次の表に、現在サポートされているイベント定義を示します。

名前

説明

フィルター

All

SNOWFLAKE$ALL

アプリが発行するすべてのログメッセージとトレースイベントを共有します。

*

Errors and warnings

SNOWFLAKE$ERRORS_AND_WARNINGS

エラー、警告、致命的なイベントに関連するログを共有します。

RECORD_TYPE = ‘LOG’ AND RECORD:severity_text in (‘FATAL’, ‘ERROR’, ‘WARN’)

Metrics

SNOWFLAKE$METRICS

Snowflakeが生成する CPU とメモリメトリクスを共有します。

RECORD_TYPE = ‘LOG’ AND RECORD:severity_text in ('ALWAYS', 'ON_EVENT', 'OFF')

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 となります。

アプリのイベントトレースを設定するワークフロー

次のワークフローでは、アプリのイベントトレースを設定する方法について説明します。

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

  2. イベントテーブルを設定します

  3. アプリに構成されたログとトレースイベントレベルを表示します

  4. イベントテーブルでイベントを表示します

  5. アプリでイベント共有を有効にします

イベントトレースを使用する際の考慮事項

アプリのイベントトレースを設定する前に、次の点を考慮する必要があります。

  • この機能には、 アカウントでイベントテーブルを設定する 必要があります。

  • イベント共有を有効にする と、トレースイベントとログメッセージのマスクおよび編集されたコピーが、指定されたプロバイダーアカウントのイベントテーブルに自動的に挿入されます。

  • Snowflakeでは、イベント共有を有効にするために料金を請求することはありません。ただし、イベントテーブルにトレースイベントとログメッセージをインジェストするコストと、イベントテーブルのストレージコストはユーザーの負担となります。

  • プロバイダーとのイベント共有を有効にした後に、共有トレースイベントとログメッセージへのアクセスを取り消すことはできません。

  • イベント共有を使用して履歴イベントを共有することはできません。

  • Snowflakeは、共有イベントをご使用のアカウントと同じリージョン内の指定プロバイダーアカウントに送信します。この機能は、異なるリージョン間ではデータを共有しません。

  • アプリのログレベルやトレースレベルは変更できません。アプリのプロバイダーは、アプリを公開するときにこれらのレベルを設定します。

  • Snowflakeでは、イベント共有を有効にする前に、イベントテーブル内のトレースイベントとログメッセージを確認することをお勧めします。

  • Snowflakeは、アプリのトラブルシューティングを実行する必要がない場合には、イベントの共有を無効にすることをお勧めします。

イベントテーブルの設定

アプリによって発行されたログメッセージを収集し、イベントをトレースするには、コンシューマーは情報を保存するイベントテーブルを作成する必要があります。

注釈

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

プロバイダーがアプリに必要なイベント定義を含める場合、インストール時にデフォルトで有効になります。ただし、コンシューマーにアクティブなイベントテーブルがない場合、アプリによって発行されたログメッセージとトレースイベントは破棄されます。

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

イベントテーブルを作成するには、次の例に示すように CREATE EVENT TABLE コマンドを実行します。

CREATE EVENT TABLE event_db.event_schema.my_event_table;
Copy

このコマンドは、イベントテーブルを含むデータベースとスキーマを指定することに注意してください。

イベントテーブルを作成した後、 ALTER ACCOUNT コマンドを使用して、イベントテーブルがアカウントのアクティブテーブルであることを指定します。

ALTER ACCOUNT SET EVENT_TABLE=event_db.event_schema.my_event_table;
Copy

アプリのイベント共有を有効にする

Snowflake Native App Framework は、コンシューマーイベントテーブルに保存されているログメッセージとトレースイベントをアプリプロバイダーと共有することをサポートします。ログとイベント情報をプロバイダーと共有するには、コンシューマーがアプリのイベント共有を有効にする必要があります。

アプリのイベント共有を有効にするための前提条件

アプリインスタンスのイベント共有を有効にするには、以下の前提条件を満たす必要があります。

Snowsight を使用してイベント共有を有効にする

注釈

プロバイダーがアプリに必要な イベント定義 を組み込んでいる場合、イベント共有と必要なイベント定義はインストール中に有効になり、後で無効にすることはできません。

  1. Snowsight にサインインします。

  2. ナビゲーションメニューで Data Products » Apps を選択します。

  3. アプリを選択します。

  4. ツールバーの Settings アイコンを選択します。

  5. Events and logs タブを選択します。

  6. Events and logs sharing エリアの基になる、キャプチャしたいイベントのスライダーを動かします。

  7. プロバイダーがアプリのイベント定義を定義している場合:

    1. スライダーを使用してオプションのイベント定義を有効にします。デフォルトでは、すべてのイベントタイプが有効になっています。

    2. Save を選択します。

  8. イベントテーブルが選択されていない場合は、 Event table location のリストからイベントテーブルを選択します。

    注意

    Snowsight のイベントテーブルを変更する際はご注意ください。各Snowflakeアカウントは、アカウント内で生成されたすべてのイベントに対して単一のイベントテーブルを使用します。イベントテーブルを変更すると、そのアカウントで生成されたすべてのイベントが新しい場所に保存されます。

SQL を使用してイベント共有を有効にする

  1. アプリのイベント定義を決定するには、 SHOW TELEMETRY EVENT DEFINITIONS コマンドを使用します。

    SHOW TELEMETRY EVENT DEFINITIONS IN APPLICATION hello_snowflake;
    
    Copy

    プロバイダーがイベント定義を使用するようにアプリを構成しなかった場合、 type 列に ALL と表示されます。それ以外の場合、このコマンドはアプリに指定されたオプションのイベント定義を一覧表示します。

  2. アプリに必要なイベント定義が含まれている場合は、 ALTER APPLICATION コマンドを使用して有効にします。

    ALTER APPLICATION hello_snowflake SET AUTHORIZE_TELEMETRY_EVENT_SHARING=true
    
    Copy

    このコマンドは、必須のイベント定義をすべて有効にしますが、オプションのイベント定義は有効にしません。

    注釈

    アプリに必要なイベント定義を有効にした後は、イベント共有を無効にすることはできません。

  3. アプリにオプションイベント定義が含まれている場合、次の例に示すように、 ALTER APPLICATION を使用してそれらを有効にします。

    ALTER APPLICATION hello_snowflake SET SHARED TELEMETRY EVENTS ('SNOWFLAKE$TRACES', 'SNOWFLAKE$DEBUG_LOGS');
    
    Copy

    この例では、 SNOWFLAKE$TRACESSNOWFLAKE$DEBUG_LOGSSHOW TELEMETRY EVENT DEFINITIONS コマンドの出力に基づき、有効にしています。

  4. イベントのトレースとログが有効になっていることを確認するには、 DESCRIBE APPLICATION コマンドを使用します。

    DESC APPLICATION hello_snowflake;
    
    Copy

    出力の 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;
Copy

アプリのイベント共有ステータスを表示するには、次の例のように DESCRIBE APPLICATION コマンドを使用します。

DESC APPLICATION HelloSnowflake;
Copy

SHARE_EVENTS_WITH_PROVIDER は、アプリのイベント共有のステータスを示します。

アップグレード時にイベント定義を有効にする

アップグレード時に、イベント定義は次のように動作します。

イベント定義の変更

アップグレード時の動作

イベント定義の変更なし

イベント定義は、以前のバージョンまたはパッチと同じステータスを保持します。

新しいイベント定義

自動では有効になりません。これは、必須およびオプションの両方のイベント定義にあてはまります。コンシューマーは新しいイベント定義を手動で有効にする必要があります。

必須からオプションへ、またはオプションから必須への変更

イベント定義は、以前のバージョンまたはパッチと同じステータスを保持します。

削除されたイベント定義

以前のバージョンまたはパッチのログメッセージまたはトレースイベントフィルターのアップグレード後、イベント共有が停止します。

アップグレード時に、コンシューマーは以前のパッチまたはバージョンからのイベント定義の変更を確認するように求められます。

イベントテーブルでログメッセージとトレースイベントを表示する

イベントテーブルが有効になっている場合、コンシューマーはイベントテーブルをクエリして、アプリによって生成されたログメッセージやトレースイベントを見ることができます。

イベントログメッセージとトレースイベントを表示するには、 Snowsight を使用します。

  1. Snowsight にサインインします。

  2. ナビゲーションメニューで Data Products » Apps を選択します。

  3. アプリを選択します。

  4. ツールバーで、 Settings を選択します。

  5. App events タブを選択します。

  6. Event logging セクションで、 View logs を選択します。

新しいワークシートが開き、アプリのログメッセージとトレースイベントを表示する SELECT ステートメントがあらかじめ入力されています。

イベントログメッセージとトレースイベントを表示するには、 SQL を使用します。

次の例に示すように、イベントログメッセージとトレースイベントをクエリするには、 SELECT コマンドを使用します。

SELECT
  TIMESTAMP as time,
  RESOURCE_ATTRIBUTES['snow.executable.name'] as executable,
  RECORD['severity_text'] as severity,
  VALUE as message
FROM
  "EVENT_LOG"."PUBLIC"."CONSUMER_EVENT_TABLE"
WHERE RESOURCE_ATTRIBUTES['snow.application.name'] = 'YOUR_APP_NAME'
Copy

このコマンドは、 YOUR_APP_NAME というアプリのイベントテーブル CONSUMER_EVENT_TABLE に保存されているログメッセージとトレースイベントをすべて返します。

ログメッセージまたはトレースイベントがプロバイダーと共有されているかどうかを判断する

RECORD_ATTRIBUTES 列には snow.application.shared フィールドが含まれます。このフィールドの値が TRUE の場合、ログメッセージまたはトレースイベントはプロバイダーと共有されます。それ以外の場合は、ログメッセージまたはイベントは共有されません。

アプリのログとトレースのレベルを表示する

アプリのログとトレースのレベルは、アプリを公開する前にプロバイダーによって定義されます。コンシューマーは、アプリのログとトレースのレベルを変更できません。

ただし、アプリにイベントトレースを設定したり、イベント共有を有効にしたりする前に、ログレベルを検証して、収集されプロバイダーと共有される情報のタイプを理解することをSnowflakeは推奨します。

アプリのログとトレースレベルを表示するには、次のコマンドを実行します。

DESC APPLICATION HelloSnowflake;
Copy

このコマンドは、アプリに設定されたログとトレースレベルに関する次の情報を含む、 HelloSnowflake アプリに関する情報を表示します。

  • log_level:プロバイダーによってセットされたログレベル。

  • trace_level:プロバイダーによってセットされたトレースレベル。

  • metric_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 になります。