Capturer des messages provenant d’exceptions non gérées¶
Par défaut, lorsque vous avez mis en place une table d’événements, Snowflake enregistre automatiquement les exceptions non gérées dans les procédures et les gestionnaires d’UDF de la table d’événements. La capture de ces messages ne nécessite pas l’ajout de code de gestionnaire spécifique à la journalisation ou au traçage. Vous pouvez désactiver cette fonctionnalité afin que les exceptions non gérées ne soient pas automatiquement enregistrées.
Important
Les messages d’erreur peuvent contenir des informations sensibles. Pensez à désactiver cette fonction si vous ne souhaitez pas que des informations potentiellement sensibles soient capturées dans une table d’événements. Pour en savoir plus, voir Protection des données sensibles.
Note
Cette fonctionnalité est actuellement prise en charge pour le code de gestionnaire écrit uniquement en Java ou en Python.
Configuration de la journalisation et du traçage pour capturer les exceptions non gérées¶
Définissez le niveau de journal ou de trace afin que Snowflake capture les entrées pour les exceptions non gérées. Vous pouvez capturer des entrées sous forme d’entrées de journal, d’entrées d’événements de trace, ou les deux.
Pour capturer des messages sous forme d’entrées de journal, définissez le niveau de journalisation sur
ERROR
ou plus détaillé.Pour capturer des messages en tant qu’entrées d’événements de trace, définissez le niveau de trace sur
ALWAYS
ouON_EVENT
.
Données capturées pour les exceptions non gérées¶
Vous pouvez capturer les données de message sous forme d’entrée de journal, d’événement de trace ou les deux. Les données capturées diffèrent entre les entrées d’événements de journal et de trace.
Données capturées dans une entrée de journal¶
Par défaut, Snowflake enregistre les éléments suivants dans la table d’événements pour les exceptions non gérées dans les procédures et les gestionnaires d’UDF :
Colonne |
Données |
---|---|
Un attribut |
|
Les attributs suivants sont enregistrés pour une exception non gérée.
|
|
La chaîne |
Exemple¶
Le code de l’exemple suivant interroge une table d’événements pour les données de journal enregistrées pour une exception non gérée par un gestionnaire d’UDF.
Pour en savoir plus sur l’interrogation d’une table d’événements pour les données de journal, consultez Accès aux données des messages enregistrés.
SET event_table_name = 'my_db.public.my_event_table';
SELECT
RECORD['severity_text'] AS severity,
RECORD_ATTRIBUTES['exception.message'] AS error_message,
RECORD_ATTRIBUTES['exception.type'] AS exception_type,
RECORD_ATTRIBUTES['exception.stacktrace'] AS stacktrace
FROM
my_event_table
WHERE
RECORD_TYPE = 'LOG';
Ce qui suit est la sortie possible de la requête.
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| SEVERITY | ERROR_MESSAGE | EXCEPTION_TYPE | STACKTRACE |
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| "FATAL" | "could not convert string to float: '$1,000,000.00'" | "ValueError" | "Traceback (most recent call last):\n File \"_udf_code.py\", line 6, in compute\nValueError: could not convert string to float: '$1,000,000.00'\n" |
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Données capturées dans une entrée d’événement de trace¶
Par défaut, Snowflake enregistre les éléments suivants dans la table d’événements pour les exceptions non gérées dans les procédures et les gestionnaires d’UDF :
Colonne |
Données |
---|---|
Un attribut |
|
Les attributs suivants sont enregistrés pour une exception non gérée.
|
Exemples¶
Le code dans les exemples suivants interroge une table d’événements pour les données d’événement de trace enregistrées pour une exception non gérée par un gestionnaire d’UDF.
Pour en savoir plus sur l’interrogation d’une table d’événements pour les données d’événement de trace, consultez Accès aux données de trace.
Exemple de span¶
SET event_table_name = 'my_db.public.my_event_table';
SELECT
RECORD['status']['code'] AS span_status
FROM
my_event_table
WHERE
record_type = 'SPAN';
Ce qui suit est la sortie possible de la requête.
-----------------------
| SPAN_STATUS |
-----------------------
| "STATUS_CODE_ERROR" |
-----------------------
Exemple d’événement de span¶
SET event_table_name = 'my_db.public.my_event_table';
SELECT
RECORD['name'] AS event_name,
RECORD_ATTRIBUTES['exception.message'] AS error_message,
RECORD_ATTRIBUTES['exception.type'] AS exception_type,
RECORD_ATTRIBUTES['exception.stacktrace'] AS stacktrace
FROM
my_event_table
WHERE
RECORD_TYPE = 'SPAN_EVENT';
Ce qui suit est la sortie possible de la requête.
-----------------------------------------------------------------------------------------------------------------------------------------
| EVENT_NAME | ERROR_MESSAGE | EXCEPTION_TYPE | STACKTRACE |
-----------------------------------------------------------------------------------------------------------------------------------------
| "exception" | "could not convert string to float: '$1,000,000.00'" | "ValueError" | " File \"_udf_code.py\", line 6, in compute\n" |
-----------------------------------------------------------------------------------------------------------------------------------------
Protection des données sensibles¶
Étant donné que les messages de journal et de suivi des exceptions non gérées peuvent contenir des données sensibles, il convient d’envisager de prendre les mesures suivantes pour protéger ces données :
Prenez des mesures pour protéger les données sensibles, par exemple en procédant comme suit :
Améliorez votre code de gestion des exceptions afin de minimiser le risque d’exceptions non gérées.
Appliquez les règles d’accès aux lignes à votre table d’événements afin de limiter l’accès aux lignes contenant des informations personnellement identifiables (PII).
Créez une vue au-dessus de la table des événements et appliquez-y des politiques de masquage pour masquer ou supprimer des informations personnellement identifiables (PII).
Désactivez la journalisation des exceptions non gérées en définissant le paramètre ENABLE_UNHANDLED_EXCEPTIONS_REPORTING sur
false
.