Rastreamento: IDs de span e rastreamento propagados de pai para filho por meio de chamadas de procedimento

Atenção

Essa mudança de comportamento está no pacote 2024_06.

Para saber o status atual do pacote, consulte Histórico do pacote.

No rastreamento de evento, os IDs de span e rastreamento se comportam da seguinte forma:

Antes da mudança:

O trace_id de cada um dos spans criados por procedimentos armazenados encadeados ou UDFs é exclusivo quando o manipulador é escrito em JavaScript ou Snowflake Scripting.

O campo parent_span_id não existe na coluna RECORD da tabela de eventos.

Provedores e consumidores de Native Apps veem valores trace_id diferentes para eventos compartilhados. O provedor vê a versão com hash.

Após a mudança:

Essa alteração adiciona suporte à propagação do ID de rastreamento para manipuladores escritos em JavaScript e Snowflake Scripting. Isso já existe para manipuladores escritos em Python, Java e Scala. O novo comportamento se aplica a procedimentos armazenados e UDFs cujos manipuladores são escritos em JavaScript, bem como a manipuladores de procedimento armazenado escritos em Snowflake Scripting.

Os spans gerados por procedimentos armazenados encadeados ou UDFs com manipuladores JavaScript ou Snowflake Scripting têm o mesmo trace_id. A coluna RECORD pode ter um atributo parent_span_id.

Os intervalos gerados por procedimentos armazenados encadeados ou UDFs com manipuladores JavaScript ou Snowflake Scripting têm um relacionamento pai-filho entre parent_span_id e span_id. Procedimentos armazenados com ou manipuladores JavaScript ou Snowflake Scripting podem chamar outros procedimentos armazenados em uma cadeia de qualquer comprimento. UDFs não podem executar instruções SQL, então a chamada de uma UDF termina a cadeia. No entanto, as informações de rastreamento ainda são propagadas para os spans da UDF.

Se o procedimento armazenado ou UDF com um manipulador JavaScript ou Snowflake Scripting foi chamado pelo usuário diretamente (a raiz), então trace_id será um ID aleatório e não haverá parent_span_id. Se o rastreamento estiver desabilitado para um procedimento armazenado e chamar outro procedimento armazenado ou UDF, então o trace_id dos intervalos do filho será aleatório e não terá parent_span_id. Em outras palavras, o rastreamento é reiniciado no filho.

Os provedores e consumidores de aplicativos nativos veem o mesmo trace_id para eventos de procedimento armazenado ou UDF JavaScript ou Snowflake Scripting compartilhados, para que possam ser depurados mais facilmente.

Essa alteração está sendo feita para melhorar a depuração.

Ref.: 1683