Cortex Search-Anfragen überwachen

Cortex Search protokolliert detaillierte Informationen über Suchanfragen zu Überwachungs- und Debugging-Zwecken. Wenn die Anforderungsprotokollierung aktiviert ist, können Sie Abfragemuster, Antwortzeiten und Anforderungdetails für einen Cortex Search Service überprüfen.

In Anforderungsprotokollen erfasste Informationen

Die Anforderungsprotokolle von Cortex Search enthalten die folgenden Informationen:

  • Operationstyp (z. B. QUERY)

  • Vollständiger Anforderungstext, einschließlich Abfragetext und Parameter

  • Antwort-Statuscode

  • Antwortzeit in Millisekunden

  • Datenbank-, Schema- und Dienstname

  • Benutzer-, Rollen- und Sitzungsinformationen

Protokollierung von Anforderungen aktivieren

Um Anforderungsprotokolle für einen Cortex Search Service zu erfassen, aktivieren Sie die REQUEST_LOGGING-Eigenschaft für den Service.

Sie können die Anforderungsprotokollierung aktivieren, wenn Sie einen Service erstellen:

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

Sie können auch die Anforderungsprotokollierung für einen bestehenden Service aktivieren:

ALTER CORTEX SEARCH SERVICE my_search_service SET REQUEST_LOGGING = TRUE;

So deaktivieren Sie die Protokollierung von Anforderungen:

ALTER CORTEX SEARCH SERVICE my_search_service SET REQUEST_LOGGING = FALSE;

Hinweise zur Operation

Menge der Protokolldaten

Jede protokollierte Cortex Search-Anforderung erzeugt eine Ereigniszeile in SNOWFLAKE.LOCAL.AI_OBSERVABILITY_EVENTS. Wie viele Daten Sie erfassen, hängt von Ihrer Anforderungsrate ab und wie lange die Protokollierung aktiviert bleibt. Stellen Sie die Aufbewahrung und den Speicher so ein, dass sie der Protokollmenge entsprechen, die Sie voraussichtlich aufbewahren werden.

Hinweise zu Kosten

Für Daten, die in SNOWFLAKE.LOCAL-Tabellen gespeichert sind, fallen Snowflake-Speichergebühren an. Beim Abfragen von Anforderungsprotokollen mit SQL werden Warehouse-Ressourcen wie bei jeder anderen Abfrage verwendet.

Abfragelatenz

Die Aktivierung der Anforderungsprotokollierung wirkt sich nicht auf die Latenz von Cortex Search-Abfrageanforderungen aus.

Zugriff auf Anforderungsprotokolle von Cortex Search

Die Anforderungsprotokolle für einen Cortex Search Service werden in der Ereignistabelle SNOWFLAKE.LOCAL.AI_OBSERVABILITY_EVENTS gespeichert. Sie können auf diese Protokolleinträge über eine Tabellenfunktion oder durch direktes Abfragen der Ereignistabelle zugreifen.

Verwenden der Funktion snowflake.local.get_ai_observability_events

Benutzende mit der MONITOR-Berechtigung für einen Cortex Search Service können die Anforderungsprotokolle für diesen Service über die snowflake.local.get_ai_observability_events-Funktion einsehen.

  1. MONITOR-Berechtigung gewähren: Gewähren Sie die MONITOR-Berechtigung für den Cortex Search Service für die Rolle, die die Funktion verwenden wird:

    USE ROLE ACCOUNTADMIN;
    GRANT MONITOR ON CORTEX SEARCH SERVICE <service_name> TO ROLE <role_name>;
    
  2. Beobachtbarkeitsereignisse abfragen: Rufen Sie snowflake.local.get_ai_observability_events unter Verwendung der Rolle mit der MONITOR-Berechtigung auf:

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

Direktes Abfragen der Ereignistabelle als ACCOUNTADMIN

Benutzende mit der ACCOUNTADMIN-Rolle können die Ereignistabelle direkt abfragen:

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

Bemerkung

Benutzende mit der ACCOUNTADMIN-Rolle können die snowflake.local.ai_observability_events-Tabelle abfragen und auf die Anforderungsereignisse für alle Cortex Search Services im Konto zugreifen.

Zugriffssteuerung und Berechtigungen

Um die Anforderungsprotokolle von Cortex Search anzuzeigen, müssen Benutzende eine der folgenden Berechtigungen haben:

  • Berechtigung OWNERSHIP oder MONITOR für den Cortex Search Service

  • Die ACCOUNTADMIN-Rolle (für den direkten Zugriff auf die Ereignistabelle)

Im folgenden Beispiel wird die Rolle ACCOUNTADMIN verwendet, um eine neue search_monitoring_role-Rolle mit den erforderlichen Berechtigungen zum Anzeigen der Cortex Search-Anforderungsprotokolle zu erstellen.

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;

Ausgabeschema

Die Funktion snowflake.local.get_ai_observability_events gibt eine Tabelle mit den folgenden Spalten zurück:

Spalten

Spaltenname

Datentyp

Beschreibung

TIMESTAMP

TIMESTAMP_NTZ(9)

Zeitpunkt des Ereignisses

START_TIMESTAMP

TIMESTAMP_NTZ(9)

Startzeit des Ereignisses (kann NULL sein)

TRACE

OBJECT

Ablaufverfolgungsinformationen für das Ereignis (möglicherweise NULL)

RESOURCE_ATTRIBUTES

OBJECT

Enthält Sitzungs-, Benutzer- und Rolleninformationen, einschließlich Sitzungs-ID, Benutzer-ID, Benutzername, Rollen-ID und Rollenname

RECORD_TYPE

STRING

Typ des Datensatzes, normalerweise ‚EVENT ‚ für Cortex Search-Anforderungen

RECORD

OBJECT

Enthält den Namen des Ereignisses, normalerweise ‚CORTEX_SEARCH_REQUEST‘

RECORD_ATTRIBUTES

OBJECT

Enthält detaillierte Metadaten zur Beobachtbarkeit, einschließlich Datenbank-, Schema-, Service-, Benutzer-, Rollen- und Sitzungsinformationen

VALUE

VARIANT

Enthält die eigentlichen Anforderungsdetails, einschließlich Operationstyp, Anforderungstext, Antwortstatuscode und Antwortzeit

Die Spalte VALUE enthält die folgenden wichtigen Felder:

  • snow.ai.observability.operation_type: Die Art der Operation, z. B. ‚QUERY‘

  • snow.ai.observability.request_body: Die vollständige Anforderung, einschließlich Abfragetext und Parameter

  • snow.ai.observability.response_status_code: HTTP-Statuscode der Antwort

  • snow.ai.observability.response_time_ms: Antwortzeit in Millisekunden

  • snow.ai.observability.database.name: Datenbank, die den Cortex Search Service enthält

  • snow.ai.observability.schema.name: Schema, das den Cortex Search Service enthält

  • snow.ai.observability.object.name: Name des Cortex Search Service

Im Folgenden finden Sie ein Beispiel für Daten, die in der VALUE-Spalte zu finden sind:

{
  "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
}

Beispiel

Fragen Sie die Anforderungsprotokolle der letzten 24 Stunden ab, und verwenden Sie dazu eine Rolle mit der MONITOR-Berechtigung für den 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;