Snowpipe 이벤트 모니터링

Snowpipe 이벤트 모니터링

Snowflake가 파이프 상태에 대한 자세한 정보를 제공하는 이벤트를 기록하도록 구성할 수 있어요. 이러한 이벤트는 파이프와 연결된 활성 이벤트 테이블에 캡처돼요.

이 이벤트를 모니터링하면 다음 영역에 대한 통찰을 얻을 수 있어요.

  • 파이프 상태 변경: Snowpipe의 운영 상태 추적.
  • 파일 처리 진행 상황: Snowpipe 시스템을 통과하는 파일의 이동 이해.
  • 주기적이고 집계된 수집 통계 다이제스트: 데이터 수집에 대한 요약 통계 획득.

또한 다음 중요한 조건에 대한 알림을 구성할 수 있어요.

  • 대량의 들어오는 파일
  • 높은 수집 지연 시간
  • 파이프 오류
  • 파일 오류

다음 섹션은 Snowpipe용 이벤트 로깅을 활성화하고, 로그 이벤트의 심각도 수준을 구성하고, 이벤트 테이블에 기록된 이벤트를 해석하는 방법을 설명해요.

  • Snowpipe 이벤트 유형: 다양한 이벤트 범주와 그 세부 정보.
  • 캡처할 이벤트의 심각도 수준 설정: 중요도에 따라 기록할 이벤트 구성.
  • Snowpipe 이벤트를 위한 이벤트 테이블 조회: 이벤트 데이터 검색 및 분석 방법.
  • Snowpipe 이벤트에 대해 기록된 정보: 이벤트 테이블 열 안의 데이터 구조와 의미.

주의 — Snowpipe 이벤트 로깅에는 비용이 발생해요. 자세한 내용은 원격 측정 데이터 수집 비용을 참고해요.

출처: Documentation

본문

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

이 이벤트는 파이프의 상태가 변경될 때 발생해요. 새 상태는 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_ADMIN
  • STOPPED_CLONED
  • STOPPED_FEATURE_DISABLED

다음 이유로 파이프가 중지되었으면 ERROR:

  • STOPPED_STAGE_ALTERED
  • STOPPED_STAGE_DROPPED
  • STOPPED_FILE_FORMAT_DROPPED
  • STOPPED_NOTIFICATION_INTEGRATION_DROPPED
  • STOPPED_MISSING_PIPE
  • STOPPED_MISSING_TABLE
  • STALLED_COMPILATION_ERROR
  • STALLED_INITIALIZATION_ERROR
  • STALLED_EXECUTION_ERROR
  • STALLED_INTERNAL_ERROR
  • STALLED_STAGE_PERMISSION_ERROR

pipe_throttled

이 이벤트는 Snowpipe가 제한(throttle)되면 발생해요.

{
  "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_EVENT_LEVEL 매개 변수를 설정해야 해요. LOG_EVENT_LEVEL은 심각도에 따라 캡처할 로그 이벤트를 결정해요. 자세한 내용은 매개 변수와 이벤트를 제어하는 새 LOG_EVENT_LEVEL 매개 변수를 참고해요.

  • ERROR: 해결하려면 사람의 개입이 필요한 변경을 알리는 이벤트에 사용.
  • WARN: 사람의 개입 없이 해결할 수 있는 문제를 알리는 이벤트에 사용.
  • INFO: 일반적으로 유용하고 대량 이벤트가 아닌 사용자 시작 이벤트에 사용.
  • DEBUG: 대량 이벤트에 사용.
  • TRACE: 가장 낮은 로깅 수준으로, 매우 자세한 정보를 캡처.

주의 — 심각도 수준이 계정 수준 또는 파이프 수준에서 설정되지 않으면 이벤트가 캡처되지 않아요.

예제:

계정의 모든 객체에 대해 ERROR 수준 이벤트를 캡처하려면 다음 코드를 실행해요.

ALTER ACCOUNT <my_account_name> SET LOG_EVENT_LEVEL = ERROR;

특정 파이프에 대해 INFO 수준 이벤트를 캡처하려면 다음 코드를 실행해요.

ALTER PIPE <my_pipe_name> SET LOG_EVENT_LEVEL = INFO;

각 이벤트 유형의 심각도 수준

다음 표는 LOG_EVENT_LEVEL을 사용할 때 각 Snowpipe 이벤트 유형의 기본 또는 권장 심각도를 요약해요.

이벤트 심각도
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_ADMIN
  • STOPPED_CLONED
  • STOPPED_FEATURE_DISABLED

다음 이유로 파이프가 중지되었으면 ERROR:

  • STOPPED_STAGE_ALTERED
  • STOPPED_STAGE_DROPPED
  • STOPPED_FILE_FORMAT_DROPPED
  • STOPPED_NOTIFICATION_INTEGRATION_DROPPED
  • STOPPED_MISSING_PIPE
  • STOPPED_MISSING_TABLE
  • STALLED_COMPILATION_ERROR
  • STALLED_INITIALIZATION_ERROR
  • STALLED_EXECUTION_ERROR
  • STALLED_INTERNAL_ERROR
  • STALLED_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 TIMESTAMP_NTZ 이벤트가 생성된 UTC 타임스탬프.
resource_attributes OBJECT 데이터베이스, 스키마, 파이프 이름 같은 Snowpipe 이벤트를 식별하는 특성.
record_type STRING 기록된 이벤트의 유형. Snowpipe 이벤트의 경우 이 값은 항상 EVENT예요.
record OBJECT name과 severity_text를 포함하는 Snowpipe 이벤트 실행 상태에 대한 자세한 정보.
value 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 열의 키-값 쌍

record 열은 다음 키-값 쌍을 가진 OBJECT 값을 포함해요.

키 유형 설명 예
name VARCHAR 이벤트의 이름. "pipe_lifecycle"
severity_text VARCHAR 이벤트의 심각도 수준. "INFO"

더 알아보기