未処理の例外からのメッセージのキャプチャ¶
デフォルトでは、 イベントテーブルを設定 すると、Snowflakeは、未処理の例外をイベントテーブル内のプロシージャと UDF ハンドラーに自動でログします。これらのメッセージをキャプチャするために、ログやトレースに特化したハンドラーコードを追加する必要はありません。この機能を無効にすると、未処理の例外は自動的にはログされなくなります。
重要
エラーメッセージには機密情報が含まれていることがあります。機密性が高い可能性のある情報をイベントテーブルにキャプチャしないようにする場合は、この機能を無効にすることを検討してください。詳細については、 機密データの保護 をご参照ください。
注釈
この機能は現在、JavaまたはPythonのみで記述されたハンドラーコードに対してサポートされています。
未処理の例外をキャプチャするためのログとトレースの構成¶
Snowflakeが未処理の例外のエントリをキャプチャするように、ログまたはトレースレベルを設定します。エントリは、ログエントリ、トレースイベントエントリ、またはその両方としてキャプチャすることができます。
未処理の例外についてキャプチャされたデータ¶
メッセージデータをログエントリ、トレースイベント、またはその両方としてキャプチャすることができます。キャプチャされたデータは、ログエントリとトレースイベントエントリの間で異なります。
ログエントリでキャプチャされたデータ¶
デフォルトでは、Snowflakeはプロシージャおよび UDF ハンドラーで未処理の例外について、イベントテーブルに以下を記録します。
列 |
データ |
---|---|
|
|
次の属性が未処理の例外に対して記録されます。
|
|
文字列 |
例¶
次の例のコードは、 UDF ハンドラーからの未処理の例外に対して記録されたログデータをイベントテーブルにクエリします。
ログデータのイベントテーブルへのクエリの詳細については、 ログされたメッセージデータへのアクセス をご参照ください。
SET event_table_name = 'my_db.public.my_event_table';
SELECT
RECORD['severity_text'] AS severity,
RECORD_ATTRIBUTES['exception.message'] AS error_message,
RECORD_ATTRIBUTES['exception.type'] AS exception_type,
RECORD_ATTRIBUTES['exception.stacktrace'] AS stacktrace
FROM
my_event_table
WHERE
RECORD_TYPE = 'LOG';
クエリーからの可能な出力は次のようになります。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| SEVERITY | ERROR_MESSAGE | EXCEPTION_TYPE | STACKTRACE |
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| "FATAL" | "could not convert string to float: '$1,000,000.00'" | "ValueError" | "Traceback (most recent call last):\n File \"_udf_code.py\", line 6, in compute\nValueError: could not convert string to float: '$1,000,000.00'\n" |
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
トレースイベントエントリでキャプチャされたデータ¶
デフォルトでは、Snowflakeはプロシージャおよび UDF ハンドラーで未処理の例外について、イベントテーブルに以下を記録します。
列 |
データ |
---|---|
値が |
|
次の属性が未処理の例外に対して記録されます。
|
例¶
次の例のコードは、 UDF ハンドラーからの未処理の例外に対して記録されたトレースイベントをイベントテーブルにクエリします。
トレースイベントデータのイベントテーブルへのクエリの詳細については、 トレースデータへのアクセス をご参照ください。
スパンの例¶
SET event_table_name = 'my_db.public.my_event_table';
SELECT
RECORD['status']['code'] AS span_status
FROM
my_event_table
WHERE
record_type = 'SPAN';
クエリーからの可能な出力は次のようになります。
-----------------------
| SPAN_STATUS |
-----------------------
| "STATUS_CODE_ERROR" |
-----------------------
スパンイベントの例¶
SET event_table_name = 'my_db.public.my_event_table';
SELECT
RECORD['name'] AS event_name,
RECORD_ATTRIBUTES['exception.message'] AS error_message,
RECORD_ATTRIBUTES['exception.type'] AS exception_type,
RECORD_ATTRIBUTES['exception.stacktrace'] AS stacktrace
FROM
my_event_table
WHERE
RECORD_TYPE = 'SPAN_EVENT';
クエリーからの可能な出力は次のようになります。
-----------------------------------------------------------------------------------------------------------------------------------------
| EVENT_NAME | ERROR_MESSAGE | EXCEPTION_TYPE | STACKTRACE |
-----------------------------------------------------------------------------------------------------------------------------------------
| "exception" | "could not convert string to float: '$1,000,000.00'" | "ValueError" | " File \"_udf_code.py\", line 6, in compute\n" |
-----------------------------------------------------------------------------------------------------------------------------------------
機密データの保護¶
処理されなかった例外のログやトレースメッセージには機密データが含まれる可能性があるため、そのデータを保護するために以下を実行することを検討します。
未処理の例外ログをオンのままにしておく場合は、次のような方法で機密データを保護します。
例外処理コードを改善し、未処理の例外が発生するリスクを最小限に抑えましょう。
行アクセス ポリシー をイベントテーブルに適用し、個人識別情報 (PII) を含む行へのアクセスを制限します。
イベントテーブルの上に ビューを作成し、 マスキングポリシー を適用して、個人を特定できる情報 (PII) をマスキングまたは削除します。
ENABLE_UNHANDLED_EXCEPTIONS_REPORTING パラメーターを
false
に設定することで、未処理の例外ロギングをオフにします。