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 に1つのイベント行を生成します。どれだけのデータを蓄積するかは、リクエストレートと、ログが有効である期間によって異なります。保持する予想されるログ量に合わせて保持期間とストレージを設定します。

コストの考慮事項

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 Serviceのリクエストイベントにアクセスできます。

アクセス制御と権限

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;