Utiliser la journalisation et le traçage des événements pour une application

Cette rubrique décrit comment les fournisseurs peuvent configurer une Snowflake Native App pour enregistrer des messages du journal et tracer des événements.

À propos des messages de journal et des événements de trace dans une application

Snowflake Native App Framework prend en charge l’utilisation de la journalisation et du traçage Snowflake permettant de collecter des informations sur une application. Les fournisseurs peuvent configurer une application pour enregistrer et analyser les éléments suivants :

  • Messages de journal - Messages indépendants et détaillés contenant des informations sur l’état d’un élément spécifique de code d’application.

  • Événements de trace - Données structurées que les fournisseurs peuvent utiliser pour obtenir des informations couvrant et regroupant plusieurs parties de votre code. Les événements de trace permettent à une application d’émettre des informations liées à ses performances et à son comportement.

  • Métriques - Informations sur la consommation de ressources des procédures stockées et des UDF, basées sur les métriques de CPU et de mémoire générées par Snowflake.

Pour configurer une application afin d’émettre des messages de journal et des événements de trace, les fournisseurs définissent les niveaux de journal et de trace dans le fichier manifeste. Voir Définir les niveaux de journalisation et de trace pour une application.

Les fournisseurs peuvent également configurer une application pour utiliser le partage d’événements afin de permettre au consommateur de partager les messages du journal et de suivre les événements avec le fournisseur. Consultez À propos du partage d’événements pour plus d’informations.

À propos des événements du cycle de vie de l’application

Snowflake enregistre les événements qui donnent une visibilité sur l’état et l’historique d’une Snowflake Native App. Ces événements fournis par Snowflake sont appelés événements du cycle de vie de l’application.

Par exemple, si l’instance de l’application d’un consommateur passe à un état échoué en raison d’une erreur lors d’une mise à niveau, vous pouvez utiliser les événements du cycle de vie de l’application pour voir cet événement historique.

Snowflake enregistre ces événements du cycle de vie de l’application dans le tableau des événements dans le compte. Par défaut, les événements du cycle de vie de l’application ne sont pas enregistrés. Pour activer la journalisation des événements du cycle de vie de l’application, définissez les niveaux de journalisation et de traçage dans la propriété log level du fichier manifeste. Pour plus d’informations, voir Définir les niveaux de journalisation et de trace pour une application.

La valeur de la propriété log_level du fichier manifeste détermine la gravité des événements enregistrés dans le tableau des événements. Les événements du cycle de vie de l’application prennent en charge les niveaux de gravité suivants :

  • TRACE

  • DEBUG

  • INFO

  • WARN

  • ERROR

  • FATAL

  • OFF

Note

Chaque niveau de journalisation comprend des enregistrements de tous les niveaux inférieurs. Par exemple, définir le niveau de journalisation sur WARN enregistre également les événements ERROR et FATAL.

Événements du cycle de vie de l’application des requêtes

Après avoir configuré le niveau de journalisation de votre application, Snowflake enregistre les événements du cycle de vie de l’application dans le tableau des événements actif de votre compte Snowflake. Vous pouvez interroger le tableau des événements pour voir ces événements.

L’instruction SELECT suivante récupère les événements du cycle de vie de l’application pour une application spécifique enregistrés au cours de la dernière heure :

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

À propos du partage d’événements

Le partage d’événements permet au fournisseur de collecter des informations sur les performances et le comportement d’une application. Un fournisseur peut configurer une application pour demander aux consommateurs de partager les messages de journal et les événements de trace avec le fournisseur. Le partage d’événements nécessite que le fournisseur et le consommateur configurent une table d’événements dans leur compte pour stocker les messages de journal et les événements de trace émis par l’application.

Lorsque le partage d’événements est activé, les messages de journal et les événements de trace insérés dans la table d’événements du compte consommateur sont également insérés dans la table d’événements du compte fournisseur.

Note

Les seuls événements avec un RECORD_TYPE de:code:EVENT qui prennent en charge le partage d’événements sont les événements du cycle de vie de l’application Snowflake Native Apps et les événements de plateforme Snowpark Container Services.

Considérations lors de l’utilisation du partage d’événements

Avant de configurer la journalisation et le partage d’événements pour une application, les fournisseurs doivent prendre en compte les éléments suivants :

  • Les fournisseurs sont responsables de tous les coûts associés au partage d’événements du côté du fournisseur, y compris l’ingestion et le stockage des données.

  • Les fournisseurs doivent avoir un compte pour stocker des événements partagés dans chaque région où vous souhaitez prendre en charge le partage d’événements.

  • Les fournisseurs doivent définir le niveau de journalisation et le niveau de trace par défaut pour une application dans le fichier manifeste.

Considérations à prendre en compte lors de la migration depuis l’ancienne fonctionnalité de partage d’événements

Lors de la migration de la fonctionnalité de partage d’événements existante vers l’utilisation de définitions d’événements, les fournisseurs doivent prendre en compte les éléments suivants.

  • La fonctionnalité de partage d’événements précédente est équivalente à la définition d’événement OPTIONAL ALL.

  • Les versions publiées et les correctifs d’une application qui utilisaient la fonctionnalité précédente auront la définition d’événement OPTIONAL ALL par défaut. Les fournisseurs n’ont pas besoin d’ajouter cette définition d’événement au fichier manifeste.

Pour commencer à utiliser les définitions d’événements, les fournisseurs peuvent ajouter des définitions d’événements prises en charge au fichier manifeste. Ceci s’applique aux nouvelles applications ainsi qu’aux nouvelles versions et correctifs des applications existantes.

Note

Pour commencer à demander un partage de journaux et d’événements plus granulaire, les fournisseurs doivent simplement ajouter des définitions d’événements au fichier manifeste. Aucune autre action n’est requise de la part des fournisseurs.

Flux de travail - Configurer le partage d’événements pour une application

Le partage d’événements permet aux consommateurs de partager des messages de journal et de suivre les événements avec le fournisseur.

Le flux de travail suivant montre comment configurer et activer le partage d’événements pour une application :

  1. Le fournisseur définit les niveaux de journal et de trace pour l’application.

  2. Le fournisseur ajoute des définitions d’événements au fichier manifeste.

    Les définitions d’événements agissent comme des filtres sur les messages de journal et les événements de trace émis par l’application. Les fournisseurs peuvent configurer les définitions d’événements comme étant obligatoires ou facultatives.

  3. Le fournisseur met en place une table d’événements dans son organisation.

  4. Le fournisseur publie l’application.

Lorsqu’un consommateur installe une application, il peut configurer une table d’événements et activer le partage d’événements. Voir Activer la journalisation et le partage d’événements pour une application pour plus d’informations sur les exigences des consommateurs en matière de partage d’événements.

Surveillance de la santé de l’application des consommateurs

Vous pouvez utiliser les colonnes LAST_HEALTH_STATUS et LAST_HEALTH_STATUS_UPDATED_ON de la vue APPLICATION_STATE pour surveiller la santé des instances de consommateurs de votre application. La colonne LAST_HEALTH_STATUS a les valeurs possibles suivantes :

  • OK : L’instance du consommateur est saine.

  • FAILED : L’instance du consommateur présente un état d’erreur.

  • PAUSED : Le consommateur a mis manuellement l’application en pause.

L‘exemple de code suivant illustre l’utilisation de la vue:code:APPLICATION_STATE pour récupérer l’état de santé de toutes les instances de consommateurs de votre application :

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

La requête précédente peut renvoyer des résultats similaires à ce qui suit :

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