Monitoramento de solicitações do Cortex Search

O Cortex Search registra informações detalhadas sobre solicitações de pesquisa para fins de monitoramento e depuração. Com o registro de solicitações habilitado, você pode revisar padrões de consulta, tempos de resposta e detalhes da solicitação para um Cortex Search Service.

Informações coletadas em logs de solicitações

Os logs de solicitações do Cortex Search incluem as seguintes informações:

  • Tipo de operação (por exemplo,QUERY )

  • Todo o corpo da solicitação, incluindo texto e parâmetros de consulta

  • Código de status da resposta

  • Tempo de resposta em milissegundos

  • Banco de dados, esquema e nome do serviço

  • Informações sobre o usuário, função e sessão

Habilitação do registro de solicitações

Para coletar logs de solicitações para um Cortex Search Service, ative a propriedade REQUEST_LOGGING no serviço.

Você pode habilitar o registro de solicitações ao criar um serviço:

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

Você também pode habilitar o registro de solicitações em um serviço que já existe:

ALTER CORTEX SEARCH SERVICE my_search_service SET REQUEST_LOGGING = TRUE;

Para desabilitar o registro de solicitações:

ALTER CORTEX SEARCH SERVICE my_search_service SET REQUEST_LOGGING = FALSE;

Considerações operacionais

Volume de dados do log

Cada solicitação do Cortex Search registrada gera uma linha de evento em``SNOWFLAKE.LOCAL.AI_OBSERVABILITY_EVENTS`` . A quantidade de dados acumulada depende da sua taxa de solicitações e de quanto tempo o registro em log continua ativado. Defina a retenção e o armazenamento de acordo com o volume de logs que você pretende manter.

Considerações sobre custo

Dados armazenados em tabelas SNOWFLAKE.LOCAL incorrem em encargos de armazenamento do Snowflake. Para consultar logs de solicitações com SQL, é necessário usar os recursos do warehouse como em qualquer outra consulta.

Latência de consultas

Habilitar o registro de solicitações não afeta a latência das solicitações de consulta do Cortex Search.

Acesso aos logs de solicitações do Cortex Search

Os logs de solicitações para um Cortex Search Service são armazenados na tabela de eventos SNOWFLAKE.LOCAL.AI_OBSERVABILITY_EVENTS. É possível acessar esses logs usando uma função de tabela ou consultando a tabela de eventos diretamente.

Uso da função snowflake.local.get_ai_observability_events

Usuários com o privilégio MONITOR em um Cortex Search Service pode visualizar logs de solicitações para esse serviço usando a função snowflake.local.get_ai_observability_events.

  1. Conceder privilégio MONITOR: Conceda o privilégio MONITOR no Cortex Search Service à função que usará:

    USE ROLE ACCOUNTADMIN;
    GRANT MONITOR ON CORTEX SEARCH SERVICE <service_name> TO ROLE <role_name>;
    
  2. Eventos de observabilidade de consultas: Chame snowflake.local.get_ai_observability_events usando a função com o privilégio MONITOR:

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

Consultar a tabela de eventos como ACCOUNTADMIN

Usuários com a função ACCOUNTADMIN podem consultar a tabela de eventos diretamente:

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

Nota

Usuários com a função ACCOUNTADMIN podem consultar a tabela snowflake.local.ai_observability_events e acessar os eventos de solicitações para todos os Cortex Search Services na conta.

Controle de acesso e permissões

Para visualizar os logs de solicitações do Cortex Search, os usuários devem ter um dos seguintes:

  • O privilégio OWNERSHIP ou MONITOR no Cortex Search Service

  • A função ACCOUNTADMIN (para acesso direto à tabela de eventos)

O exemplo a seguir usa a função ACCOUNTADMIN para criar uma nova função search_monitoring_role com as permissões necessárias para visualizar os logs do 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;

Esquema de saída

A função snowflake.local.get_ai_observability_events retorna uma tabela com as seguintes colunas:

Colunas

Nome da coluna

Tipo de dados

Descrição

TIMESTAMP

TIMESTAMP_NTZ(9)

Nome do evento

START_TIMESTAMP

TIMESTAMP_NTZ(9)

Hora de início do evento (pode serNULL)

TRACE

OBJECT

Informações de rastreamento do evento (pode ser NULL)

RESOURCE_ATTRIBUTES

OBJECT

Contém informações de sessão, usuário e função, incluindo ID da sessão, ID do usuário, nome do usuário, ID da função e nome da função

RECORD_TYPE

STRING

Tipo de registro, normalmente “EVENT‘ para solicitações do Cortex Search

RECORD

OBJECT

Contém o nome do evento, normalmente “CORTEX_SEARCH_REQUEST”

RECORD_ATTRIBUTES

OBJECT

Contém metadados detalhados de observabilidade, incluindo informações de banco de dados, esquema, serviço, usuário, função e sessão

VALUE

VARIANT

Contém os detalhes reais da solicitação, incluindo tipo de operação, corpo da solicitação, código de status da resposta e tempo de resposta

A coluna VALUE contém os dois seguintes campos importantes:

  • snow.ai.observability.operation_type: O tipo de operação, como “QUERY”

  • snow.ai.observability.request_body: A solicitação completa, incluindo texto e parâmetros da consulta

  • o código de status snow.ai.observability.response_status_code:HTTP da resposta

  • snow.ai.observability.response_time_ms: Tempo de resposta em milissegundos

  • snow.ai.observability.database.name: Banco de dados com o Cortex Search Service

  • snow.ai.observability.schema.name: Esquema com o Cortex Search Service

  • snow.ai.observability.object.name: Nome do Cortex Search Service

A seguir, um exemplo de dados encontrados na coluna 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
}

Exemplo

Consulte os logs de solicitações das últimas 24 horas usando uma função com privilégio MONITOR no serviço.

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;