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

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

참고

이 기능은 현재 Java 또는 Python으로만 작성된 처리기 코드에 대해 지원됩니다.

중요

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

처리되지 않은 예외 항목 캡처 활성화하기

처리되지 않은 예외에서 메시지 캡처를 활성화하려면 다음을 수행하십시오.

  1. 이벤트 테이블 설정하기 의 설명에 따라 이벤트 테이블을 설정합니다.

  2. ENABLE_UNHANDLED_EXCEPTIONS_REPORTING 매개 변수를 true 로 설정합니다.

    매개 변수 설정에 대한 자세한 내용은 매개 변수 관리 섹션을 참조하십시오.

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

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

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

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

처리되지 않은 예외 항목 캡처 활성화하기 에서 설명한 대로, 메시지 데이터를 로그 항목, 추적 이벤트 또는 둘 다로 캡처할 수 있습니다. 캡처된 데이터는 로그 이벤트 항목과 추적 이벤트 항목 간에 차이가 있습니다.

로그 항목에 캡처된 데이터

처리되지 않은 예외가 로그 메시지로 캡처되도록 설정 하면 Snowflake는 이벤트 테이블에 다음을 기록합니다.

데이터

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';
Copy

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

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| 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는 이벤트 테이블에 다음을 기록합니다.

데이터

RECORD 열

값이 exceptionname 특성과 값이 STATUS_CODE_ERRORstatus 특성.

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';
Copy

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

-----------------------
| 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';
Copy

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

-----------------------------------------------------------------------------------------------------------------------------------------
| 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" |
-----------------------------------------------------------------------------------------------------------------------------------------

민감한 데이터 보호하기

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

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

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

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

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

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