为日志、指标和跟踪设置级别

您可以为事件表中捕获的日志、跟踪或指标遥测数据设置阈值级别。

每种类型的遥测数据都支持一组特定于其用途的级别。您可以使用 参数 为每个 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 参数。

跟踪:

您可以指定以下特征:

需要的权限

要设置对象的级别,您必须使用已获授或继承本节所述权限的角色。

例如,以下示例中的代码授予使用 central_log_admin 角色的用户设置账户日志级别所需的权限:

GRANT MODIFY LOG LEVEL ON ACCOUNT TO ROLE central_log_admin;
Copy

有关权限的更多信息,请参阅 访问控制权限

要修改的级别

要设置的参数

需要的权限

日志级别

LOG_LEVEL

账户

  • 对账户的 MODIFY LOG LEVEL 权限

对象

  • 对账户的 MODIFY LOG LEVEL 权限

  • 想要设置级别的对象上的 MODIFY。

  • 包含要为其设置级别的过程或 UDF 的数据库或架构上的 USAGE

会话

  • MODIFY SESSION LOG LEVEL

指标级别

METRIC_LEVEL

账户

  • 对账户的 MODIFY METRIC LEVEL 权限

对象

  • 对账户的 MODIFY METRIC LEVEL 权限

  • 想要设置级别的对象上的 MODIFY。

  • 包含要为其设置级别的过程或 UDF 的数据库或架构上的 USAGE

会话

  • MODIFY SESSION METRIC LEVEL

跟踪级别

TRACE_LEVEL

账户

  • 对账户的 MODIFY TRACE LEVEL 权限

对象

  • 对账户的 MODIFY TRACE LEVEL 权限

  • 想要设置级别的对象上的 MODIFY。

  • 包含要为其设置级别的过程或 UDF 的数据库或架构上的 USAGE

会话

  • MODIFY SESSION TRACE LEVEL

SQL 跟踪中的 SQL 文本

SQL_TRACE_QUERY_TEXT

账户

  • 账户的 SQL_TRACE_QUERY_TEXT

设置遥测级别

您可以使用 SQL 或者在某些情况下使用 Snowsight 来设置遥测级别。在许多情况下,您可以通过在较小的范围内设置级别来覆盖在更大范围内设置的级别,如 Snowflake 如何确定有效级别 中所述。

设置级别之前,确认您拥有 具备所需权限的角色 的访问权限。

您可以使用 Snowsight 在账户级别设置遥测级别。

  1. 登录 Snowsight。

  2. 在导航菜单中,选择 Monitoring » Traces and Logs

  3. Traces & Logs 页面上,选择 Set Event Level

  4. 对于:ui:Set logging & tracing for,请从以下任一选项中选择所需的范围:

    • Account

    • 数据库和(可选)架构

  5. 选择要调整的遥测数据级别。

    All Events

    On 开启对各种遥测数据的收集;Off 关闭对各种数据的收集。

    Traces

    On 将跟踪数据收集设置为 ALWAYSOff 将跟踪数据收集设置为 OFF。有关级别的更多信息,请参阅 TRACE_LEVEL

    Logs

    On 将日志数据收集设置为 INFO。有关级别的更多信息,请参阅 LOG_LEVEL

    Metrics

    On 将跟踪数据收集设置为 ALLOff 将跟踪数据收集设置为 NONE。有关级别的更多信息,请参阅 METRIC_LEVEL

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.
Copy

如果同时在会话和对象参数层次结构中设置了级别参数,则使用最详细的级别。

  • 对于日志级别,下表列出的示例说明了在会话和对象上设置的参数如何影响所用日志级别。

    会话的值

    对象、架构、数据库或账户的值

    所用日志级别

    (未设置)

    WARN

    WARN

    DEBUG

    (未设置)

    DEBUG

    WARN

    ERROR

    WARN

    INFO

    DEBUG

    DEBUG

    (未设置)

    (未设置)

    OFF

  • 对于指标级别 – ALL 替换 NONE

  • 对于跟踪级别 – ALWAYS 替换 ON_EVENTOFFON_EVENT 替换 OFF

语言: 中文