跟踪:通过过程调用从父级传播到子级的 span 和跟踪 IDs¶
在 事件跟踪 中,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_id
和span_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