为应用程序使用日志记录和事件跟踪

本主题介绍了提供商如何配置 Snowflake Native App 以记录日志消息和跟踪事件。

关于应用程序中的日志消息和跟踪事件

Snowflake Native App Framework 支持使用 Snowflake 日志记录和跟踪 功能来收集应用程序的信息。提供商可以配置应用程序来记录和分析以下内容:

  • 日志消息 – 独立的详细消息,包含有关特定应用程序代码片段状态的信息。

  • 跟踪事件 – 提供商可用于获取跨越和分组代码中多个部分信息的结构化数据。 跟踪事件允许应用程序发出与其性能和行为相关的信息。

  • 指标 – 有关基于 Snowflake 生成的 CPU 和内存指标的存储过程和 UDF 资源消耗的信息。

要配置应用程序以发出日志消息和跟踪事件,提供商需要在清单文件中设置日志和跟踪级别。请参阅 为应用程序设置日志和跟踪级别

提供商还可以将应用程序配置为使用事件共享,让使用者与提供商共享日志消息和跟踪事件。有关更多信息,请参阅 关于事件共享

关于应用程序生命周期事件

Snowflake 记录事件,让您可以查看 Snowflake Native App 的状态和历史记录。这些 Snowflake 提供的事件被称为 应用程序生命周期事件

例如,如果使用者的应用程序实例在升级过程中因错误而进入失败状态,您可以使用应用程序生命周期事件来查看此历史事件。

Snowflake 将这些应用程序生命周期事件记录在账户的 :doc:` 事件表 </developer-guide/logging-tracing/event-table-setting-up>` 中。默认情况下,系统不记录应用程序生命周期事件。要启用应用程序生命周期事件的日志记录,请在 :ref:` 清单文件中的日志级别属性 <label-manifest_configuration_log_level>` 中进行设置。有关更多信息,请参阅 为应用程序设置日志和跟踪级别

清单文件中 log_level 属性的值决定了事件表中记录的事件严重性级别。应用程序生命周期事件支持以下严重性级别:

  • TRACE

  • DEBUG

  • INFO

  • WARN

  • ERROR

  • FATAL

  • OFF

备注

每个日志记录级别都包含所有较低级别的记录。例如,将日志级别设置为 WARN 时,也会记录 ERRORFATAL 级别的事件。

查询应用程序生命周期事件

为应用程序配置日志级别后,Snowflake 将在您账户的活动事件表中记录应用程序生命周期事件。您可以通过查询事件表来查看这些事件。

以下 SELECT 语句可检索过去一小时内记录的特定应用程序的生命周期事件:

SELECT TIMESTAMP, RESOURCE_ATTRIBUTES, RECORD, VALUE
  FROM <your_event_table>
  WHERE TIMESTAMP > DATEADD(hour, -1, CURRENT_TIMESTAMP())
    AND RESOURCE_ATTRIBUTES:"snow.application.name" = '<your_app_name>'
    AND RECORD_TYPE = 'EVENT'
  ORDER BY TIMESTAMP DESC
  LIMIT 10;
Copy

关于事件共享

事件共享允许提供商收集有关应用程序性能和行为的信息。提供商可以配置应用程序,要求使用者与提供商共享日志消息和跟踪事件。事件共享要求提供商和使用者在其账户中配置一个事件表,以存储应用程序发出的日志消息和跟踪事件。

当启用事件共享时,插入到使用者账户事件表中的日志消息和跟踪事件也会插入到提供商账户的事件表中。

备注

RECORD_TYPEEVENT 的事件中,仅 Snowflake Native Apps 应用程序生命周期事件和 Snowpark Container Services 平台事件支持事件共享。

使用事件共享时的注意事项

在为应用程序配置日志记录和事件共享之前,提供商必须考虑以下几点:

  • 提供商需承担提供商方面事件共享相关的所有费用,包括数据引入和存储。

  • 提供商必须在您想要支持事件共享的每个区域拥有 存储共享事件的账户

  • 提供商必须在清单文件中定义应用程序的默认日志级别和跟踪级别。

从之前的事件共享功能迁移时的注意事项

在从现有的事件共享功能迁移到使用事件定义的过程中,提供商应注意以下几点。

  • 之前的事件共享功能相当于 OPTIONAL ALL 事件定义。

  • 使用之前功能的应用程序的已发布版本和补丁程序将默认使用 OPTIONAL ALL 事件定义。提供商无需将此事件定义添加到清单文件中。

要开始使用事件定义,提供商可以将支持的事件定义添加到清单文件中。这适用于新应用程序以及现有应用程序的新版本和补丁。

备注

要开始请求粒度更细的日志和事件共享,提供商只需在清单文件中添加事件定义。供应商无需采取其他行动。

工作流程 – 为应用程序设置事件共享

事件共享允许使用者与提供商共享日志消息和跟踪事件。

以下工作流程展示了如何为应用程序设置和启用事件共享:

  1. 提供商为应用程序 设置日志和跟踪级别

  2. 提供商向清单文件中 添加事件定义

    事件定义充当应用程序发出的日志消息和跟踪事件的筛选器。提供商可将事件定义配置为必需或可选。

  3. 提供商在其组织中 设置事件表

  4. 提供商发布应用程序。

当使用者安装应用程序时,他们可以设置事件表并启用事件共享。有关事件共享的用户要求的更多信息,请参阅 为应用程序启用日志记录和事件共享

监控使用者应用程序运行状况

您可以通过 APPLICATION_STATE 视图 中的 LAST_HEALTH_STATUSLAST_HEALTH_STATUS_UPDATED_ON 列来监控应用程序的使用者实例的运行状况。LAST_HEALTH_STATUS 列具有以下可能值:

  • OK:选择使用 时默认使用的角色和仓库。使用者实例运行正常。

  • FAILED:选择使用 时默认使用的角色和仓库。使用者实例处于错误状态。

  • PAUSED:选择使用 时默认使用的角色和仓库。使用者手动暂停了该应用程序。

以下代码示例演示了如何使用 APPLICATION_STATE 视图来检索应用程序的所有使用者实例的运行状况:

SELECT
    CONSUMER_ORGANIZATION_NAME,
    CONSUMER_ACCOUNT_NAME,
    LAST_HEALTH_STATUS,
    LAST_HEALTH_STATUS_UPDATE_TIME
FROM
    SNOWFLAKE.ACCOUNT_USAGE.APPLICATION_STATE
WHERE
    PROVIDER_ORG_NAME = '<your_provider_org_name>'
    AND APPLICATION_NAME = '<your_app_name>'
ORDER BY
    LAST_HEALTH_STATUS_UPDATE_TIME DESC;
Copy

前面的查询可能会返回类似于以下内容的结果:

CONSUMER_ORG_NAME    CONSUMER_ACCOUNT_NAME    LAST_HEALTH_STATUS    LAST_HEALTH_STATUS_UPDATE_TIME
------------------   ---------------------    ------------------    -------------------------------
consumer_org_1      consumer_account_1       OK                    2024-01-15 10:30:00.000
consumer_org_2      consumer_account_2       FAILED                2024-01-15 09:45:00.000
consumer_org_3      consumer_account_3       PAUSED                2024-01-14 16:20:00.000