추적에 사용자 지정 범위 추가하기

프로시저나 함수에 대한 처리기 내에서 더욱 세분화된 추적을 위해 추적에 사용자 지정 범위를 추가할 수 있습니다.

기본적으로 추적을 활성화 한 경우 (Snowflake가 추적 이벤트를 표시하는 방법 에 설명된 대로) Snowflake가 범위를 시작하고 해당 범위에 모든 추적 이벤트를 추가합니다. (이를 내부적으로 “auto_instrumented” 범위하고 합니다.) OpenTelemetry APIs를 사용하여 사용자의 자체 범위를 생성할 수 있습니다. 새 범위에는 해당 언어의 OpenTelemetry API 또는 Snowflake API를 사용하여 이벤트와 특성을 추가할 수 있습니다.

예를 들어, 코드를 사용하여 ML 모델을 훈련시킬 때와 같이 프로시저 내에서 발생하는 계산이 많은 작업에 대한 추적 데이터를 분리하려는 경우 고유 범위를 생성할 수 있습니다.

사용자가 생성하는 사용자 지정 범위는 OpenTelemetry에서 생성한 범위의 기본 동작과 일치합니다.

지원되는 언어

다음 언어로 작성된 코드에서 사용자 지정 범위를 추가할 수 있으며, 처리기 코드가 Snowpark APIs 로 작성된 경우도 포함됩니다.

언어/유형

Java

Python

JavaScript

Scala

Snowflake Scripting

저장 프로시저 핸들러

[1]

Streamlit 앱

UDF 핸들러(스칼라 함수)

[1]

UDTF 핸들러(테이블 함수)

[1] [2]

사용자 지정 범위 만들기

처리기 코드를 사용하여 사용자 지정 범위를 추가하려면 기존 Snowflake 원격 분석 환경 내에서 처리기 언어의 OpenTelemetry API를 사용하여 새 범위를 생성하고 필요에 따라 이벤트와 특성을 추가한 다음 범위를 닫습니다.

  1. OpenTelemetry API를 사용하여 범위의 컨텍스트를 관리할 추적기를 생성합니다.

    기존 Snowflake 원격 분석 환경에서 생성된 이 추적기를 통해 이벤트 테이블에서 추적 데이터를 캡처하는 기존 인프라를 사용하는 사용자 지정 범위를 생성할 수 있습니다.

  2. 새 추적기에서 새 범위가 현재 범위가 되도록 API를 사용하여 사용자 지정 범위를 생성합니다.

    Snowflake에서 관리하는 기존 컨텍스트에 새 범위를 생성하면 trace_idparent_span_id 값을 포함한 컨텍스트의 정보가 Snowflake 기본 범위에서 다른 범위로 전달되도록 할 수 있습니다.

  3. 사용자 지정 범위에서 코드가 완료되면 처리기가 실행을 완료하기 전에 범위를 닫아야 이벤트 테이블에서 추적 데이터를 캡처할 수 있습니다.

    사용자 지정 범위의 이 동작은 OpenTelemetry의 기본 동작과 일치합니다.

지원되는 언어로 사용자 지정 범위를 추가하는 방법에 대한 내용은 다음 항목을 참조하십시오.

Python 예제

다음 예제의 코드는 OpenTelemetry Python API 를 사용하여 start_as_current_span 가 있는 현재 범위로 my.span 범위를 생성합니다. 그런 다음 OpenTelemetry Python API 를 사용하여 새 범위에 특성이 있는 이벤트를 추가합니다.

처리기가 실행을 완료하기 전에 범위가 끝나지 않으면 이벤트 데이터는 이벤트 테이블에 캡처되지 않습니다. 이 예제에서는 with 문이 끝나면 범위 닫기가 자동으로 수행됩니다.

CREATE OR REPLACE FUNCTION customSpansPythonExample() RETURNS STRING
LANGUAGE PYTHON
RUNTIME_VERSION = 3.9
PACKAGES = ('snowflake-telemetry-python', 'opentelemetry-api')
HANDLER = 'custom_spans_function'
AS $$
from snowflake import telemetry
from opentelemetry import trace

def custom_spans_function():
  tracer = trace.get_tracer("my.tracer")
  with tracer.start_as_current_span("my.span") as span:
    span.add_event("Event2 in custom span", {"key1": "value1", "key2": "value2"})

  return "success"
$$;
Copy