为日志、指标和跟踪设置级别¶
您可以为事件表中捕获的日志、跟踪或指标遥测数据设置阈值级别。
每种类型的遥测数据都支持一组特定于其用途的级别。您可以使用 参数 为每个 Snowflake 提供商设置这些级别。您也可以使用 Snowsight 设置一些级别,它以简化的方式表示级别参数。
对于每种类型的遥测数据,您可以执行以下步骤:
设置特定于每种类型的遥测数据的级别。
为每个级别设置有效的系统范围级别,除非被替换。
通过为会话或特定对象(例如过程和 UDFs)设置级别来替换系统范围级别。
备注
如果您的处理程序是用 Python 编写的,可以使用处理程序代码来替换用 SQL 设置的日志级别(如本主题中所述)。有关更多信息,请参阅 使用 Python 替换日志阈值级别。
范围¶
对于每种类型的遥测数据,您可以设置级别,使其在最符合您要求的范围内生效。在许多情况下,您可以通过在较小的范围内设置级别来覆盖在更大范围内设置的级别,如 Snowflake 如何确定有效级别 中所述。例如,您可能希望在账户范围内设置一组默认级别,然后为特定数据库中的对象设置不同的级别。
您可以在以下范围内设置每个级别:
- 账户:
为账户设置的级别在账户中的任何地方都有效,但在被对象或会话级别设置的级别覆盖的位置除外。
- 对象:
您可以为以下类型的对象设置遥测级别:
包含过程和函数的数据库或架构
存储过程
用户定义的函数 (UDF) 或用户定义的表函数 (UDTF)
例如,要设置特定 UDF 的日志级别,请使用 ALTER FUNCTION 为该 UDF 设置 LOG_LEVEL 参数。再举一个例子,若要为数据库中的所有函数和过程设置默认日志级别,请使用 ALTER DATABASE 来设置该数据库上的 LOG_LEVEL 参数。
备注
您不能设置 Streamlit 对象的级别。但可以设置包含对象的数据库或架构的级别。
- 会话:
您可以为当前会话中对函数和过程的调用设置遥测级别。
级别¶
您可以为每种遥测数据设置以下级别:
- 日志记录:
当您设置级别时,事件表中只会捕获该级别和更严重级别的数据,并在 Snowsight 中可见。例如,将 LOG_LEVEL 参数设置为 WARN 表示在事件表中获取 WARN、ERROR 和 FATAL 级别的消息。
设置 LOG_LEVEL 参数。
- 衡量标准:
目前,您可以捕获所有指标数据,也可以不捕获任何指标数据。
设置 METRIC_LEVEL 参数。
- 跟踪:
您可以指定以下特征:
事件表中存储的跟踪事件数据的范围
设置 TRACE_LEVEL 参数。
是否在跟踪的 SQL 语句中捕获 SQL 文本
这是由 SQL_TRACE_QUERY_TEXT 参数决定的。有关更多信息,请参阅 SQL 语句跟踪。
需要的权限¶
要设置对象的级别,您必须使用已获授或继承本节所述权限的角色。
例如,以下示例中的代码授予使用 central_log_admin
角色的用户设置账户日志级别所需的权限:
GRANT MODIFY LOG LEVEL ON ACCOUNT TO ROLE central_log_admin;
有关权限的更多信息,请参阅 访问控制权限。
要修改的级别 |
要设置的参数 |
需要的权限 |
---|---|---|
日志级别 |
账户
对象
会话
|
|
指标级别 |
账户
对象
会话
|
|
跟踪级别 |
账户
对象
会话
|
|
SQL 跟踪中的 SQL 文本 |
账户
|
设置遥测级别¶
您可以使用 SQL 或者在某些情况下使用 Snowsight 来设置遥测级别。在许多情况下,您可以通过在较小的范围内设置级别来覆盖在更大范围内设置的级别,如 Snowflake 如何确定有效级别 中所述。
设置级别之前,确认您拥有 具备所需权限的角色 的访问权限。
您可以使用 Snowsight 在账户级别设置遥测级别。
登录 Snowsight。
在导航菜单中,选择 Monitoring » Traces and Logs。
在 Traces & Logs 页面上,选择 Set Event Level。
对于:ui:
Set logging & tracing for
,请从以下任一选项中选择所需的范围:Account
数据库和(可选)架构
选择要调整的遥测数据级别。
All Events
On 开启对各种遥测数据的收集;Off 关闭对各种数据的收集。
Traces
On 将跟踪数据收集设置为
ALWAYS
;Off 将跟踪数据收集设置为OFF
。有关级别的更多信息,请参阅 TRACE_LEVEL。Logs
On 将日志数据收集设置为
INFO
。有关级别的更多信息,请参阅 LOG_LEVEL。Metrics
On 将跟踪数据收集设置为
ALL
;Off 将跟踪数据收集设置为NONE
。有关级别的更多信息,请参阅 METRIC_LEVEL。
您可以使用 SQL 为账户和数据库、函数和过程等对象设置遥测级别。
使用 ALTER ACCOUNT 命令根据要收集的遥测数据设置相应的参数。
以下示例将账户的日志级别设置为 ERROR:
-- Set the log level on the account
ALTER ACCOUNT SET LOG_LEVEL = ERROR;
要设置对象的 LOG_LEVEL 参数,请使用 ALTER <object> 命令。
以下示例为数据库 db
中所有函数和过程将日志级别设为 ERROR。该示例为 UDF f1(int)
将此级别替换为 WARN。
USE ROLE central_log_admin;
-- Set the log levels on a database and UDF.
ALTER DATABASE db1 SET LOG_LEVEL = ERROR;
ALTER FUNCTION f1(int) SET LOG_LEVEL = WARN;
-- Set the log levels on a Snowpark Container Services service.
ALTER SERVICE test_service SET LOG_LEVEL = ERROR;
有关 Snowflake 如何在不同对象上设置 LOG LEVEL 时确定有效日志级别的详细信息,请参阅 Snowflake 如何确定有效级别。
要为当前会话设置 LOG_LEVEL 参数,请使用 ALTER SESSION 命令。
USE ROLE developer_debugging;
-- Set the logging level to DEBUG for the current session.
ALTER SESSION SET LOG_LEVEL = DEBUG;
如果针对当前会话以及该会话中调用的函数和过程将级别参数设置成了不同级别,则 Snowflake 将确定要使用的有效级别。请参阅 Snowflake 如何确定有效级别。
Snowflake 如何确定有效级别¶
您可以使用 级别层级结构 替换遥测 级别相关的参数 和 会话)。
例如,您可以将账户的级别设置为一个值,然后通过为层次结构中较低的对象设置级别来替换该级别。
会话和对象级别参数的层次结构说明如下。
对于 会话参数,层次结构为账户 » 用户 » 会话。
这意味着您可以为账户设置参数、替换用户的账户级参数,并替换当前会话的用户级参数。
对于 对象参数,层次结构为账户 » 数据库 » 架构 » 对象。
这意味着您可以为账户设置参数、替换数据库或架构的账户级参数,并替换该数据库或架构中的特定存储过程以及 UDFs 的数据库级参数或架构级参数。
例如,函数的 LOG_LEVEL 会替换包含该函数的账户的 LOG_LEVEL。如果账户的 LOG_LEVEL 是 FATAL,账户中 Java UDF 的 LOG_LEVEL 是 INFO,则生效的 LOG_LEVEL 为 INFO(函数的级别,而非账户的级别):
ALTER ACCOUNT SET LOG_LEVEL = FATAL;
ALTER FUNCTION MyJavaUDF SET LOG_LEVEL = INFO;
-- The INFO log level is used because the FUNCTION MYJAVAUDF
-- is lower than the ACCOUNT in the hierarchy.
如果同时在会话和对象参数层次结构中设置了级别参数,则使用最详细的级别。
对于日志级别,下表列出的示例说明了在会话和对象上设置的参数如何影响所用日志级别。
会话的值
对象、架构、数据库或账户的值
所用日志级别
(未设置)
WARN
WARN
DEBUG
(未设置)
DEBUG
WARN
ERROR
WARN
INFO
DEBUG
DEBUG
(未设置)
(未设置)
OFF
对于指标级别 –
ALL
替换NONE
。对于跟踪级别 –
ALWAYS
替换ON_EVENT
和OFF
;ON_EVENT
替换OFF
。