Snowpipe에 대한 이벤트 모니터링¶
파이프 상태에 대한 자세한 정보를 제공하는 이벤트를 기록하도록 Snowflake를 구성할 수 있습니다. 이러한 이벤트는 파이프와 연결된 활성 이벤트 테이블에 기록됩니다.
이러한 이벤트를 모니터링하면 다음에 대한 인사이트를 얻을 수 있습니다.
파이프 상태 변경 사항: Snowpipes의 작동 상태를 추적합니다.
파일 처리 진행률: Snowpipe 시스템을 거치는 파일 이동 과정을 파악합니다.
주기적으로 집계된 수집 통계 다이제스트: 데이터 수집에 대한 요약된 통계를 가져옵니다.
또한 다음과 같은 중요한 조건에 대한 경고를 구성할 수 있습니다.
많은 양의 수신 파일
높은 수집 대기 시간
파이프 오류
파일 오류
다음 섹션에서는 Snowpipe에 대한 이벤트 로깅을 활성화하고, 로그 수준을 구성하고, 이벤트 테이블에 기록된 이벤트를 해석하는 방법을 설명합니다.
Snowpipe 이벤트 유형: 다양한 이벤트 카테고리와 해당 세부 정보에 대해 알아봅니다.
캡처할 이벤트의 심각도 수준 설정: 중요도에 따라 기록되는 이벤트를 구성합니다.
Snowpipe 이벤트에 대해 이벤트 테이블 쿼리: 이벤트 데이터를 검색하고 분석하는 방법을 알아봅니다.
Snowpipe 이벤트에 대해 기록된 정보: 이벤트 테이블 열 내 데이터의 구조와 의미를 이해합니다.
조심
Snowpipe에 대한 이벤트 로깅에는 비용이 발생합니다. 자세한 내용은 :doc:`원격 분석 데이터 수집 비용</developer-guide/logging-tracing/logging-tracing-billing>`을 참조하세요.
Snowpipe 이벤트 유형¶
Snowpipe 이벤트는 이벤트 테이블의 RECORD 열 내에 있는 name 속성으로 식별됩니다.
file_lifecycle¶
file_lifecycle 이벤트는 Snowpipe 시스템을 거치는 파일의 이동 경로를 추적합니다. 파일의 상태는 RECEIVED, INGESTED 또는 ``ERRORED``일 수 있습니다.
RECEIVED: Snowpipe가 파일 요청을 수신하면 이벤트가 발생합니다. 파일이 이전에 처리된 경우 파이프는 이 파일을 건너뛸 수 있습니다. skipped 특성을 통해 이를 확인할 수 있습니다.
{
"TIMESTAMP": "<some_timestamp>",
"RESOURCE_ATTRIBUTES": {
"snow.database.name": "<MY_DB_NAME>",
"snow.schema.name": "<MY_SCHEMA_NAME>",
"snow.pipe.name": "<MY_PIPE_NAME>"
},
"RECORD_TYPE": "EVENT",
"RECORD": {
"name": "file_lifecycle",
"severity_text": "DEBUG"
},
"RECORD_ATTRIBUTES": {
"snow.file.path": "<a/path/to/a/file>"
},
"VALUE": {
"notification_channel": "<notification_channel>",
"file_content_key": "<file_content_key>",
"last_modified_time": "<last_modified_time>",
"state": "<received_or_skipped>"
}
}
INGESTED: Snowpipe가 파일을 성공적으로 수집하면 이벤트가 발생합니다.
{
"TIMESTAMP": "<some_timestamp>",
"RESOURCE_ATTRIBUTES": {
"snow.database.name": "<MY_DB_NAME>",
"snow.schema.name": "<MY_SCHEMA_NAME>",
"snow.pipe.name": "<MY_PIPE_NAME>"
},
"RECORD_TYPE": "EVENT",
"RECORD": {
"name": "file_lifecycle",
"severity_text": "DEBUG"
},
"RECORD_ATTRIBUTES": {
"snow.file.path": "<a/path/to/a/file>"
},
"VALUE": {
"notification_channel": "<notification_channel>",
"file_content_key": "<file_content_key>",
"state": "ingested"
}
}
ERRORED: Snowpipe에서 파일을 수집하지 못하면 이벤트가 발생합니다.
{
"TIMESTAMP": "<some_timestamp>",
"RESOURCE_ATTRIBUTES": {
"snow.database.name": "<MY_DB_NAME>",
"snow.schema.name": "<MY_SCHEMA_NAME>",
"snow.pipe.name": "<MY_PIPE_NAME>"
},
"RECORD_TYPE": "EVENT",
"RECORD": {
"name": "file_lifecycle",
"severity_text": "ERROR"
},
"RECORD_ATTRIBUTES": {
"snow.file.path": "<a/path/to/a/file>"
},
"VALUE": {
"notification_channel": "<notification_channel>",
"file_content_key": "<file_content_key>",
"first_error_message": "<first_error_message>",
"first_error_line_number": "<some_number>",
"first_error_character_pos": "<some_character_pos>",
"error_count": "<error_count>",
"error_limit": "<error_limit>",
"file_state": "FAILED"
}
}
notification_received¶
이 이벤트는 Snowflake가 알림 메시지를 수신할 때 발생합니다.
{
"TIMESTAMP": "<some_timestamp>",
"RESOURCE_ATTRIBUTES": {
"notification_channel_name": "<notification_channel_name>"
},
"RECORD_TYPE": "EVENT",
"RECORD": {
"name": "notification_received",
"severity_text": "TRACE"
},
"VALUE": {
"file_path": "<a/path/to/a/file>",
"file_content_key": "<file_content_key>",
"upstream_event_time": "<upstream_event_time>"
}
}
notification_channel_errored¶
이 이벤트는 Snowflake가 알림 채널에서 메시지를 읽는 동안 오류가 나타나면 발생합니다. 일반적으로 인증 문제와 같은 사용자 구성 오류를 나타냅니다.
{
"TIMESTAMP": "<some_timestamp>",
"RESOURCE_ATTRIBUTES": {
"notification_channel_name": "<notification_channel_name>"
},
"RECORD_TYPE": "EVENT",
"RECORD": {
"name": "notification_channel_errored",
"severity_text": "ERROR"
},
"VALUE": {
"first_error_message": "<error_message>"
}
}
pipe_lifecycle¶
이 이벤트는 파이프 상태<label-snowpipe_status>`가 변경될 때 발생합니다. 새 상태는 ``RUNNING`, PAUSED, STOPPED 또는 ``STALLED``일 수 있습니다.
RUNNING 또는 PAUSED 파이프 상태의 경우:
{
"TIMESTAMP": "<some_timestamp>",
"RESOURCE_ATTRIBUTES": {
"snow.database.name": "<MY_DB_NAME>",
"snow.schema.name": "<MY_SCHEMA_NAME>",
"snow.pipe.name": "<MY_PIPE_NAME>"
},
"RECORD_TYPE": "EVENT",
"RECORD": {
"name": "pipe_lifecycle",
"severity_text": "INFO"
},
"VALUE": {
"state": "<running_or_paused>"
}
}
STOPPED_* 또는 STALLED_* 파이프 상태의 경우: 이러한 상태는 파이프가 예기치 않게 파일 처리를 중단했음을 나타냅니다.
{
"TIMESTAMP": "<some_timestamp>",
"RESOURCE_ATTRIBUTES": {
"snow.database.name": "<MY_DB_NAME>",
"snow.schema.name": "<MY_SCHEMA_NAME>",
"snow.pipe.name": "<MY_PIPE_NAME>"
},
"RECORD_TYPE": "EVENT",
"RECORD": {
"name": "pipe_lifecycle",
"severity_text": "<WARN_or_ERROR>"
},
"VALUE": {
"state": "<pipe_status>",
"error_message": "<error_message>"
}
}
STOPPED_* 또는 STALLED_* 상태에 대한 ``severity_text``는 구체적인 이유에 따라 다릅니다.
다음과 같은 이유로 파이프가 중지된 경우 WARN:
STOPPED_BY_SNOWFLAKE_ADMINSTOPPED_CLONEDSTOPPED_FEATURE_DISABLED
다음과 같은 이유로 파이프가 중지된 경우 ERROR:
STOPPED_STAGE_ALTEREDSTOPPED_STAGE_DROPPEDSTOPPED_FILE_FORMAT_DROPPEDSTOPPED_NOTIFICATION_INTEGRATION_DROPPEDSTOPPED_MISSING_PIPESTOPPED_MISSING_TABLESTALLED_COMPILATION_ERRORSTALLED_INITIALIZATION_ERRORSTALLED_EXECUTION_ERRORSTALLED_INTERNAL_ERRORSTALLED_STAGE_PERMISSION_ERROR
pipe_throttled¶
이 이벤트는 Snowpipe가 제한되면 발생합니다.
{
"TIMESTAMP": "<some_timestamp>",
"RESOURCE_ATTRIBUTES": {
"snow.database.name": "<MY_DB_NAME>",
"snow.schema.name": "<MY_SCHEMA_NAME>",
"snow.pipe.name": "<MY_PIPE_NAME>"
},
"RECORD_TYPE": "EVENT",
"RECORD": {
"name": "pipe_throttled",
"severity_text": "WARN"
},
"VALUE": {
"throttled_files": "<throttled_file_name_list>"
}
}
캡처할 이벤트의 심각도 수준 설정¶
Snowpipe 이벤트가 이벤트 테이블에 기록되도록 하려면 파이프 수준 또는 계정 수준에서 LOG_LEVEL 매개 변수를 설정해야 합니다. ``LOG_LEVEL``는 심각도에 따라 캡처되는 이벤트를 결정합니다.
ERROR: 해결하기 위해 사람의 개입이 필요한 변경 사항을 나타내는 이벤트에 사용합니다.WARN: 사람의 개입 없이 해결할 수 있는 문제를 나타내는 이벤트에 사용합니다.INFO: 일반적으로 유용하지만 대량 이벤트가 아닌 사용자 시작 이벤트에 사용합니다.DEBUG: 대량 이벤트에 사용합니다.TRACE: 로깅의 가장 낮은 수준이며, 매우 자세한 정보를 캡처합니다.
조심
심각도 수준이 계정 수준 또는 파이프 수준에서 설정되지 않은 경우 이벤트가 캡처되지 않습니다.
예제:
계정의 모든 오브젝트에 대한 ERROR 수준 이벤트를 캡처하려면 다음 코드를 실행합니다.
ALTER ACCOUNT <my_account_name> SET LOG_LEVEL = ERROR;
특정 파이프에 대한 INFO 수준 이벤트를 캡처하려면 다음 코드를 실행합니다.
ALTER PIPE <my_pipe_name> SET LOG_LEVEL = INFO;
각 이벤트 유형의 로그 수준¶
다음 테이블에는 각 Snowpipe 이벤트 유형에 대한 기본 또는 권장 ``LOG_LEVEL``이 요약되어 있습니다.
이벤트 |
로그 수준 |
|---|---|
file_lifecycle - RECEIVED, INGESTED |
DEBUG |
file_lifecycle - ERRORED |
ERROR |
notification_received |
TRACE |
notification_channel_errored |
ERROR |
pipe_lifecycle - RUNNING, PAUSED |
INFO |
pipe_lifecycle - STOPPED |
WARN 또는 ERROR(다음 섹션 참조) |
pipe_throttled |
WARN |
pipe_lifecycle - STOPPED 로그 수준 세부 정보:
다음과 같은 이유로 파이프가 중지된 경우 WARN:
STOPPED_BY_SNOWFLAKE_ADMINSTOPPED_CLONEDSTOPPED_FEATURE_DISABLED
다음과 같은 이유로 파이프가 중지된 경우 ERROR:
STOPPED_STAGE_ALTEREDSTOPPED_STAGE_DROPPEDSTOPPED_FILE_FORMAT_DROPPEDSTOPPED_NOTIFICATION_INTEGRATION_DROPPEDSTOPPED_MISSING_PIPESTOPPED_MISSING_TABLESTALLED_COMPILATION_ERRORSTALLED_INITIALIZATION_ERRORSTALLED_EXECUTION_ERRORSTALLED_INTERNAL_ERRORSTALLED_STAGE_PERMISSION_ERROR
Snowpipe 이벤트에 대해 이벤트 테이블 쿼리¶
쿼리하기 전에 이벤트 테이블을 설정하고 이벤트를 캡처할 심각도 수준을 구성했는지 확인합니다.
다음 예제 쿼리는 파일 수집 중에 생성된 이벤트와 같은 Snowpipe 이벤트를 검색하는 방법을 보여줍니다.
SELECT
record_type,
record:"name" AS event_name,
record:"severity_text" AS log_level,
resource_attributes:"snow.database.name" AS database_name,
resource_attributes:"snow.schema.name" AS schema_name,
resource_attributes:"snow.pipe.name" AS pipe_name,
record_attributes,
PARSE_JSON(value):file_content_key AS file_content_key,
PARSE_JSON(value):state AS state
FROM {my_event_table_name}
ORDER BY state;
예시 출력(성공적인 파일 수집):
다음 출력은 파일에 대한 성공적인 처리를 나타내는 RECEIVED 및 INGESTED 이벤트를 모두 보여줍니다.
SCOPE |
RECORD_TYPE |
EVENT_NAME |
LOG_LEVEL |
DATABASE_NAME |
SCHEMA_NAME |
PIPE_NAME |
RECORD_ATTRIBUTES |
FILE_CONTENT_KEY |
STATE |
|---|---|---|---|---|---|---|---|---|---|
[NULL] |
EVENT |
“file_lifecycle” |
“DEBUG” |
“TESTDB” |
“TESTSH” |
“MYPIPE” |
{ “snow.file.path”: “data_0_0_0.event” } |
“ba1f2511fc30423bdbb183fe33f3dd0f” |
“INGESTED” |
[NULL] |
EVENT |
“file_lifecycle” |
“DEBUG” |
“TESTDB” |
“TESTSH” |
“MYPIPE” |
{ “snow.file.path”: “data_0_0_0.event” } |
“ba1f2511fc30423bdbb183fe33f3dd0f” |
“RECEIVED” |
Snowpipe 이벤트에 대해 기록된 정보¶
다음 섹션에서는 Snowpipe 이벤트에 대한 이벤트 테이블 내의 주요 열과 해당 내용에 대해 설명합니다. 다음 섹션에 명시적으로 나열되지 않은 열의 경우 Snowpipe 이벤트에서 해당 열의 값은 NULL입니다.
이벤트 테이블 열 값¶
열 |
데이터 타입 |
설명 |
|---|---|---|
타임스탬프 |
TIMESTAMP_NTZ |
이벤트가 생성된 시점의 UTC 타임스탬프입니다. |
resource_attributes |
OBJECT |
데이터베이스, 스키마 및 파이프 이름과 같이 Snowpipe 이벤트를 식별하는 특성입니다. |
record_type |
STRING |
기록된 이벤트의 유형입니다. Snowpipe 이벤트에서 이 값은 항상 EVENT입니다. |
레코드 |
OBJECT |
이름 및 severity_text를 포함하여 Snowpipe 이벤트의 실행 상태에 대한 자세한 정보를 포함합니다. |
값 |
VARIANT |
Snowpipe 이벤트와 관련된 추가 정보입니다. Snowpipe 작업이 실패한 경우 여기에는 오류 메시지가 포함됩니다. |
resource_attributes 열의 키-값 페어¶
resource_attributes 열에는 다음 키-값 페어가 있는 OBJECT 값이 포함됩니다.
속성 이름 |
특성 유형 |
설명 |
예 |
|---|---|---|---|
snow.database.name |
VARCHAR |
파이프와 연결된 데이터베이스의 이름입니다. |
“MY_DATABASE” |
snow.schema.name |
VARCHAR |
파이프와 연결된 스키마의 이름입니다. |
“MY_SCHEMA_NAME” |
snow.pipe.name |
VARCHAR |
파이프의 이름입니다. |
“MY_PIPE_NAME” |
notification_channel_name |
VARCHAR |
메시지를 수신했거나 오류가 발생한 알림 채널의 이름입니다. |
“arn:aws:sqs:us-west-2:774383465531:sf-snowpipe-AIDA3” |
레코드 열의 키-값 페어¶
record 열에는 다음 키-값 페어가 있는 OBJECT 값이 포함됩니다.
키 |
타입 |
설명 |
예 |
|---|---|---|---|
이름 |
VARCHAR |
이벤트의 이름입니다. |
“pipe_lifecycle” |
severity_text |
VARCHAR |
이벤트의 심각도 수준입니다. |
“INFO” |