为日志、指标和跟踪设置级别¶
您可以为事件表中捕获的日志、跟踪或指标数据设置阈值级别。
对于每种类型的遥测数据,您可以执行以下步骤:
设置特定于每种类型的遥测数据的级别。
为每个级别设置有效的系统范围级别,除非被替换。
通过为会话或特定对象(例如过程和 UDFs)设置级别来替换系统范围级别。
备注
如果您的处理程序是用 Python 编写的,可以使用处理程序代码来替换用 SQL 设置的日志级别(如本主题中所述)。有关更多信息,请参阅 使用 Python 替换日志阈值级别。
了解日志、指标和跟踪级别¶
每种类型的遥测数据都支持一组特定于其用途的级别。您可以使用 参数 为每个 Snowflake 提供商设置这些级别。您也可以使用 Snowsight 设置一些级别,它以简化的方式表示级别参数。
您可以通过以下方式设置其中的每一个:
在 账户级别。
在 数据库、架构或其他对象级别 使用 SQL。
使用 Snowsight 在 数据库或架构级别。
在 会话级别。
- 日志记录:
当您设置级别时,事件表中只会捕获该级别和更严重级别的数据,并在 Snowsight 中可见。例如,将 LOG_LEVEL 参数设置为 WARN 表示在事件表中获取 WARN、ERROR 和 FATAL 级别的消息。
级别由 LOG_LEVEL 参数决定。
- 衡量标准:
目前,您可以捕获所有指标数据,也可以不捕获任何指标数据。
级别由 METRIC_LEVEL 参数决定。
- 跟踪:
您可以指定存储在事件表中的跟踪事件数据的范围。
级别由 TRACE_LEVEL 参数决定。
为账户设置级别¶
对于每种类型的遥测数据,您可以将账户的级别设置为开启。您可以按 了解 Snowflake 如何确定有效级别 中所述在对象和会话级别替换此级别。
确认您拥有所需的权限¶
要为账户设置等级,您必须使用已授予或继承下述权限的角色。
有关权限的更多信息,请参阅 访问控制权限。
要修改的级别 |
要设置的参数 |
需要的权限 |
---|---|---|
日志级别 |
对账户的 MODIFY LOG LEVEL 权限 |
|
指标级别 |
对账户的 MODIFY METRIC LEVEL 权限 |
|
跟踪级别 |
对账户的 MODIFY TRACE LEVEL 权限 |
以下示例中的代码授予使用 central_log_admin
角色的用户设置账户日志级别所需的权限。
GRANT MODIFY LOG LEVEL ON ACCOUNT TO ROLE central_log_admin;
在 Snowsight 中设置账户级别¶
备注
对日志记录和跟踪的 Snowsight 支持是适用于所有账户的预览版功能。
您可以使用 Snowsight 在账户级别设置遥测级别。
验证您是否具有设置级别所需 权限的角色 的访问权限。
登录 Snowsight。
在导航菜单中,选择 Monitoring » Traces and Logs。
在 Traces & Logs 页面中,选择 Set Event Level。
对于 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 设置账户的级别¶
您可以使用 SQL 为账户设置遥测级别。
要为账户设置遥测级别,请执行以下步骤:
验证您是否具有设置级别所需 权限的角色 的访问权限。
使用 ALTER ACCOUNT 命令根据要收集的遥测数据设置相应的参数。
有关您可以使用的级别列表,请参阅 了解日志、指标和跟踪级别。
以下示例将账户的日志级别设置为 ERROR。
-- Set the log level on the account ALTER ACCOUNT SET LOG_LEVEL = ERROR;
为对象设置级别¶
对于每种类型的遥测数据,您可以设置以下对象的级别:
存储过程
用户定义的函数 (UDF) 或用户定义的表函数 (UDTF)
包含过程和函数的数据库或架构
备注
您不能设置 Streamlit 对象的级别。但可以设置包含该对象的数据库或架构的跟踪级别。
确认您拥有所需的权限¶
要设置对象的级别,您必须使用已授予或继承下述权限的角色。
有关权限的更多信息,请参阅 访问控制权限。
要修改的级别 |
要设置的参数 |
需要的权限 |
---|---|---|
日志级别 |
|
|
指标级别 |
|
|
跟踪级别 |
|
以下示例中的代码授予使用 central_log_admin
角色的用户设置 db1
数据库日志级别所需的权限。
GRANT MODIFY LOG LEVEL ON ACCOUNT TO ROLE central_log_admin;
GRANT MODIFY ON DATABASE db1 TO ROLE central_log_admin;
在 Snowsight 中设置数据库或架构的级别¶
备注
对日志记录和跟踪的 Snowsight 支持是适用于所有账户的预览版功能。
您可以使用 Snowsight 来设置遥测级别。在开始之前,验证您是否具有设置级别所需 权限的角色 的访问权限。
验证您是否具有设置级别所需 权限的角色 的访问权限。
登录 Snowsight。
在导航菜单中,选择 Monitoring » Traces and Logs。
在 Traces & Logs 页面中,选择 Set Event Level。
对于 Set logging & tracing for,选择要设置级别的数据库,也可以选择架构。
选择要调整的遥测数据级别。
All Events
On 开启对各种遥测数据的收集;Off 关闭对各种数据的收集。
Traces
On 将跟踪数据收集设置为
ALWAYS
;Off 将跟踪数据收集设置为OFF
。有关级别的信息,请参阅 TRACE_LEVEL。Logs
On 将日志数据收集设置为
INFO
。有关级别的信息,请参阅 LOG_LEVEL。Metrics
On 将跟踪数据收集设置为
ALL
;Off 将跟踪数据收集设置为NONE
。有关级别的信息,请参阅 METRIC_LEVEL。
使用 SQL 设置数据库、架构或其他对象的级别¶
您可以使用 SQL 来设置日志、指标和跟踪的级别。
要设置对象的遥测级别,请执行以下步骤:
验证您是否具有设置级别所需 权限的角色 的访问权限。
使用 ALTER * <object>* 命令设置对象上的 LOG_LEVEL 参数。
有关您可以使用的级别列表,请参阅 了解日志、指标和跟踪级别。
例如,要设置特定 UDF 的日志级别,请使用 ALTER FUNCTION 为该 UDF 设置 LOG_LEVEL 参数。再举一个例子,若要为数据库中的所有函数和过程设置默认日志级别,请使用 ALTER DATABASE 来设置该数据库上的 LOG_LEVEL 参数。
以下示例为数据库
db
中所有函数和过程将日志级别设为 ERROR。该示例为 UDFf1(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;
有关 Snowflake 如何在不同对象上设置 LOG LEVEL 时确定有效日志级别的详细信息,请参阅 了解 Snowflake 如何确定有效级别。
设置当前会话的级别¶
要设置对当前会话中函数和过程调用的级别,请执行以下操作:
验证您有权设置会话的级别。
您必须使用已被授予以下权限的角色,具体取决于您设置的级别:
要修改的级别
要设置的参数
需要的权限
日志级别
MODIFY SESSION LOG LEVEL
指标级别
MODIFY SESSION METRIC LEVEL
跟踪级别
MODIFY SESSION TRACE LEVEL
例如,要向
developer_debugging
角色授予权限,以设置当前会话的日志级别,请执行以下语句:GRANT MODIFY SESSION LOG LEVEL ON ACCOUNT TO ROLE developer_debugging;
使用 ALTER SESSION 命令设置当前会话的 LOG_LEVEL 参数。
例如:
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
。