Surveiller les requêtes Cortex Search

Cortex Search enregistre des informations détaillées sur les requêtes de recherche à des fins de surveillance et de débogage. Lorsque la journalisation des requêtes est activée, vous pouvez examiner les modèles de requêtes, les temps de réponse et les détails des requêtes pour un Cortex Search Service.

Informations collectées dans les journaux de requêtes

Les journaux de requêtes Cortex Search comprennent les informations suivantes :

  • Type d’opération (par exemple, QUERY)

  • Corps complet de la requête, y compris le texte et les paramètres de la requête

  • Code d’état de la réponse

  • Temps de réponse en millisecondes

  • Nom de la base de données, du schéma et du service

  • Informations sur l’utilisateur, le rôle et la session

Activer la journalisation des requêtes

Pour collecter des journaux de requêtes pour un Cortex Search Service, activez la propriété REQUEST_LOGGING sur le service.

Vous pouvez activer la journalisation des requêtes lorsque vous créez un service :

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);

Vous pouvez également activer la journalisation des requêtes sur un service existant :

ALTER CORTEX SEARCH SERVICE my_search_service SET REQUEST_LOGGING = TRUE;

Pour désactiver la journalisation des requêtes :

ALTER CORTEX SEARCH SERVICE my_search_service SET REQUEST_LOGGING = FALSE;

Considérations opérationnelles

Volume des données de journal

Chaque requête Cortex Search journalisée produit une ligne d’événement dans SNOWFLAKE.LOCAL.AI_OBSERVABILITY_EVENTS. La quantité de données que vous accumulez dépend de votre taux de requête et de la durée pendant laquelle la journalisation reste activée. Définissez la conservation et le stockage en fonction du volume de journal que vous prévoyez de conserver.

Considérations relatives aux clients

Les données stockées dans les tables SNOWFLAKE.LOCAL entraînent des frais de stockage Snowflake. Interroger les journaux de requêtes avec SQL utilise les ressources de l’entrepôt comme n’importe quelle autre requête.

Latence des requêtes

L’activation de la journalisation des requêtes n’affecte pas la latence des requêtes de Cortex Search.

Accéder aux journaux de requêtes Cortex Search

Les journaux de requêtes d’un Cortex Search Service sont stockés dans le tableau des événements SNOWFLAKE.LOCAL.AI_OBSERVABILITY_EVENTS. Vous pouvez accéder à ces journaux à l’aide d’une fonction de table ou en interrogeant directement le tableau des événements.

Utilisation de la fonction snowflake.local.get_ai_observability_events

Les utilisateurs disposant du privilège MONITOR sur un Cortex Search Service peuvent afficher les journaux de requêtes pour ce service en utilisant la fonction snowflake.local.get_ai_observability_events.

  1. Accorder le privilège MONITOR : Accordez le privilège MONITOR sur le Cortex Search Service au rôle qui utilisera la fonction :

    USE ROLE ACCOUNTADMIN;
    GRANT MONITOR ON CORTEX SEARCH SERVICE <service_name> TO ROLE <role_name>;
    
  2. Événements d’observabilité des requêtes : Appelez snowflake.local.get_ai_observability_events à l’aide du rôle avec le privilège MONITOR :

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

Interroger le tableau des événements en tant qu’ACCOUNTADMIN

Les utilisateurs disposant du rôle ACCOUNTADMIN peuvent interroger directement le tableau des événements :

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

Note

Les utilisateurs disposant du rôle ACCOUNTADMIN peuvent interroger la table snowflake.local.ai_observability_events et accéder aux événements de requêtes pour tous les Cortex Search Services du compte.

Contrôle d’accès et autorisations

Pour voir les journaux de requêtes Cortex Search, les utilisateurs doivent disposer de l’un des éléments suivants :

  • Privilège OWNERSHIP ou MONITOR sur le Cortex Search Service

  • Rôle ACCOUNTADMIN (pour l’accès direct au tableau des événements)

L’exemple suivant utilise le rôle ACCOUNTADMIN pour créer un nouveau rôle search_monitoring_role avec les autorisations requises pour voir les journaux de requêtes Cortex Search :

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;

Schéma de sortie

La fonction snowflake.local.get_ai_observability_events renvoie un tableau avec les colonnes suivantes :

Colonnes

Nom de la colonne

Type de données

Description

TIMESTAMP

TIMESTAMP_NTZ(9)

Heure de l’événement

START_TIMESTAMP

TIMESTAMP_NTZ(9)

Heure de début de l’événement (peut être NULL)

TRACE

OBJECT

Informations de traçage pour l’événement (peut être NULL)

RESOURCE_ATTRIBUTES

OBJECT

Contient des informations sur la session, l’utilisateur et le rôle, y compris l’ID de la session, l’ID de l’utilisateur, le nom de l’utilisateur, l’ID du rôle et le nom du rôle

RECORD_TYPE

STRING

Type d’enregistrement, généralement « EVENT » pour les requêtes Cortex Search

RECORD

OBJECT

Contient le nom de l’événement, généralement « CORTEX_SEARCH_REQUEST »

RECORD_ATTRIBUTES

OBJECT

Contient des métadonnées d’observabilité détaillées, y compris des informations sur la base de données, le schéma, le service, l’utilisateur, le rôle et la session

VALUE

VARIANT

Contient les détails de la requête actuelle, y compris le type d’opération, le corps de la requête, l’état de statut de la réponse et le temps de réponse

La colonne VALUE contient les champs clés suivants :

  • snow.ai.observability.operation_type : Le type d’opération, tel que « QUERY »

  • snow.ai.observability.request_body : La requête complète, y compris le texte et les paramètres de la requête

  • snow.ai.observability.response_status_code : code d’état HTTP de la réponse

  • snow.ai.observability.response_time_ms : Temps de réponse en millisecondes

  • snow.ai.observability.database.name : Base de données contenant le Cortex Search Service

  • snow.ai.observability.schema.name : Schéma contenant le Cortex Search Service

  • snow.ai.observability.object.name : Nom du Cortex Search Service

L’exemple suivant montre des données trouvées dans la colonne 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
}

Exemple

Interroger les journaux de requêtes des 24 dernières heures, en utilisant un rôle avec le privilège MONITOR sur le service.

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;