タスク実行のイベントモニタリング¶
タスクの実行ステータスに関する情報を提供するイベントを記録するようにSnowflakeを構成できます。イベントは、タスクに関連付けられた アクティブイベントテーブル に記録されます。
例えば、 イベントテーブルをデータベースに関連付けた とします。そのデータベースのタスクが実行されると、Snowflakeはそのイベントテーブルにイベントを記録します。
イベントテーブルを監視するために、 新しいデータに対してアラート をセットすることができます。タスク実行が失敗したときに 通知を送信する ようアラートを構成できます。
次のセクションでは、イベントをキャプチャするためのイベントログのセットアップ方法、アラートのセットアップ方法、イベントテーブルに記録されたイベントの解釈方法について説明します。
注釈
タスクのイベントをログに記録するにはコストがかかります。 テレメトリーデータ収集の費用 をご参照ください。
制限事項¶
タスクイベントはSnowflake Native Appsではサポートされていません。
キャプチャするイベントの重大度レベルのセット¶
イベントテーブルに記録するタスクイベントを設定するには、 イベントテーブルに記録したいイベントの重大度レベル をセットします。
ERROR
: 失敗したタスクのイベント。INFO
: タスク実行の成功と失敗のイベント。
レベルを設定するには、アカウントまたはオブジェクトの LOG_LEVEL パラメーターをセットします。以下のためにレベルをセットできます。
アカウント内のすべてのオブジェクト、
データベースまたはスキーマ内のすべてのオブジェクト。
特定のタスク。
注釈
アカウントまたはオブジェクトに重大度レベルがセットされていない場合、イベントはキャプチャされません。
例:
アカウント内の全オブジェクトの ERROR-レベルのイベントとメッセージを取得するには、 ALTER ACCOUNT SET LOG_LEVEL を実行します。
ALTER ACCOUNT SET LOG_LEVEL = ERROR;
このレベルは、 UDFs、ストアドプロシージャ、動的テーブル、およびタスクを含む、アカウント内のすべてのタイプのオブジェクトに影響することに注意してください。
my_db
データベース内のすべてのオブジェクトの INFO レベルのイベントとメッセージをキャプチャするために、 ALTER DATABASE ... SET LOG_LEVEL を実行します。ALTER DATABASE my_db SET LOG_LEVEL = INFO;
アカウントでレベルを設定する場合と同様に、データベースでレベルを設定すると、 UDFs、ストアドプロシージャ、動的テーブル、およびタスクを含む、データベース内のすべてのタイプのオブジェクトに影響します。
タスク
my_task
の ERROR レベルのイベントを捕捉するには、 ALTER TASK ... SET LOG_LEVEL を実行します。ALTER TASK my_task SET LOG_LEVEL = ERROR;
タスク完了イベントの新規データに関するアラートの設定¶
ログイベントの重大度レベルを設定した後、新しいデータに対するアラートをセットして、タスク完了の失敗を示す新しいイベントをイベントテーブルで監視することができます。新しいデータに関するアラートは、イベントテーブルの新しい行が挿入され、アラートで指定された条件を満たすとトリガーされます。
注釈
新しいデータに対してアラートを作成するには、イベント・テーブルをクエリするために必要な権限を付与されたロールを使用する必要があります。
アラート条件がデフォルトのイベントテーブル (SNOWFLAKE.TELEMETRY.EVENTS) 定義済みビュー (SNOWFLAKE.TELEMETRY.EVENTS_VIEW ビュー) にクエリする場合は、 デフォルトのイベント・テーブルと EVENTS_VIEW へのアクセスのロール をご参照ください。
EVENTS_VIEW 表示へのアクセスを管理するには、 EVENTS_VIEW 表示へのアクセス管理 を参照してください。
アラート条件がカスタムイベントテーブルにクエリする場合は、 イベントテーブルのアクセス制御権限 を参照してください。
カスタムイベントテーブルへのアクセスを管理するには、 イベントテーブルデータへのアクセスの管理 を参照してください。
アラート条件では、タスク完了イベントをクエリするために、 resource_attributes:"snow.executable.type" = 'TASK'
の行を選択します。イベントリストを絞り込むには、以下の列でフィルターをかけることができます。
結果を特定のデータベース内のタスクに限定するには、
resource_attributes:"snow.database.name"
を使用します。タスクの実行に失敗したイベントを返すには、
value:state = 'FAILED'
を使います。
タスク実行イベントでログに記録される値に関する情報は、 タスクイベントのログ情報 をご参照ください。
例えば、次のステートメントは、データベース my_db
内のタスクのタスク完了が失敗したときにアクションを実行するアラートを新しいデータに作成します。この例では次のように仮定しています。
アクティブなイベントテーブルが デフォルトのイベントテーブル (SNOWFLAKE.TELEMETRY.EVENTS)になる。
そのSlackチャンネルに対して Webhook通知統合をセット している。
CREATE ALERT my_alert_on_task_failures
IF( EXISTS(
SELECT * FROM SNOWFLAKE.TELEMETRY.EVENT_TABLE
WHERE resource_attributes:"snow.executable.type" = 'task'
AND resource_attributes:"snow.database.name" = 'my_db'
AND record:"severity_text" = 'ERROR'
AND value:"state" = 'FAILED'))
THEN
BEGIN
LET result_str VARCHAR;
(SELECT ARRAY_TO_STRING(ARRAY_ARG(name)::ARRAY, ',') INTO :result_str
FROM (
SELECT resource_attributes:"snow.executable.name"::VARCHAR name
FROM TABLE(RESULT_SCAN(SNOWFLAKE.ALERT.GET_CONDITION_QUERY_UUID()))
LIMIT 10
)
);
CALL SYSTEM$SEND_SNOWFLAKE_NOTIFICATION(
SNOWFLAKE.NOTIFICATION.TEXT_PLAIN(:result_str),
'{"my_slack_integration": {}}'
);
END;
タスク完了イベントのイベントテーブルへのクエリ¶
タスク完了が失敗したことを示すイベントをイベントテーブルにクエリすることもできます。
イベントテーブルをクエリするために必要なロールや、結果をフィルターするために使用できる条件については、 タスク完了イベントの新規データに関するアラートの設定 を参照してください。
例えば、タイムスタンプ、タスク名、クエリ ID、データベース my_db
内のタスクに関するエラーのエラーメッセージを取得する場合:
SELECT
timestamp,
resource_attributes:"snow.executable.name"::VARCHAR AS task_name,
resource_attributes:"snow.query.id"::VARCHAR AS query_id,
value:message::VARCHAR AS error
FROM my_event_table
WHERE
resource_attributes:"snow.executable.type" = 'TASK' AND
resource_attributes:"snow.database.name" = 'MY_DB' AND
value:state = 'FAILED'
ORDER BY timestamp DESC;
+-------------------------+-----------+--------------------------------------+------------------------------------------------------+
| TIMESTAMP | TASK_NAME | QUERY_ID | ERROR |
|-------------------------+-----------+--------------------------------------+------------------------------------------------------|
| 2025-02-18 00:21:19.461 | T1 | 01ba76b5-0107-e56d-0000-a995024f4222 | 002003: SQL compilation error: |
| | | | Object 'MY_TABLE' does not exist or not authorized. |
+-------------------------+-----------+--------------------------------------+------------------------------------------------------+
以下の例では、スキーマ my_schema
内のタスクに関するエラーの全列を検索します:
SELECT *
FROM my_event_table
WHERE
resource_attributes:"snow.executable.type" = 'FAILED' AND
resource_attributes:"snow.schema.name" = 'MY_SCHEMA' AND
value:state = 'FAILED'
ORDER BY timestamp DESC;
+-------------------------+-----------------+-------------------------+-------+----------+------------------------------------------------------------+-------+------------------+-------------+-------------------------------+-------------------+------------------------------------------------------------------------------------------------------+-----------+
| TIMESTAMP | START_TIMESTAMP | OBSERVED_TIMESTAMP | TRACE | RESOURCE | RESOURCE_ATTRIBUTES | SCOPE | SCOPE_ATTRIBUTES | RECORD_TYPE | RECORD | RECORD_ATTRIBUTES | VALUE | EXEMPLARS |
|-------------------------+-----------------+-------------------------+-------+----------+------------------------------------------------------------+-------+------------------+-------------+-------------------------------+-------------------+------------------------------------------------------------------------------------------------------+-----------|
| 2025-02-18 00:21:19.461 | NULL | 2025-02-18 00:21:19.461 | NULL | NULL | { | NULL | NULL | EVENT | { | NULL | { | NULL |
| | | | | | "snow.database.id": 49, | | | | "name": "execution.status", | | "message": "002003: SQL compilation error:\nObject 'EMP_TABLE' does not exist or not authorized.", | |
| | | | | | "snow.database.name": "MY_DB", | | | | "severity_text": "ERROR" | | "state": "FAILED" | |
| | | | | | "snow.executable.id": 518, | | | | } | | } | |
| | | | | | "snow.executable.name": "T1", | | | | | | | |
| | | | | | "snow.executable.type": "TASK", | | | | | | | |
| | | | | | "snow.owner.id": 2601, | | | | | | | |
| | | | | | "snow.owner.name": "DATA_ADMIN", | | | | | | | |
| | | | | | "snow.owner.type": "ROLE", | | | | | | | |
| | | | | | "snow.query.id": "01ba76b5-0107-e56d-0000-a995024f4222", | | | | | | | |
| | | | | | "snow.schema.id": 411, | | | | | | | |
| | | | | | "snow.schema.name": "MY_SCHEMA", | | | | | | | |
| | | | | | "snow.warehouse.id": 41, | | | | | | | |
| | | | | | "snow.warehouse.name": "INTAKE_WAREHOUSE" | | | | | | | |
| | | | | | } | | | | | | | |
+-------------------------+-----------------+-------------------------+-------+----------+------------------------------------------------------------+-------+------------------+-------------+-------------------------------+-------------------+------------------------------------------------------------------------------------------------------+-----------+
タスクイベントのログ情報¶
タスクが実行されると、イベントがイベント・テーブルにログ記録されます。以下のセクションでは、イベントを表すイベント・テーブル行について説明します。
イベントテーブル列値¶
タスクが完了または失敗すると、以下の値の行がイベント・テーブルに挿入されます。
注釈
列が以下にリストされていない場合、その列の値はイベントに対して NULL です。
列 |
データ型 |
説明 |
---|---|---|
|
TIMESTAMP_NTZ |
イベント作成時の UTC タイムスタンプ。 |
|
TIMESTAMP_NTZ |
ログに使用される時間は UTC です。現在、これは |
|
OBJECT |
実行されたタスクを識別する 属性。 |
|
STRING |
タスク実行時の |
|
OBJECT |
タスクの実行ステータスの 詳細。 |
|
VARIANT |
タスク実行の ステータス で、実行に失敗した場合は、失敗のエラーメッセージ。 |
resource_attributes
列のキー値・ペア¶
resource_attributes
列には、以下のキー値ペアを持つ OBJECT 値が含まれます。
属性名 |
属性タイプ |
説明 |
例 |
---|---|---|---|
|
INTEGER |
タスクを含むデータベースの内部/システム生成識別子。 |
|
|
VARCHAR |
タスクを含むデータベースの名前。 |
|
|
INTEGER |
実行したタスクの内部/システム生成識別子。 |
|
|
VARCHAR |
実行したタスクの名前。 |
|
|
VARCHAR |
オブジェクトのタイプ。タスクイベントの値は |
|
|
INTEGER |
タスクの OWNERSHIP 権限を持つロールの内部/システム生成識別子。 |
|
|
VARCHAR |
タスクの OWNERSHIP 権限を持つロールの名前。 |
|
|
VARCHAR |
オブジェクトを所有するロールのタイプ。例えば |
|
|
VARCHAR |
タスクを実行したクエリの ID |
|
|
INTEGER |
タスクを含むスキーマの内部/システム生成識別子。 |
|
|
VARCHAR |
タスクを含むスキーマの名前。 |
|
|
INTEGER |
タスクを実行するために使用されるウェアハウスの内部/システム生成識別子。 |
|
|
VARCHAR |
タスクの実行に使用されるウェアハウスの名前。 |
|
record
列のキー値・ペア¶
record
列には、以下のキー値ペアを持つ OBJECT 値が含まれます。
キー |
型 |
説明 |
例 |
---|---|---|---|
|
VARCHAR |
イベント名。タスク実行時の値は |
|
|
VARCHAR |
イベントの重大度レベル(以下の値のいずれか)。
|
|
value
列のキー値・ペア¶
value
列には、以下のキー値ペアを持つ VARIANT 値が含まれます。
キー |
型 |
説明 |
例 |
---|---|---|---|
|
VARCHAR |
タスクの実行状態。以下の値のいずれか:
|
|
|
VARCHAR |
|