작업 실행에 대한 이벤트 모니터링하기

작업 실행 상태에 대한 정보를 제공하는 이벤트를 기록하도록 Snowflake를 구성할 수 있습니다. 이벤트는 작업과 연결된 활성 이벤트 테이블 에 기록됩니다.

예를 들어, 이벤트 테이블을 데이터베이스에 연결 했다고 가정해 보겠습니다. 해당 데이터베이스의 작업이 실행되면 Snowflake는 해당 이벤트 테이블에 이벤트를 기록합니다.

새로운 데이터에 경고 를 설정하여 이벤트 테이블을 모니터링할 수 있습니다. 작업 실행에 실패하면 알림을 보내도록 경고를 구성할 수 있습니다.

다음 섹션에서는 이벤트를 캡처하기 위해 이벤트 로그를 설정하는 방법, 경고를 설정하는 방법, 이벤트 테이블에 기록된 이벤트를 해석하는 방법에 대해 설명합니다.

참고

작업에 대한 이벤트를 로그 기록하면 비용이 발생합니다. 원격 분석 데이터 수집 비용 섹션을 참조하십시오.

제한 사항

  • 작업 이벤트는 Snowflake Native Apps에서 지원되지 않습니다.

캡처할 이벤트의 심각도 수준을 설정합니다

이벤트 테이블에 기록할 작업 이벤트를 설정하려면 이벤트 테이블에 캡처할 이벤트의 심각도 수준 을 설정하십시오.

  • ERROR: 작업 실행 실패에 대한 이벤트.

  • INFO: 작업 실행 성공 및 실패에 대한 이벤트.

레벨을 설정하려면 계정 또는 오브젝트에 대해 LOG_LEVEL 매개 변수를 설정합니다. 다음에 대한 수준을 설정할 수 있습니다.

  • 계정의 모든 오브젝트,

  • 데이터베이스 또는 스키마의 모든 오브젝트.

  • 특정 작업.

참고

계정 또는 오브젝트에 심각도 수준이 설정되어 있지 않으면 이벤트가 캡처되지 않습니다.

예:

  • 계정의 모든 오브젝트에 대한 ERROR 레벨 이벤트 및 메시지를 캡처하려면 ALTER ACCOUNT SET LOG_LEVEL 를 실행합니다.

    ALTER ACCOUNT SET LOG_LEVEL = ERROR;
    
    Copy

    이 수준은 UDFs, 저장 프로시저, 동적 테이블 및 작업을 포함하여 계정의 모든 유형의 오브젝트에 영향을 줍니다.

  • my_db 데이터베이스의 모든 오브젝트에 대한 INFO 레벨 이벤트 및 메시지를 캡처하려면 ALTER DATABASE … SET LOG_LEVEL 을 실행합니다.

    ALTER DATABASE my_db SET LOG_LEVEL = INFO;
    
    Copy

    계정에서 수준을 설정하는 경우와 마찬가지로 데이터베이스에서 수준을 설정하면 UDFs, 저장 프로시저, 동적 테이블 및 작업을 포함한 데이터베이스의 모든 유형의 오브젝트에 영향을 줍니다.

  • my_task 작업에 대한 ERROR 수준 이벤트를 캡처하려면 ALTER TASK … SET LOG_LEVEL 을 실행합니다.

    ALTER TASK my_task SET LOG_LEVEL = ERROR;
    
    Copy

작업 완료 이벤트에 대한 새로운 데이터에 대한 경고 설정하기

로깅 이벤트에 대한 심각도 수준을 설정한 후에는 새로운 데이터에 대한 경고를 설정하여 작업 완료 실패를 나타내는 새 이벤트가 있는지 이벤트 테이블을 모니터링할 수 있습니다. 이벤트 테이블에 새 행이 삽입되고 경고에 지정된 조건을 충족하면 새로운 데이터에 대한 경고가 트리거됩니다.

참고

새 데이터에 대한 경고를 만들려면 이벤트 테이블을 쿼리하는 데 필요한 권한이 부여된 역할을 사용해야 합니다.

경고 조건에서 작업 완료 이벤트를 쿼리하려면 resource_attributes:"snow.executable.type" = 'TASK' 에서 행을 선택합니다. 이벤트 목록의 범위를 좁히려면 다음 열을 필터링하면 됩니다.

  • 결과를 특정 데이터베이스의 작업으로 제한하려면 resource_attributes:"snow.database.name" 을 사용합니다.

  • 작업 실행에 실패한 이벤트를 반환하려면 value:state = 'FAILED' 를 사용합니다.

작업 실행 이벤트에 대해 기록된 값에 대한 자세한 내용은 작업 이벤트에 대해 기록된 정보 섹션을 참조하십시오.

예를 들어, 다음 문은 my_db 데이터베이스의 작업에 대해 작업 완료가 실패할 때 작업을 수행하는 새로운 데이터에 대한 경고를 생성합니다. 이 예제에서는 다음을 가정합니다.

CREATE ALERT my_alert_on_task_failures
  IF( EXISTS(
    SELECT * FROM SNOWFLAKE.TELEMETRY.EVENT_TABLE
      WHERE resource_attributes:"snow.executable.type" = 'task'
        AND resource_attributes:"snow.database.name" = 'my_db'
        AND record:"severity_text" = 'ERROR'
        AND value:"state" = 'FAILED'))
  THEN
    BEGIN
      LET result_str VARCHAR;
      (SELECT ARRAY_TO_STRING(ARRAY_ARG(name)::ARRAY, ',') INTO :result_str
         FROM (
           SELECT resource_attributes:"snow.executable.name"::VARCHAR name
             FROM TABLE(RESULT_SCAN(SNOWFLAKE.ALERT.GET_CONDITION_QUERY_UUID()))
             LIMIT 10
         )
      );
      CALL SYSTEM$SEND_SNOWFLAKE_NOTIFICATION(
        SNOWFLAKE.NOTIFICATION.TEXT_PLAIN(:result_str),
        '{"my_slack_integration": {}}'
      );
    END;
Copy

이벤트 테이블에서 작업 완료 이벤트 쿼리하기

이벤트 테이블에서 작업 완료가 실패했음을 나타내는 이벤트를 쿼리할 수도 있습니다.

이벤트 테이블을 쿼리하는 데 필요한 역할과 결과를 필터링하는 데 사용할 수 있는 조건에 대한 자세한 내용은 작업 완료 이벤트에 대한 새로운 데이터에 대한 경고 설정하기 섹션을 참조하십시오.

예를 들어, 타임스탬프, 작업 이름, 쿼리 ID, my_db 데이터베이스의 작업 오류에 대한 오류 메시지를 가져오려면:

SELECT
    timestamp,
    resource_attributes:"snow.executable.name"::VARCHAR AS task_name,
    resource_attributes:"snow.query.id"::VARCHAR AS query_id,
    value:message::VARCHAR AS error
  FROM my_event_table
  WHERE
    resource_attributes:"snow.executable.type" = 'TASK' AND
    resource_attributes:"snow.database.name" = 'MY_DB' AND
    value:state = 'FAILED'
  ORDER BY timestamp DESC;
Copy
+-------------------------+-----------+--------------------------------------+------------------------------------------------------+
| TIMESTAMP               | TASK_NAME | QUERY_ID                             | ERROR                                                |
|-------------------------+-----------+--------------------------------------+------------------------------------------------------|
| 2025-02-18 00:21:19.461 | T1        | 01ba76b5-0107-e56d-0000-a995024f4222 | 002003: SQL compilation error:                       |
|                         |           |                                      | Object 'MY_TABLE' does not exist or not authorized.  |
+-------------------------+-----------+--------------------------------------+------------------------------------------------------+

다음 예제는 스키마 my_schema 에서 작업 오류에 대한 모든 열을 검색합니다.

SELECT *
  FROM my_event_table
  WHERE
    resource_attributes:"snow.executable.type" = 'FAILED' AND
    resource_attributes:"snow.schema.name" = 'MY_SCHEMA' AND
    value:state = 'FAILED'
  ORDER BY timestamp DESC;
Copy
+-------------------------+-----------------+-------------------------+-------+----------+------------------------------------------------------------+-------+------------------+-------------+-------------------------------+-------------------+------------------------------------------------------------------------------------------------------+-----------+
| TIMESTAMP               | START_TIMESTAMP | OBSERVED_TIMESTAMP      | TRACE | RESOURCE | RESOURCE_ATTRIBUTES                                        | SCOPE | SCOPE_ATTRIBUTES | RECORD_TYPE | RECORD                        | RECORD_ATTRIBUTES | VALUE                                                                                                | EXEMPLARS |
|-------------------------+-----------------+-------------------------+-------+----------+------------------------------------------------------------+-------+------------------+-------------+-------------------------------+-------------------+------------------------------------------------------------------------------------------------------+-----------|
| 2025-02-18 00:21:19.461 | NULL            | 2025-02-18 00:21:19.461 | NULL  | NULL     | {                                                          | NULL  | NULL             | EVENT       | {                             | NULL              | {                                                                                                    | NULL      |
|                         |                 |                         |       |          |   "snow.database.id": 49,                                  |       |                  |             |   "name": "execution.status", |                   |   "message": "002003: SQL compilation error:\nObject 'EMP_TABLE' does not exist or not authorized.", |           |
|                         |                 |                         |       |          |   "snow.database.name": "MY_DB",                        |       |                  |                |   "severity_text": "ERROR"    |                   |   "state": "FAILED"                                                                                  |           |
|                         |                 |                         |       |          |   "snow.executable.id": 518,                               |       |                  |             | }                             |                   | }                                                                                                    |           |
|                         |                 |                         |       |          |   "snow.executable.name": "T1",                            |       |                  |             |                               |                   |                                                                                                      |           |
|                         |                 |                         |       |          |   "snow.executable.type": "TASK",                          |       |                  |             |                               |                   |                                                                                                      |           |
|                         |                 |                         |       |          |   "snow.owner.id": 2601,                                   |       |                  |             |                               |                   |                                                                                                      |           |
|                         |                 |                         |       |          |   "snow.owner.name": "DATA_ADMIN",                         |       |                  |             |                               |                   |                                                                                                      |           |
|                         |                 |                         |       |          |   "snow.owner.type": "ROLE",                               |       |                  |             |                               |                   |                                                                                                      |           |
|                         |                 |                         |       |          |   "snow.query.id": "01ba76b5-0107-e56d-0000-a995024f4222", |       |                  |             |                               |                   |                                                                                                      |           |
|                         |                 |                         |       |          |   "snow.schema.id": 411,                                   |       |                  |             |                               |                   |                                                                                                      |           |
|                         |                 |                         |       |          |   "snow.schema.name": "MY_SCHEMA",                      |       |                  |             |                               |                   |                                                                                                      |              |
|                         |                 |                         |       |          |   "snow.warehouse.id": 41,                                 |       |                  |             |                               |                   |                                                                                                      |           |
|                         |                 |                         |       |          |   "snow.warehouse.name": "INTAKE_WAREHOUSE"                |       |                  |             |                               |                   |                                                                                                      |           |
|                         |                 |                         |       |          | }                                                          |       |                  |             |                               |                   |                                                                                                      |           |
+-------------------------+-----------------+-------------------------+-------+----------+------------------------------------------------------------+-------+------------------+-------------+-------------------------------+-------------------+------------------------------------------------------------------------------------------------------+-----------+

작업 이벤트에 대해 기록된 정보

작업이 실행되면 이벤트가 이벤트 테이블에 기록됩니다. 다음 섹션에서는 이벤트를 나타내는 이벤트 테이블 행에 대해 설명합니다.

이벤트 테이블 열 값

작업이 완료되거나 실패하면 다음 값을 가진 행이 이벤트 테이블에 삽입됩니다.

참고

열이 아래에 목록에 없는 경우 해당 이벤트의 열 값은 NULL 입니다.

데이터 타입

설명

timestamp

TIMESTAMP_NTZ

이벤트가 생성된 UTC 타임스탬프입니다.

observed_timestamp

TIMESTAMP_NTZ

로그에 사용되는 UTC 시간입니다. 현재 이 값은 timestamp 열에 있는 값과 동일합니다.

resource_attributes

OBJECT

실행된 작업을 식별하는 특성.

record_type

STRING

이벤트 유형으로, 작업 실행에 대한 EVENT 입니다.

record

OBJECT

작업 실행 상태에 대한 자세한 내용.

value

VARIANT

작업 실행의 상태 및 실행에 실패한 경우 실패에 대한 오류 메시지를 표시합니다.

resource_attributes 열의 키-값 페어

resource_attributes 열에는 다음 키-값 페어와 함께 OBJECT 값이 포함됩니다.

속성 이름

특성 유형

설명

snow.database.id

INTEGER

작업이 포함된 데이터베이스의 내부/시스템 생성 식별자입니다.

12345

snow.database.name

VARCHAR

작업이 포함된 데이터베이스의 이름입니다.

MY_DATABASE

snow.executable.id

INTEGER

실행된 작업의 내부/시스템 생성 식별자입니다.

12345

snow.executable.name

VARCHAR

실행된 작업의 이름입니다.

MY_TASK

snow.executable.type

VARCHAR

오브젝트의 유형입니다. 작업 이벤트의 경우 값은 TASK 입니다.

TASK

snow.owner.id

INTEGER

작업에 대한 OWNERSHIP 권한이 있는 역할의 내부/시스템 생성 식별자입니다.

12345

snow.owner.name

VARCHAR

작업에 대한 OWNERSHIP 권한이 있는 역할의 이름입니다.

MY_ROLE

snow.owner.type

VARCHAR

오브젝트를 소유하는 역할 유형(예: ROLE)입니다. . Snowflake Native App 이 오브젝트를 소유한 경우 값은 APPLICATION 입니다. . 삭제된 오브젝트에 소유자 역할이 없으므로 오브젝트를 삭제하는 경우 Snowflake는 NULL을 반환합니다.

ROLE

snow.query.id

VARCHAR

작업을 실행한 쿼리의 ID 입니다.

01ba7614-0107-e56c-0000-a995024f304a

snow.schema.id

INTEGER

작업을 포함하는 스키마의 내부/시스템 생성 식별자입니다.

12345

snow.schema.name

VARCHAR

작업을 포함하는 스키마의 이름입니다.

MY_SCHEMA

snow.warehouse.id

INTEGER

작업을 실행하는 데 사용되는 웨어하우스의 내부/시스템 생성 식별자입니다.

12345

snow.warehouse.name

VARCHAR

작업을 실행하는 데 사용되는 웨어하우스의 이름입니다.

MY_WAREHOUSE

record 열의 키-값 페어

record 열에는 다음 키-값 페어와 함께 OBJECT 값이 포함됩니다.

타입

설명

name

VARCHAR

이벤트 이름입니다. 작업 실행의 경우 값은 execution.status 입니다.

execution.status

severity_text

VARCHAR

이벤트의 심각도 수준(다음 값 중 하나)입니다.

  • INFO: 작업 실행에 성공했습니다.

  • ERROR: 작업 실행에 실패했습니다.

INFO

value 열의 키-값 페어

value 열에는 다음 키-값 페어와 함께 VARIANT 값이 포함됩니다.

타입

설명

state

VARCHAR

작업 실행 상태이며, 다음 값 중 하나가 될 수 있습니다.

  • SUCCEEDED: 작업 실행에 성공했습니다.

  • ERROR: 작업 실행에 실패했습니다.

SUCCEEDED

message

VARCHAR

state 의 값이 ERROR 인 경우 이 열에는 오류 메시지가 포함됩니다.