监控任务执行事件¶
您可以将 Snowflake 配置为记录一个事件,该事件可提供有关任务执行状态的信息。事件记录在与任务相关联的 活动事件表 中。
例如,假设 已将事件表与数据库关联。该数据库中的任务执行时,Snowflake 会向该事件表记录一个事件。
您可以设置 有新数据时发出警报,以监控事件表。您可以将警报配置为在任务执行失败时 发送通知。
以下部分介绍如何设置事件日志记录以捕获事件、如何设置警报,以及如何解释事件表中记录的事件:
备注
记录任务的事件会产生费用。请参阅 遥测数据收集成本。
设置要捕获的事件的严重性级别¶
要设置将记录到事件表中的任务事件,请 设置您要在事件表中捕获的事件的严重性级别:
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 级事件,请执行:doc:ALTER TASK ...SET LOG_LEVEL </sql-reference/sql/alter-task>
: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 |
如果 |