Fonctionnalité de journalisation et de partage d’événements précédente — Obsolète¶
Cette rubrique décrit la méthode obsolète de configuration de la journalisation et du partage d’événements avant l’introduction des définitions d’événements.
Les fournisseurs qui configurent la journalisation et le partage d’événements doivent utiliser la méthode décrite dans Configurer la journalisation et le traçage des événements pour une application. Voir Considérations à prendre en compte lors de la migration depuis l’ancienne fonctionnalité de partage d’événements pour obtenir des informations sur la migration de la fonctionnalité obsolète vers la nouvelle fonctionnalité de journalisation et de partage d’événements.
Avertissement
Le processus de configuration de la journalisation et du partage d’événements décrit dans cette rubrique sera obsolète dans une future version.
Fonctionnalités de journalisation et de partage d’événements précédentes¶
Cette rubrique fournit des informations sur la configuration de la journalisation et du partage d’événements en tant que fournisseur. Reportez-vous à Activation de la journalisation et du partage d’événements pour une application pour connaître les exigences des consommateurs en matière de configuration de cette fonction.
Les événements de journalisation et de traçage vous permettent de collecter des informations sur une application afin de résoudre les erreurs. Grâce à la journalisation et aux événements de traçage, vous pouvez également avoir une meilleure idée du fonctionnement de votre application et l’améliorer par la suite.
Workflow de configuration de la journalisation et du partage d’événements en tant que fournisseur¶
En tant que fournisseur, vous pouvez configurer la journalisation et le partage d’événements pour une application en procédant comme suit :
Une fois que le consommateur a installé une application et activé la journalisation et le partage d’événements, vous pouvez voir les informations de journalisation et d’événements partagées par l’application :
Considérations relatives à l’utilisation de la journalisation et du partage d’événements¶
Avant d’utiliser la journalisation et le partage d’événements pour une application, les fournisseurs doivent tenir compte des points 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.
Note
Le partage d’événements ne peut pas être activé pour une appli installée dans le même compte que le paquet d’application sur lequel elle est basée. Pour tester le partage d’événements pour une appli, un fournisseur doit utiliser plusieurs comptes.
Configurer la journalisation et des événements de trace dans les fonctions et les procédures¶
Le Native Apps Framework nécessite une table d’événements pour stocker les messages de journal et les événements de traçage générés par les fonctions et les procédures stockées dans une application.
Note
Si le consommateur d’une application ne configure pas une table d’événements et n’en fait pas la table active avant d’installer l’application, les données d’événements et de journalisation sont rejetées.
Un compte peut avoir plusieurs tables d’événements, mais une seule d’entre elles peut être définie comme table d’événements active pour un compte Snowflake à la fois. Sans table d’événements active, les messages de journal et les événements de traçage générés par l’application ne sont pas capturés. Cela est vrai même si les fonctions et procédures d’une application appellent les APIs d’événements de journalisation et de trace.
Pour créer une table d’événements, utilisez la commande CREATE EVENT TABLE. Pour plus d’informations, voir Aperçu de la table d’événements.
Une fois que le code a enregistré les messages du journal et les événements de trace, un fournisseur peut interroger les données enregistrées.
Pour plus d’informations sur l’enregistrement et l’interrogation des données de journal et de traçage, reportez-vous à ce qui suit :
Définir le niveau de journalisation et de traçage dans le fichier manifeste¶
Pour définir les niveaux de journalisation et de trace par défaut pour une version d’une application, définissez les paramètres log_level
et trace_level
dans le fichier manifeste, comme indiqué dans l’exemple suivant :
artifacts:
setup_script: setup.sql
configuration:
trace_level: OFF
log_level: DEBUG
Lorsqu’un fournisseur active le traçage, une Snowflake Native App capture automatiquement les heures de début et de fin de toutes les requêtes et de tous les appels de procédures stockées.
Note
La publication d’une Snowflake Native App dont la propriété trace_level
est définie sur une valeur autre que OFF
peut exposer les appels à des procédures stockées cachées à tout utilisateur du compte du consommateur qui peut voir la table des événements.
Reportez-vous à Définition des niveaux de journalisation, des métriques et du traçage et Définition des niveaux de journalisation, des métriques et du traçage pour obtenir des informations sur les valeurs prises en charge pour trace_level
et log_level
.
Lors de son installation initiale, l”Snowflake Native App utilise les niveaux de journalisation définis dans le fichier manifeste. Si le niveau de journalisation est modifié lors d’une mise à niveau ultérieure, le nouveau niveau de journalisation prend effet après la fin du processus de mise à niveau.
Le niveau de journalisation et de traçage ne peut être défini que dans le fichier manifeste. Le consommateur n’est pas autorisé à modifier le niveau de journalisation à l’aide des commandes ALTER APPLICATION ou ALTER DATABASE.
De même, tout paramètre de niveau de session pour le niveau de journalisation est ignoré par l’application.
Voir les niveaux d’événements de journalisation et de trace définis pour un paquet d’application¶
Utilisez la commande DESCRIBE APPLICATION pour afficher le niveau de journalisation d’une application, comme le montre la commande suivante :
DESC APPLICATION HelloSnowflake;
Utilisez la commande SHOW VERSIONS pour voir le niveau de journalisation des versions d’application définies dans un paquet d’application, comme le montre l’exemple suivant :
SHOW VERSIONS
IN APPLICATION PACKAGE HelloSnowflake;
Voir les journaux et les événements dans la table d’événements¶
Pour voir les journaux et les événements stockés dans la table des événements, utilisez la commande SELECT comme indiqué dans l’exemple suivant :
SELECT * FROM EVENT_DB.EVENT_SCHEMA.MY_EVENT_TABLE
Déterminer si le partage d’événements est activé dans le compte du consommateur¶
Dans certains contextes, un fournisseur peut avoir besoin de déterminer si le partage d’événements a été activé dans le compte d’un consommateur. Par exemple, un fournisseur peut avoir besoin de désactiver une fonctionnalité de l’application si la table d’événements n’est pas disponible.
Pour déterminer si le partage d’événements est activé dans un compte de consommateur, les fournisseurs peuvent appeler les fonctions système suivantes lorsqu’ils définissent la logique de l’appli :
IS_APPLICATION_SHARING_EVENTS_WITH_PROVIDER
Renvoie TRUE si l’appli active le partage d’événements et qu’une table d’événements active est disponible dans le compte du consommateur. Renvoie FALSE, sinon.
IS_APPLICATION_INSTALLED_FROM_SAME_ACCOUNT
Renvoie TRUE si l’appli a été installée dans le même compte que le paquet d’application sur lequel elle est basée. Renvoie FALSE dans le cas contraire.
Note
Ces fonctions système ne peuvent être appelées qu’à l’intérieur d’une appli. Voir Déterminer si le partage d’événements est activé à l’aide de Python Permission SDK et Déterminer si le partage d’événements est activé en utilisant SQL.
Déterminer si le partage d’événements est activé à l’aide de Python Permission SDK¶
Python Permission SDK propose les fonctions suivantes pour déterminer si le partage d’événements est activé sur le compte d’un consommateur :
is_event_sharing_enabled()
Renvoie TRUE si la propriété SHARE_EVENTS_WITH_PROVIDER est vraie et si le compte du consommateur a une table d’événements active configurée. Renvoie FALSE, sinon.
is_application_local_to_package()
Renvoie TRUE si l’application se trouve sur le même compte que le paquet d’application. Renvoie FALSE, sinon.
Déterminer si le partage d’événements est activé en utilisant SQL¶
L’exemple suivant montre comment appeler une procédure stockée lorsque le partage d’événements est activé dans le compte du consommateur.
Considérez la procédure stockée SQL suivante qui crée une fonction pour calculer la somme de deux nombres :
CREATE OR ALTER VERSIONED SCHEMA app_schema;
CREATE OR REPLACE PROCEDURE app_schema.hidden_sum(num1 float, num2 float)
RETURNS FLOAT
LANGUAGE SQL
EXECUTE AS OWNER
AS $$
DECLARE
SUM FLOAT;
BEGIN
SYSTEM$LOG('INFO', 'CALCULATE THE SUM OF TWO NUMBERS');
SUM := :NUM1 + :NUM2;
RETURN SUM;
END;
$$;
Ajoutées au script d’installation de l’application, ces commandes SQL créent la procédure stockée hidden_sum
dans le compte du consommateur lors de l’installation de l’appli. Cependant, cette procédure stockée n’est pas visible pour les consommateurs car le privilège USAGE n’est pas accordé à un rôle d’application sur la procédure stockée.
L’exemple suivant montre comment vous pouvez utiliser les valeurs renvoyées par les fonctions système IS_APPLICATION_SHARING_EVENTS_WITH_PROVIDER et IS_APPLICATION_INSTALLED_FROM_SAME_ACCOUNT pour appeler la procédure stockée hidden_sum
.
CREATE OR REPLACE PROCEDURE app_schema.sum(num1 float, num2 float)
RETURNS STRING
LANGUAGE SQL
EXECUTE AS OWNER
AS $$
BEGIN
IF (SYSTEM$IS_APPLICATION_INSTALLED_FROM_SAME_ACCOUNT() or SYSTEM$IS_APPLICATION_SHARING_EVENTS_WITH_PROVIDER()) THEN
CALL APP_SCHEMA.HIDDEN_SUM(:NUM1, :NUM2);
ELSE
-- notify consumers that they need to enable event sharing
RETURN 'Sorry you can\'t access the API, please enable event sharing.';
END IF;
END;
$$;
CREATE APPLICATION ROLE IF NOT EXISTS ADMIN_ROLE;
GRANT USAGE ON SCHEMA APP_SCHEMA TO APPLICATION ROLE ADMIN_ROLE;
Dans cet exemple, la procédure stockée sum
teste les valeurs des procédures stockées IS_APPLICATION_SHARING_EVENTS_WITH_PROVIDER et IS_APPLICATION_INSTALLED_FROM_SAME_ACCOUNT. Si l’une de leurs valeurs est true
, la procédure stockée sum
appelle la procédure stockée hidden_sum
.
Demander le partage d’événements aux consommateurs à l’aide de Python Permission SDK¶
Un fournisseur peut utiliser Python Permission SDK pour créer une appli Streamlit afin d’inviter les consommateurs à activer le partage d’événements dans leur compte.
Le SDK fournit la méthode request_event_sharing()
qui affiche une boîte de dialogue dans Snowsight qui invite le consommateur à activer le partage d’événements dans son compte. Si la table d’événements n’existe pas dans le compte du consommateur, la boîte de dialogue permet au consommateur de définir la table d’événements s’il utilise le rôle ACCOUNTADMIN.
Exemple : utilisation de Python Permission SDK avec des tables d’événements¶
L’exemple suivant de Streamlit montre comment utiliser Python Permission SDK pour effectuer les opérations suivantes :
Déterminez si le partage d’événements est activé.
Si le partage d’événements est activé, appelez la fonction
critical_feature_that_requires_event_sharing()
.Si le partage d’événements n’est pas activé, appelez la fonction
request_event_sharing()
pour afficher une boîte de dialogue dans Snowsight qui invite le consommateur à activer le partage d’événements.
import streamlit as st
import snowflake.permissions as permissions
def critical_feature_that_requires_event_sharing():
st.write("critical_feature_that_requires_event_sharing")
def main():
if permissions.is_event_sharing_enabled() or permissions.is_application_local_to_package():
critical_feature_that_requires_event_sharing()
else:
permissions.request_event_sharing()
if __name__ == "__main__":
main()
Dans cet exemple, la méthode critical_feature_that_requires_event_sharing()
n’est appelée que si l’une des conditions suivantes est remplie :
Le partage d’événements est activé et la table d’événements existe.
La Snowflake Native App se trouve sur le même compte que le paquet d’application.
Si aucune de ces conditions n’est remplie, l’appli Streamlit appelle la méthode request_event_sharing()
qui invite le consommateur à sélectionner une table d’événements.
Pour plus d’informations, voir Déterminer si le partage d’événements est activé dans le compte du consommateur.