SPCS_GET_LOGS
SPCS_GET_LOGS
지정한 서비스의 컨테이너에서 Snowflake가 수집한 로그를 반환해요. 자세한 내용은 컨테이너 로그 게시 및 접근(Publishing and accessing container logs) 문서를 참고해요.
본문
구문
<service_name>!SPCS_GET_LOGS(
[ START_TIME => <constant_expr> ],
[ END_TIME => <constant_expr> ] )
인자
START_TIME => constant_expr
- 로그를 가져올 시간 범위의 시작 시각(TIMESTAMP_LTZ 형식)이에요. 날짜·시간·타임스탬프 데이터를 만드는 데 쓸 수 있는 함수는 날짜 및 시간 함수(Date & time functions) 문서를 참고해요.
START_TIME을 지정하지 않으면 기본값은 하루 전이에요.
END_TIME => constant_expr
- 로그를 가져올 시간 범위의 종료 시각(TIMESTAMP_LTZ 형식)이에요.
END_TIME을 지정하지 않으면 기본값은 현재 타임스탬프예요.
출력
출력의 각 행은 이벤트 테이블에 기록된 하나의 로그 이벤트에 대응해요. 서비스가 stdout 또는 stderr로 출력하는 각 줄은 출력에서 한 행이 돼요.
이 함수는 다음 열을 반환해요.
| 열 | 데이터 타입 | 설명 |
|---|---|---|
| TIMESTAMP | TIMESTAMP_NTZ | Snowflake가 컨테이너에서 로그를 수집한 협정 세계시(UTC) 타임스탬프예요. 이 값은 이벤트 테이블의 TIMESTAMP 열에 대응해요. |
| INSTANCE_ID | NUMBER | 작업 서비스 인스턴스의 ID예요. 이 값은 이벤트 테이블의 RESOURCE_ATTRIBUTES 열에 있는 snow.service.instance 필드에 대응해요. |
| CONTAINER_NAME | VARCHAR | 컨테이너의 이름이에요. 이 값은 이벤트 테이블의 RESOURCE_ATTRIBUTES 열에 있는 snow.service.container.name 필드에 대응해요. |
| LOG | VARCHAR | Snowflake가 애플리케이션 컨테이너에서 수집한 로그예요. 이 값은 이벤트 테이블의 VALUE 열에 대응해요. |
| RECORD_ATTRIBUTES | OBJECT | 로그에 대한 추가 정보예요. 예를 들어 로그가 수집된 로그 스트림(stderr 또는 stdout) 등이 있어요. 이 값은 이벤트 테이블의 RECORD_ATTRIBUTES 열에 대응해요. |
접근 제어 요구 사항
이 작업을 실행하는 데 사용되는 역할은 최소한 다음 권한을 보유해야 해요.
| 권한 | 객체 | 참고 |
|---|---|---|
| MONITOR | Service |
스키마의 객체에 대해 작업하려면 상위 데이터베이스에 대한 권한이 하나 이상이고 상위 스키마에 대한 권한이 하나 이상이어야 해요.
지정된 권한 집합으로 사용자 지정 역할을 만드는 방법은 사용자 지정 역할 만들기(Creating custom roles) 문서를 참고해요. 보호 가능한 객체를 대상으로 SQL 작업을 수행할 때 역할과 권한 부여에 대한 일반 정보는 접근 제어 개요(Overview of Access Control) 문서를 참고해요.
사용법 참고 사항
- 출력에 컨테이너 로그가 나타나기까지 몇 분이 걸릴 수 있어요.
예제
지난 하루 동안 my_test_job 작업의 컨테이너에서 Snowflake가 수집한 로그를 가져와요.
SELECT * FROM TABLE(mydb.myschema.my_test_job!SPCS_GET_LOGS());
예제 출력:
+-------------------------+-------------+----------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------+
| TIMESTAMP | INSTANCE_ID | CONTAINER_NAME | LOG | RECORD_ATTRIBUTES |
|-------------------------+-------------+----------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------|
| 2025-06-26 00:23:40.281 | 0 | main | job-tutorial - INFO - Job finished | { |
| | | | | "log.iostream": "stdout" |
| | | | | } |
| 2025-06-26 00:23:38.787 | 0 | main | job-tutorial - INFO - Executing query [select current_time() as time,'hello'] and writing result to table [results] | { |
| | | | | "log.iostream": "stdout" |
| | | | | } |
| 2025-06-26 00:23:38.787 | 0 | main | job-tutorial - INFO - Connection succeeded. Current session context: database="TUTORIAL_DB", schema="DATA_SCHEMA", warehouse="TUTORIAL_WAREHOUSE", role="TEST_ROLE" | { |
| | | | | "log.iostream": "stdout" |
| | | | | } |
| 2025-06-26 00:23:36.852 | 0 | main | job-tutorial - INFO - Job started | { |
| | | | | "log.iostream": "stdout" |
| | | | | } |
+-------------------------+-------------+----------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------+
지난 3일 동안 my_test_job 작업의 컨테이너에서 Snowflake가 수집한 로그를 가져와요.
SELECT * FROM TABLE(mydb.myschema.my_test_job!SPCS_GET_LOGS(START_TIME => DATEADD('day', -3, CURRENT_TIMESTAMP())));
main이라는 컨테이너의 my_test_job 작업 인스턴스 0에 대한 로그를 가져와요. 다음 예제처럼 START_TIME과 END_TIME 인자를 생략하면 함수는 지난 하루 동안의 로그를 가져와요.
SELECT * FROM TABLE(mydb.myschema.my_test_job!SPCS_GET_LOGS())
WHERE instance_id = 0 AND container_name = 'main';
더 알아보기
- Snowflake Container Services 테이블 함수 — 서비스 모니터링 관련 함수