跟踪:通过过程调用从父级传播到子级的 span 和跟踪 IDs

注意

此行为变更包含在 2024_06 捆绑包中。

有关捆绑包的当前状态,请参阅 捆绑包历史记录

事件跟踪 中,span 和跟踪 IDs 的行为如下:

变更前:

当处理程序使用 JavaScript 或 Snowflake Scripting 编写时,由链式存储过程或 UDFs 创建的每个 span 的 trace_id 都是唯一的。

事件表的 RECORD 列中不存在 parent_span_id 字段。

原生应用程序提供商和使用者看到的共享事件的 trace_id 值不同。提供商看到的是经过哈希处理的版本。

变更后:

此更改为使用 JavaScript 和 Snowflake Scripting 编写的处理程序添加了跟踪 ID 传播支持。对于使用 Python、Java 和 Scala 编写的处理程序,此更改已存在。新的行为适用于使用 JavaScript 编写处理程序的存储过程和 UDFs,也适用于使用 Snowflake Scripting 编写的存储过程处理程序。

带有 JavaScript 或 Snowflake Scripting 处理程序的链式存储过程或 UDFs 所生成的 span 具有相同的 trace_id。RECORD 列可能有 parent_span_id 属性。

带有 JavaScript 或 Snowflake Scripting 处理程序的链式存储过程或 UDFs 所生成的 span 在 parent_span_idspan_id 之间具有父子关系。带有 JavaScript 或 Snowflake Scripting 处理程序的存储过程可以调用任意长度的链中的其他存储过程。UDFs 无法执行 SQL 语句,因此调用 UDF 会结束链。但是,跟踪信息仍会传播到 UDF 的 span。

如果带有 JavaScript 或 Snowflake Scripting 处理程序的存储过程或 UDF 由用户(根)直接调用,那么 trace_id 将是随机 ID,并且不会有 parent_span_id。如果对存储过程禁用了跟踪,并且它调用了另一个存储过程或 UDF,则子级 span 的 trace_id 将是随机的,并且不会有 parent_span_id。换言之,将在子级重新启动跟踪。

原生应用程序提供商和使用者看到的共享 JavaScript 或 Snowflake Scripting 存储过程或 UDF 事件的 trace_id 相同,因此可以更轻松地进行调试。

做出这一更改是为了改进调试。

参考:1683

语言: 中文