Cortex Search 요청 모니터링

Cortex Search는 모니터링 및 디버깅 목적으로 검색 요청에 대한 자세한 정보를 기록합니다. 요청 로깅을 활성화하면 Cortex Search Service에 대한 쿼리 패턴, 응답 시간, 요청 세부 정보를 검토할 수 있습니다.

요청 로그에 수집된 정보

Cortex Search 요청 로그에는 다음 정보가 포함됩니다.

  • 작업 유형(예: QUERY)

  • 쿼리 텍스트 및 매개 변수를 포함한 전체 요청 본문

  • 응답 상태 코드

  • 응답 시간(밀리초)

  • 데이터베이스, 스키마 및 서비스 이름

  • 사용자, 역할 및 세션 정보

요청 로깅 활성화

Cortex Search Service에 대한 요청 로그를 수집하려면 서비스의 REQUEST_LOGGING 속성을 활성화합니다.

서비스를 생성할 때 요청 로깅을 활성화할 수 있습니다.

CREATE CORTEX SEARCH SERVICE my_search_service
  ON text_col
  ATTRIBUTES category
  WAREHOUSE = my_wh
  TARGET_LAG = '1 hour'
  REQUEST_LOGGING = TRUE
AS (SELECT * FROM my_table);

기존 서비스에서 요청 로깅을 활성화할 수도 있습니다.

ALTER CORTEX SEARCH SERVICE my_search_service SET REQUEST_LOGGING = TRUE;

요청 로깅을 비활성화하려면 다음을 수행합니다.

ALTER CORTEX SEARCH SERVICE my_search_service SET REQUEST_LOGGING = FALSE;

작업 고려 사항

로그 데이터의 볼륨

로깅된 각 Cortex Search 요청은 SNOWFLAKE.LOCAL.AI_OBSERVABILITY_EVENTS 에 하나의 이벤트 행을 생성합니다. 누적되는 데이터의 양은 요청 속도와 로깅이 활성화된 상태로 유지되는 기간에 따라 다릅니다. 보존할 로그 볼륨과 일치하도록 보존 및 저장소를 설정합니다.

비용 고려 사항

SNOWFLAKE.LOCAL 테이블에 저장된 데이터는 Snowflake 저장소 요금 이 발생합니다. SQL로 요청 로그를 쿼리하는 경우에는 다른 쿼리와 마찬가지로 웨어하우스 리소스를 사용합니다.

쿼리 대기 시간

요청 로깅을 활성화해도 Cortex Search 쿼리 요청의 대기 시간에는 영향을 주지 않습니다.

Cortex Search 요청 로그에 액세스

Cortex Search Service에 대한 요청 로그는 이벤트 테이블 SNOWFLAKE.LOCAL.AI_OBSERVABILITY_EVENTS에 저장됩니다. 테이블 함수를 사용하거나 이벤트 테이블을 직접 쿼리하여 이러한 로그에 액세스할 수 있습니다.

snowflake.local.get_ai_observability_events 함수 사용하기

Cortex Search Service에 대한 MONITOR 권한이 있는 사용자는 snowflake.local.get_ai_observability_events 함수를 사용하여 해당 서비스에 대한 요청 로그를 볼 수 있습니다.

  1. MONITOR 권한 부여: 함수를 사용할 역할에 Cortex Search Service에 대한 MONITOR 권한을 부여합니다.

    USE ROLE ACCOUNTADMIN;
    GRANT MONITOR ON CORTEX SEARCH SERVICE <service_name> TO ROLE <role_name>;
    
  2. 가시성 이벤트 쿼리: MONITOR 권한이 있는 역할을 사용하여 snowflake.local.get_ai_observability_events 를 호출합니다.

    USE ROLE <role_name>;
    SELECT * FROM TABLE(snowflake.local.get_ai_observability_events(
      '<database_name>',
      '<schema_name>',
      '<service_name>',
      'CORTEX SEARCH SERVICE'
    ));
    

ACCOUNTADMIN으로 이벤트 테이블 쿼리하기

ACCOUNTADMIN 역할이 있는 사용자는 이벤트 테이블을 직접 쿼리할 수 있습니다.

USE ROLE ACCOUNTADMIN;
SELECT * FROM snowflake.local.ai_observability_events
WHERE observed_timestamp > TIMESTAMPADD(minute, -10, CURRENT_TIMESTAMP())
  AND record['name'] = 'CORTEX_SEARCH_REQUEST';

참고

ACCOUNTADMIN 역할이 있는 사용자는 snowflake.local.ai_observability_events 테이블을 생성하고 계정의 모든 Cortex Search Services에 대한 요청 이벤트에 액세스할 수 있습니다.

액세스 제어 및 권한

Cortex Search 요청 로그를 보려면 사용자에게 다음 중 하나가 있어야 합니다.

  • Cortex Search Service에 대한 OWNERSHIP 또는 MONITOR 권한

  • ACCOUNTADMIN 역할(직접 이벤트 테이블 액세스용)

다음 예제에서는 ACCOUNTADMIN 역할을 사용하여 Cortex Search 요청 로그를 보기 위한 필수 권한이 있는 새 역할 search_monitoring_role 을 생성합니다.

USE ROLE ACCOUNTADMIN;
CREATE ROLE search_monitoring_role;
GRANT MONITOR ON CORTEX SEARCH SERVICE my_search_service TO ROLE search_monitoring_role;
GRANT ROLE search_monitoring_role TO USER some_user;

출력 스키마

snowflake.local.get_ai_observability_events 함수는 다음 열이 포함된 테이블을 반환합니다.

열 이름

데이터 타입

설명

TIMESTAMP

TIMESTAMP_NTZ(9)

이벤트의 이름

START_TIMESTAMP

TIMESTAMP_NTZ(9)

이벤트의 시작 시간(NULL일 수 있음)

TRACE

OBJECT

이벤트에 대한 추적 정보(NULL일 수 있음)

RESOURCE_ATTRIBUTES

OBJECT

세션 ID, 사용자 ID, 사용자 이름, 역할 ID, 역할 이름을 포함한 세션, 사용자, 역할 정보

RECORD_TYPE

STRING

레코드 유형(일반적으로 Cortex Search 요청의 경우 ‘EVENT’)

RECORD

OBJECT

이벤트 이름 포함(일반적으로 ‘CORTEX_SEARCH_REQUEST’)

RECORD_ATTRIBUTES

OBJECT

데이터베이스, 스키마, 서비스, 사용자, 역할, 세션 정보를 포함한 자세한 가시성 메타데이터 포함

VALUE

VARIANT

작업 유형, 요청 본문, 응답 상태 코드, 응답 시간을 포함한 실제 요청 세부 정보 포함

VALUE 열에는 다음 두 키 필드가 포함됩니다.

  • snow.ai.observability.operation_type: 작업 유형(예: ‘QUERY’)

  • snow.ai.observability.request_body: 쿼리 텍스트 및 매개 변수를 포함한 전체 요청

  • snow.ai.observability.response_status_code: 응답의 HTTP 상태 코드

  • snow.ai.observability.response_time_ms: 응답 시간(밀리초)

  • snow.ai.observability.database.name: Cortex Search Service가 포함된 데이터베이스

  • snow.ai.observability.schema.name: Cortex Search Service가 포함된 스키마

  • snow.ai.observability.object.name: Cortex Search Service의 이름

다음은 VALUE 열에서 찾은 데이터의 예제입니다.

{
  "snow.ai.observability.operation_type": "QUERY",
  "snow.ai.observability.request_body": {
    "experimental": null,
    "limit": 10,
    "multi_index_query": null,
    "query": "hello"
  },
  "snow.ai.observability.response_status_code": 200,
  "snow.ai.observability.response_time_ms": 391
}

서비스에 대한 MONITOR 권한이 있는 역할을 사용하여 지난 24시간 동안의 요청 로그를 쿼리합니다.

SELECT
  timestamp,
  record_attributes['ai.observability.record_id']::STRING as query_id,
  value['snow.ai.observability.request_body']['query']::STRING AS query_text,
  value['snow.ai.observability.request_body']['limit']::INT AS limit,
  value['snow.ai.observability.response_status_code']::INT AS status_code,
  value['snow.ai.observability.response_time_ms']::INT AS response_time_ms,
  record_attributes['snow.ai.observability.database.name']::STRING AS database_name,
  record_attributes['snow.ai.observability.schema.name']::STRING AS schema_name,
  record_attributes['snow.ai.observability.object.name']::STRING AS service_name,
  record_attributes['snow.ai.observability.user.name']::STRING AS user_name,
  record_attributes['snow.ai.observability.role.name']::STRING AS role_name,
  record_attributes['snow.ai.observability.session.id']::STRING AS session_id,
FROM TABLE(snowflake.local.get_ai_observability_events(
  '<database_name>',
  '<schema_name>',
  '<service_name>',
  'CORTEX SEARCH SERVICE'
))
WHERE timestamp > TIMESTAMPADD(hour, -24, CURRENT_TIMESTAMP())
ORDER BY timestamp DESC;