以前のログおよびイベント共有機能 --- 廃止予定¶
このトピックでは、イベント定義が導入される前の、ログとイベント共有をセットアップするための非推奨の方法について説明します。
ログおよびイベント共有を設定するプロバイダーは、 アプリのロギングとイベントトレースを設定する で説明されている方法を使用します。非推奨から新しいログおよびイベント共有機能への移行については、 以前のイベント共有機能から移行する際の注意点 をご参照ください。
警告
このトピックで説明されているログおよびイベント共有の設定プロセスは、将来のリリースでは廃止される予定です。
これまでのログおよびイベント共有機能¶
このトピックでは、プロバイダーとしてのログおよびイベント共有の設定に関する情報を提供します。この機能を構成するためのコンシューマーの要件については、 アプリケーションのログおよびイベント共有の有効化 をご参照ください。
ログとトレースイベントは、エラーをトラブルシューティングするための、アプリケーションに関する情報を収集することができます。ログとトレースイベントを使用すると、アプリケーションがどのように動作しているかをよりよく把握し、後でアプリケーションを改善することもできます。
プロバイダーとしてログおよびイベント共有を設定するワークフロー¶
プロバイダーとして、アプリケーションのログとイベント共有を設定するには、以下を実行します。
共有イベントを保存するアカウントを構成 します。
コンシューマーがアプリケーションをインストールし、ログとイベントの共有を有効にすると、インストールされたアプリケーションによって共有されるログとイベント情報を表示できます。
ログとトレースレベルを表示 します。
イベントテーブルでログとイベントを表示 します。
ログおよびイベント共有の使用に関する考慮事項¶
アプリケーションにログおよびイベント共有を使用する前に、プロバイダーは以下を考慮する必要があります。
プロバイダーは、データインジェスチョンやストレージなど、プロバイダー側でのイベント共有に関連するすべてのコストを負担します。
プロバイダーは、イベント共有をサポートする各リージョンで、 共有イベントを保存するためのアカウント を持っている必要があります。
プロバイダーは、マニフェストファイルで、アプリケーションのデフォルトのログレベルとトレースレベルを定義する必要があります。
注釈
イベント共有は、ベースとなるアプリケーションパッケージと同じアカウントにインストールされているアプリでは有効にできません。アプリのイベント共有をテストするには、プロバイダーは複数のアカウントを使用する必要があります。
関数およびプロシージャでログおよびトレースイベントを構成する¶
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
プロバイダーがトレースを有効にすると、 Snowflake Native App はすべてのクエリとストアドプロシージャ呼び出しの開始時刻と終了時刻を自動的にキャプチャします。
注釈
trace_level
プロパティが OFF
以外の値に設定された Snowflake Native App を公開すると、イベントテーブルを表示できるコンシューマーアカウントのすべてのユーザーに、非表示のストアドプロシージャへの呼び出しが公開される可能性があります。
trace_level
および log_level
でサポートされる値については、 ロギング、メトリクス、トレースのレベル設定 および ロギング、メトリクス、トレースのレベル設定 をご参照ください。
Snowflake Native App が最初にインストールされると、マニフェストファイルで定義されたログレベルが使用されます。その後のアップグレードでログレベルが変更された場合、新しいログレベルはアップグレード処理の完了後に有効になります。
ログレベルおよびトレースレベルは、マニフェストファイル内でのみ設定できます。コンシューマーは、 ALTER APPLICATION または ALTER DATABASE コマンドを使用してログレベルを変更することはできません。
同様に、ログレベルに対するセッションレベル設定は、アプリケーションによって無視されます。
アプリケーションパッケージで定義されたログレベルおよびトレースイベントレベルを表示する¶
インストールされているアプリケーションのログレベルを表示するには、次のコマンドに示すように DESCRIBE APPLICATION コマンドを使用します。
DESC APPLICATION HelloSnowflake;
次の例に示すように、アプリケーションパッケージで定義されたアプリケーションバージョンのログレベルを表示するには、 SHOW VERSIONS コマンドを使用します。
SHOW VERSIONS
IN APPLICATION PACKAGE HelloSnowflake;
イベントテーブルでログおよびイベントを表示する¶
イベントテーブルに格納されたログとイベントを表示するには、次の例に示すように、 SELECT コマンドを使用します。
SELECT * FROM EVENT_DB.EVENT_SCHEMA.MY_EVENT_TABLE
コンシューマーアカウントでイベント共有が有効になっているかどうかを確認する¶
状況によっては、プロバイダーは、コンシューマーアカウントでイベント共有が有効になっているかどうかを判断する必要があります。たとえば、イベントテーブルが利用できない場合、プロバイダーはアプリの機能を無効にする必要がある場合があります。
コンシューマーアカウントでイベント共有が有効になっているかどうかを判断するために、プロバイダーはアプリロジックを定義するときに次のシステム関数を呼び出すことができます。
IS_APPLICATION_SHARING_EVENTS_WITH_PROVIDER
アプリがイベント共有を有効にし、アクティブなイベントテーブルがコンシューマーアカウントで利用可能な場合は TRUE を返します。それ以外の場合は FALSE を返します。
IS_APPLICATION_INSTALLED_FROM_SAME_ACCOUNT
アプリが、そのベースとなるアプリケーションパッケージと同じアカウントにインストールされている場合は TRUE を返します。それ以外の場合は FALSE を返します。
注釈
これらのシステム関数はアプリ内からのみ呼び出すことができます。 Python Permission SDK を使用してイベント共有が有効になっているかどうかを確認する、および SQL を使用してイベント共有が有効になっているかどうかを確認する をご参照ください。
Python Permission SDK を使用してイベント共有が有効になっているかどうかを確認する¶
Python Permission SDK は、コンシューマーアカウントで共有が有効になっているかどうかを判断するために、次の機能を提供します。
is_event_sharing_enabled()
SHARE_EVENTS_WITH_PROVIDER プロパティがtrueであり、コンシューマーアカウントにアクティブなイベントテーブルが構成されている場合は TRUE を返します。それ以外の場合は FALSE を返します。
is_application_local_to_package()
アプリケーションがアプリケーションパッケージと同じアカウントにある場合は TRUE を返します。それ以外の場合は FALSE を返します。
SQL を使用してイベント共有が有効になっているかどうかを確認する¶
次の例は、コンシューマーアカウントでイベント共有が有効になっている場合にストアドプロシージャを呼び出す方法を示しています。
2つの数値の合計を計算する関数を作成する次の SQL ストアドプロシージャについて考えます。
CREATE OR ALTER VERSIONED SCHEMA app_schema;
CREATE OR REPLACE PROCEDURE app_schema.hidden_sum(num1 float, num2 float)
RETURNS FLOAT
LANGUAGE SQL
EXECUTE AS OWNER
AS $$
DECLARE
SUM FLOAT;
BEGIN
SYSTEM$LOG('INFO', 'CALCULATE THE SUM OF TWO NUMBERS');
SUM := :NUM1 + :NUM2;
RETURN SUM;
END;
$$;
これらの SQL コマンドをアプリのセットアップスクリプトに追加すると、アプリのインストール時にコンシューマーアカウントに hidden_sum
ストアドプロシージャが作成されます。ただし、このストアドプロシージャは、アプリケーションロールにストアドプロシージャに対する USAGE 権限が付与されていないため、コンシューマーには表示されません。
次の例は、 IS_APPLICATION_SHARING_EVENTS_WITH_PROVIDER および IS_APPLICATION_INSTALLED_FROM_SAME_ACCOUNT システム関数が返す値を使用して、 hidden_sum
ストアドプロシージャを呼び出す方法を示しています。
CREATE OR REPLACE PROCEDURE app_schema.sum(num1 float, num2 float)
RETURNS STRING
LANGUAGE SQL
EXECUTE AS OWNER
AS $$
BEGIN
IF (SYSTEM$IS_APPLICATION_INSTALLED_FROM_SAME_ACCOUNT() or SYSTEM$IS_APPLICATION_SHARING_EVENTS_WITH_PROVIDER()) THEN
CALL APP_SCHEMA.HIDDEN_SUM(:NUM1, :NUM2);
ELSE
-- notify consumers that they need to enable event sharing
RETURN 'Sorry you can\'t access the API, please enable event sharing.';
END IF;
END;
$$;
CREATE APPLICATION ROLE IF NOT EXISTS ADMIN_ROLE;
GRANT USAGE ON SCHEMA APP_SCHEMA TO APPLICATION ROLE ADMIN_ROLE;
この例では、 sum
ストアドプロシージャは、 IS_APPLICATION_SHARING_EVENTS_WITH_PROVIDER および IS_APPLICATION_INSTALLED_FROM_SAME_ACCOUNT ストアドプロシージャの値をテストします。それらの値の1つが true
の場合、 sum
ストアドプロシージャは hidden_sum
ストアドプロシージャを呼び出します。
Python Permission SDK を使用してコンシューマーにイベント共有をリクエストする¶
プロバイダーは、 Python Permission SDK を使用してStreamlitアプリを作成し、コンシューマーに自分のアカウントでイベント共有を有効にするよう促すことができます。
SDK は、コンシューマーにアカウントでイベント共有を有効にするように求めるダイアログを Snowsight に表示する request_event_sharing()
メソッドを提供します。コンシューマーアカウントにイベントテーブルが存在しない場合は、ダイアログで、コンシューマーが ACCOUNTADMIN ロールを使用している場合にイベントテーブルを設定できます。
例: Python Permission SDK とイベントテーブルを使用する¶
次のStreamlitの例では、 Python Permission SDK を使用して次の操作を実行する方法を示しています。
イベント共有が有効になっているかどうかを確認します。
イベント共有が有効な場合は、
critical_feature_that_requires_event_sharing()
関数を呼び出します。イベント共有が有効になっていない場合は、
request_event_sharing()
関数を呼び出して、コンシューマーにイベント共有を有効にするように求めるダイアログを Snowsight に表示します。
import streamlit as st
import snowflake.permissions as permissions
def critical_feature_that_requires_event_sharing():
st.write("critical_feature_that_requires_event_sharing")
def main():
if permissions.is_event_sharing_enabled() or permissions.is_application_local_to_package():
critical_feature_that_requires_event_sharing()
else:
permissions.request_event_sharing()
if __name__ == "__main__":
main()
この例では、 critical_feature_that_requires_event_sharing()
メソッドは次のいずれかが当てはまる場合にのみ呼び出されます。
イベント共有が有効になっており、イベントテーブルが存在する。
Snowflake Native App がアプリケーションパッケージと同じアカウントにインストールされている。
どちらの条件も真でない場合、Streamlitアプリは request_event_sharing()
メソッドを呼び出し、コンシューマにイベントテーブルの選択を促します。
詳細については、 コンシューマーアカウントでイベント共有が有効になっているかどうかを確認する をご参照ください。