처리되지 않은 예외의 메시지 캡처하기

기본적으로 이벤트 테이블을 설정 하면 Snowflake는 이벤트 테이블의 프로시저 및 UDF 처리기에서 처리되지 않은 예외를 자동으로 기록합니다. 이러한 메시지를 캡처하려면 로깅 또는 추적과 관련된 처리기 코드를 추가하지 않아도 됩니다. 처리되지 않은 예외가 자동으로 기록되지 않도록 이 기능을 비활성화할 수 있습니다.

중요

오류 메시지에는 민감한 정보가 포함될 수 있습니다. 잠재적으로 민감한 정보를 이벤트 테이블에 캡처하지 않으려면 이 기능을 비활성화하는 것이 좋습니다. 자세한 내용은 민감한 데이터 보호하기 을 참조하십시오.

처리되지 않은 예외를 캡처하도록 로깅 및 추적 구성하기

Snowflake가 처리되지 않은 예외에 대한 항목을 캡처하도록 로그 또는 추적 수준을 설정합니다. 항목을 로그 항목, 추적 이벤트 항목 또는 둘 다로 캡처할 수 있습니다.

  • 메시지를 로그 항목으로 캡처하려면 로그 수준 을 ERROR 이상의 세부 정보 표시 수준으로 설정하십시오.

  • 메시지를 추적 이벤트 항목으로 캡처하려면 추적 수준 을 ALWAYS 또는 ON_EVENT 로 설정하십시오.

처리되지 않은 예외에 대해 캡처된 데이터

메시지 데이터를 로그 항목, 추적 이벤트 또는 둘 다로 캡처할 수 있습니다. 캡처된 데이터는 로그 이벤트 항목과 추적 이벤트 항목 간에 차이가 있습니다.

로그 항목에 캡처된 데이터

기본적으로, Snowflake는 프로시저 및 UDF 처리기에서 처리되지 않은 예외에 대해 이벤트 테이블에 다음을 기록합니다.

열

데이터

RECORD 열

값이 현재 언어 런타임에 대해 심각도가 가장 높은 오류 수준인 severity_text 특성. 예를 들어 Python으로 작성된 처리기의 경우 이 값은 FATAL 입니다.

RECORD_ATTRIBUTES 열

처리되지 않은 예외에 대해 다음 특성이 기록됩니다.

  • exception.message – 오류 메시지.

  • exception.type – 예외 클래스의 이름.

  • exception.stacktrace – 언어 런타임으로 형식이 지정된 예외의 스택 추적.

  • exception.escaped – 이 항목이 처리되지 않은 예외에서 발생한 경우 true 입니다.

VALUE 열

문자열 exception.

예

다음 예제의 코드는 UDF 처리기에서 처리되지 않은 예외에 대해 기록된 로그 데이터의 이벤트 테이블을 쿼리합니다.

로그 데이터의 이벤트 테이블 쿼리에 대한 자세한 내용은 로그 메시지 보기 섹션을 참조하십시오.

SET event_table_name = 'my_db.public.my_event_table';

SELECT
  RECORD['severity_text'] AS severity,
  RECORD_ATTRIBUTES['exception.message'] AS error_message,
  RECORD_ATTRIBUTES['exception.type'] AS exception_type,
  RECORD_ATTRIBUTES['exception.stacktrace'] AS stacktrace
FROM
  my_event_table
WHERE
  RECORD_TYPE = 'LOG';

쿼리에서 다음 출력이 가능합니다.

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| SEVERITY | ERROR_MESSAGE                                        | EXCEPTION_TYPE | STACKTRACE                                                                                                                                          |
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| "FATAL"  | "could not convert string to float: '$1,000,000.00'" | "ValueError"   | "Traceback (most recent call last):\n  File \"_udf_code.py\", line 6, in compute\nValueError: could not convert string to float: '$1,000,000.00'\n" |
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

추적 이벤트 항목에 캡처된 데이터

기본적으로, Snowflake는 프로시저 및 UDF 처리기에서 처리되지 않은 예외에 대해 이벤트 테이블에 다음을 기록합니다.

열

데이터

RECORD 열

값이 exception 인 name 특성과 값이 STATUS_CODE_ERROR 인 status 특성.

RECORD_ATTRIBUTES 열

처리되지 않은 예외에 대해 다음 특성이 기록됩니다.

  • exception.message – 오류 메시지.

  • exception.type – 예외 클래스의 이름.

  • exception.stacktrace – 언어 런타임으로 형식이 지정된 예외의 스택 추적.

  • exception.escaped – 이 항목이 처리되지 않은 예외에서 발생한 경우 true 입니다.

예

다음 예제의 코드는 UDF 처리기에서 처리되지 않은 예외에 대해 기록된 추적 이벤트 데이터의 이벤트 테이블을 쿼리합니다.

추적 이벤트 데이터의 이벤트 테이블 쿼리에 대한 자세한 내용은 추적 데이터 보기 섹션을 참조하십시오.

Span 예
SET event_table_name = 'my_db.public.my_event_table';

SELECT
  RECORD['status']['code'] AS span_status
FROM
  my_event_table
WHERE
  record_type = 'SPAN';

쿼리에서 다음 출력이 가능합니다.

-----------------------
| SPAN_STATUS         |
-----------------------
| "STATUS_CODE_ERROR" |
-----------------------
Span 이벤트 예
SET event_table_name = 'my_db.public.my_event_table';

SELECT
  RECORD['name'] AS event_name,
  RECORD_ATTRIBUTES['exception.message'] AS error_message,
  RECORD_ATTRIBUTES['exception.type'] AS exception_type,
  RECORD_ATTRIBUTES['exception.stacktrace'] AS stacktrace
FROM
  my_event_table
WHERE
  RECORD_TYPE = 'SPAN_EVENT';

쿼리에서 다음 출력이 가능합니다.

-----------------------------------------------------------------------------------------------------------------------------------------
| EVENT_NAME  | ERROR_MESSAGE                                        | EXCEPTION_TYPE | STACKTRACE                                      |
-----------------------------------------------------------------------------------------------------------------------------------------
| "exception" | "could not convert string to float: '$1,000,000.00'" | "ValueError"   | "  File \"_udf_code.py\", line 6, in compute\n" |
-----------------------------------------------------------------------------------------------------------------------------------------

민감한 데이터 보호하기

처리되지 않은 예외의 로그 및 추적 메시지에 민감한 데이터가 포함될 수 있다는 점을 고려하면 해당 데이터를 보호하기 위해 다음을 수행하는 것이 좋습니다.

  • 다음과 같은 방법으로 민감한 데이터를 보호하는 조치를 취하십시오.

    • 처리되지 않은 예외의 위험을 최소화하도록 예외 처리 코드를 개선합니다.

    • 개인 식별 정보(PII)가 포함된 행에 대한 액세스를 제한하도록 이벤트 테이블에 행 액세스 정책 을 적용합니다.

    • 이벤트 테이블 위에 뷰를 생성하고 이 뷰에 마스킹 정책을 적용하여 개인 식별 정보(PII)를 마스킹하거나 삭제합니다.

  • ENABLE_UNHANDLED_EXCEPTIONS_REPORTING 매개 변수를 false 로 설정하여 처리되지 않은 예외 로깅을 해제합니다.