Registro em log de uso e rastreamento de eventos para um app

Este tópico descreve como os provedores podem configurar um Snowflake Native App para registrar mensagens de log e rastrear eventos.

Sobre mensagens de log e eventos de rastreamento em um aplicativo

O Snowflake Native App Framework é compatível com o uso da funcionalidade de registro em log e rastreamento Snowflake para coletar informações sobre um aplicativo. Os provedores podem configurar um aplicativo para registrar e analisar o seguinte:

  • Mensagens de log – Mensagens independentes e detalhadas com informações sobre o estado de um código de um aplicativo específico.

  • Eventos de rastreamento – Dados estruturados que os provedores podem usar para obter informações abrangendo e agrupando diversas partes de seu código. Os eventos de rastreamento permitem que um aplicativo emita informações relacionadas ao seu desempenho e comportamento.

  • Métricas - Informações sobre o procedimento armazenado e o consumo de recursos UDF com base nas métricas de CPU e de memória geradas pelo Snowflake.

Para configurar um aplicativo para emitir mensagens de log e rastrear eventos, os provedores definem os níveis de log e rastreamento no arquivo de manifesto. Consulte Definição dos níveis de log e rastreamento para um aplicativo.

Os provedores também podem configurar um aplicativo para usar o compartilhamento de evento para permitir que o consumidor compartilhe as mensagens de log e rastreie eventos com o provedor. Consulte Sobre compartilhamento de evento para obter mais informações.

Sobre os eventos de ciclo de vida do aplicativo

O Snowflake registra eventos que dão visibilidade ao status e ao histórico de um Snowflake Native App. Esses eventos fornecidos pelo Snowflake são chamados de eventos de ciclo de vida do aplicativo.

Por exemplo, se a instância de um app do consumidor passar para o estado de falha devido a um erro durante a atualização, você poderá usar os eventos de ciclo de vida do aplicativo para visualizar esse evento histórico.

O Snowflake registra os eventos de ciclo de vida do aplicativo na tabela de eventos na conta. Por padrão, os eventos de ciclo de vida do aplicativo não são registrados. Para habilitar o registro de eventos de ciclo de vida do aplicativo, defina os níveis de log e de rastreamento na propriedade no nível do log no arquivo de manifesto. Consulte Definição dos níveis de log e rastreamento para um aplicativo para obter mais informações.

O valor da propriedade log_level no arquivo de manifesto determina a gravidade dos eventos registrados na tabela de eventos. Os eventos de ciclo de vida do aplicativo oferecem suporte aos seguintes níveis de gravidade:

  • TRACE

  • DEBUG

  • INFO

  • WARN

  • ERROR

  • FATAL

  • OFF

Nota

Cada nível de registro em log inclui registros de todos os níveis inferiores. Por exemplo, definir o nível de log como WARN também registra eventos ERROR e FATAL.

Consultar eventos de ciclo de vida do aplicativo

Depois que você configura o nível de log do app, o Snowflake registra os eventos de ciclo de vida do aplicativo na tabela de eventos ativa em sua conta Snowflake. Você pode consultar a tabela de eventos para visualizar os eventos.

A seguinte instrução SELECT recupera os eventos de ciclo de vida do aplicativo de um app específico registrado na última hora:

SELECT TIMESTAMP, RESOURCE_ATTRIBUTES, RECORD, VALUE
  FROM <your_event_table>
  WHERE TIMESTAMP > DATEADD(hour, -1, CURRENT_TIMESTAMP())
    AND RESOURCE_ATTRIBUTES:"snow.application.name" = '<your_app_name>'
    AND RECORD_TYPE = 'EVENT'
  ORDER BY TIMESTAMP DESC
  LIMIT 10;
Copy

Sobre o compartilhamento de evento

O compartilhamento de evento permite que o provedor colete informações sobre o desempenho e o comportamento de um aplicativo. Um provedor pode configurar um aplicativo para solicitar que os consumidores compartilhem as mensagens de log e rastreiem eventos com o provedor. O compartilhamento de evento exige que o provedor e o consumidor configurem uma tabela de evento em sua conta para armazenar as mensagens de log e rastrear eventos emitidos pelo aplicativo.

Quando o compartilhamento de evento está habilitado, as mensagens de log e os eventos de rastreamento inseridos na tabela de evento na conta do consumidor também são inseridos na tabela de evento na conta do provedor.

Nota

Os únicos eventos com um RECORD_TYPE de:code:EVENT que oferecem suporte ao compartilhamento de eventos são os eventos de ciclo de vida do aplicativo Snowflake Native Apps e os eventos da plataforma Snowpark Container Services.

Considerações ao usar o compartilhamento de evento

Antes de configurar o registro e o compartilhamento de evento para um aplicativo, os provedores devem considerar o seguinte:

  • Os provedores são responsáveis por todos os custos associados ao compartilhamento de eventos no lado do provedor, incluindo ingestão e armazenamento de dados.

  • Os provedores devem ter uma conta para armazenar eventos compartilhados em cada região onde você deseja oferecer suporte ao compartilhamento de eventos.

  • Os provedores devem definir o nível de log e o nível de rastreamento padrão para um aplicativo no arquivo de manifesto.

Considerações ao migrar da funcionalidade anterior de compartilhamento de evento

Ao migrar da funcionalidade de compartilhamento de evento existente para o uso de definições de evento, os provedores devem considerar o seguinte.

  • A funcionalidade anterior de compartilhamento de evento é equivalente à definição de evento OPTIONAL ALL.

  • Versões publicadas e patches de um aplicativo que usava a funcionalidade anterior terão a definição de evento OPTIONAL ALL por padrão. Os provedores não precisam adicionar esta definição de evento ao arquivo de manifesto.

Para começar a usar definições de evento, os provedores podem adicionar definições de evento compatíveis com o arquivo de manifesto. Isso se aplica a novos aplicativos, bem como a novas versões e patches de aplicativos existentes.

Nota

Para começar a solicitar compartilhamento de log e evento mais granulares, os provedores só precisam adicionar definições de evento ao arquivo de manifesto. Nenhuma outra ação é necessária para os provedores.

Fluxo de trabalho – Configuração do compartilhamento de evento para um aplicativo

O compartilhamento de evento permite que os consumidores compartilhem mensagens de log e rastreiem eventos com o provedor.

O fluxo de trabalho a seguir mostra como definir e habilitar o compartilhamento de evento para um aplicativo:

  1. O provedor define os níveis de log e rastreamento para o aplicativo.

  2. O provedor adiciona definições de evento ao arquivo de manifesto.

    As definições de evento atuam como filtros nas mensagens de log e rastreiam eventos emitidos pelo aplicativo. Os provedores podem configurar definições de evento como obrigatórias ou opcionais.

  3. O provedor define uma tabela de evento em sua organização.

  4. O provedor publica o aplicativo.

Quando um consumidor instala um aplicativo, ele pode definir uma tabela de evento e habilitar o compartilhamento de evento. Consulte Habilitação de registro em log e compartilhamento de evento para um aplicativo para obter mais informações sobre os requisitos de consumidor para compartilhamento de evento.

Monitoramento da integridade do aplicativo de consumidor

Você pode usar as colunas LAST_HEALTH_STATUS e LAST_HEALTH_STATUS_UPDATED_ON da exibição APPLICATION_STATE para monitorar a integridade das instâncias de consumidor do seu app. A coluna LAST_HEALTH_STATUS tem os seguintes valores possíveis:

  • OK: a instância de consumidor está íntegra.

  • FAILED: a instância de consumidor está em estado de erro.

  • PAUSED: O consumidor pausou o app manualmente.

A amostra de código a seguir demonstra o uso da exibição APPLICATION_STATE para recuperar o status de integridade de todas as instâncias de consumidor do seu app:

SELECT
    CONSUMER_ORGANIZATION_NAME,
    CONSUMER_ACCOUNT_NAME,
    LAST_HEALTH_STATUS,
    LAST_HEALTH_STATUS_UPDATE_TIME
FROM
    SNOWFLAKE.ACCOUNT_USAGE.APPLICATION_STATE
WHERE
    PROVIDER_ORG_NAME = '<your_provider_org_name>'
    AND APPLICATION_NAME = '<your_app_name>'
ORDER BY
    LAST_HEALTH_STATUS_UPDATE_TIME DESC;
Copy

A consulta anterior pode retornar resultados semelhantes aos seguintes:

CONSUMER_ORG_NAME    CONSUMER_ACCOUNT_NAME    LAST_HEALTH_STATUS    LAST_HEALTH_STATUS_UPDATE_TIME
------------------   ---------------------    ------------------    -------------------------------
consumer_org_1      consumer_account_1       OK                    2024-01-15 10:30:00.000
consumer_org_2      consumer_account_2       FAILED                2024-01-15 09:45:00.000
consumer_org_3      consumer_account_3       PAUSED                2024-01-14 16:20:00.000