Affichage des données de trace

Vous pouvez afficher les données de trace via Snowsight ou en interrogeant la table d’événements dans laquelle les données de trace sont stockées.

Note

Avant de pouvoir commencer à utiliser les données de trace, vous devez activer la collecte de données de télémétrie.

Afficher les entrées de trace dans Snowsight

Note

La prise en charge de Snowsight de la journalisation et du traçage est une fonctionnalité en avant-première disponible pour tous les comptes.

Vous pouvez utiliser Snowsight pour afficher les données de trace capturées dans la table des événements.

  1. Connectez-vous à Snowsight.

  2. Dans le menu de navigation, sélectionnez Monitoring » Traces and Logs.

  3. Dans la page Traces & Logs, vous pouvez afficher les entrées de trace avec les colonnes suivantes :

    Colonne

    Description

    Date

    Date à laquelle l’entrée a été enregistrée.

    Durée

    Durée entre le début et la fin de la trace.

    Nom de la trace

    Le nom de l’exécutable qui génère l’événement. Récupéré de la valeur de la colonne RESOURCE_ATTRIBUTES snow.executable.name.

    Statut

    Error si la trace a signalé des erreurs ; sinon, Success.

    Spans

    Nombre de spans dans la trace.

  4. Dans la page Traces & Logs, vous pouvez effectuer les actions suivantes :

    • Pour filtrer les lignes affichées, utilisez les menus déroulants en haut de la page. Vous pouvez appliquer un filtre avec les caractéristiques suivantes :

      • Plage de dates pendant laquelle l’entrée a été enregistrée

      • Statut de la trace, tel que Success ou Error

      • Base de données sur laquelle la trace a été exécutée

    • Pour trier les lignes, sélectionnez le nom de la colonne par laquelle vous souhaitez effectuer le tri.

  5. Pour afficher des informations plus détaillées sur une entrée dans sa page Trace Details, sélectionnez la ligne de l’entrée.

  6. Dans la page Traces Details, vous pouvez afficher une liste de spans.

    Un objet span contient des événements de trace. Pour plus d’informations, voir Comment Snowflake représente les événements de trace.

    • Pour filtrer les lignes affichées, utilisez le menu déroulant en haut de la page. Vous pouvez filtrer par Span Type : UDF, procédure ou Streamlit.

    • Pour afficher une légende décrivant les données affichées dans les lignes, sélectionnez le menu déroulant Legend, puis sélectionnez la légende que vous souhaitez voir.

    • Pour afficher des informations plus détaillées sur une entrée, sélectionnez la ligne de l’entrée.

      Sur ce panneau, vous pouvez afficher plus d’informations stockées dans la table des événements. Les tableaux suivants décrivent les valeurs du panneau :

      Onglet Détails

      Détail

      Description

      ID de trace

      Identificateur unique pour les appels effectués à partir d’une requête. Récupéré de la valeur Colonne TRACE trace_id. Pour plus d’informations, voir Valeur de trace.

      ID de span

      Un identificateur unique lié au modèle de threading. Récupéré de la valeur Colonne TRACE span_id. Pour plus d’informations, voir Valeur de trace.

      Portée

      Espace de noms du code qui émet l’événement. Récupéré de la Colonne SCOPE.

      Durée

      La durée du span du début à la fin. Pour plus d’informations, voir Pour SPAN RECORD_TYPE.

      Nom

      Le nom du span. Récupéré de la valeur de la colonne RECORD name.

      ID de span parent

      ID unique du span contenant le span sélectionné.

      Code de statut

      Le code de statut du span. Récupéré de la valeur de la colonne RECORD status.

      Autres attributs

      Attributs et valeurs ajoutés par le code utilisateur.

      ID de requête

      ID de la requête qui a initié la trace. Récupéré de la valeur de la colonne RESOURCE_ATTRIBUTES snow.query.id.

      Nom

      Le nom de l’exécutable qui génère l’événement. Récupéré de la valeur de la colonne RESOURCE_ATTRIBUTES snow.executable.name.

      Type

      Le type d’exécutable qui a généré l’événement. Récupéré de la valeur de la colonne RESOURCE_ATTRIBUTES snow.executable.type.

      Utilisateur

      Nom de l’utilisateur exécutant la fonction ou la procédure. Pour une application Streamlit, le nom de l’utilisateur qui consultait l’application pour un événement donné. Récupéré de la valeur de la colonne RESOURCE_ATTRIBUTES db.user.

      Propriétaire

      Le nom du rôle ayant le privilège OWNERSHIP pour l’exécutable. Récupéré de la valeur de la colonne RESOURCE_ATTRIBUTES snow.owner.name.

      Rôle

      Le nom du rôle principal dans la session. Récupéré de la valeur de la colonne RESOURCE_ATTRIBUTES snow.session.role.primary.name.

      Entrepôt

      Le nom de l’entrepôt qui exécute la requête générant l’événement. Récupéré de la valeur de la colonne RESOURCE_ATTRIBUTES snow.warehouse.name.

      Base de données

      Nom de la base de données contenant l’exécutable. Récupéré de la valeur de la colonne RESOURCE_ATTRIBUTES snow.database.name.

      Schéma

      Nom du schéma contenant l’exécutable. Récupéré de la valeur de la colonne RESOURCE_ATTRIBUTES snow.schema.name.

      Onglet Événements de span

      Affiche les données enregistrées pour les événements de trace. Pour plus d’informations, voir Données d’événements enregistrées.

      Onglet Métriques connexes

      Affiche des graphiques illustrant les métriques de CPU et de mémoire pour la consommation de ressources par les procédures stockées Snowpark Python et les UDFs. Les métriques associées à l’UDF sont destinées à une requête spécifique. Si vous sélectionnez un span d’UDF dans la liste, les métriques sont liées à un ou plusieurs spans d’UDF pour la même requête. Si vous sélectionnez une procédure dans la liste, vous verrez les métriques de procédure pour un seul span.

      Onglet Journaux

      Affiche la valeur enregistrée par l’événement. Récupérée de la Colonne VALUE.

Interroger la table des événements pour rechercher des données de trace

Une table d’événements comporte un ensemble de colonnes prédéfinies qui contiennent des informations sur les messages enregistrés, notamment :

  • Horodatage de début du span.

  • L’heure à laquelle l’événement a été créé.

  • Le type de données enregistrées, par exemple si les données concernent un span ou un événement de span.

  • Le nom du span ou de l’événement.

  • Attributs, le cas échéant, associés au span ou à l’événement.

Pour des informations de référence sur les colonnes de la table d’événements, voir Colonnes de table d’événements.

Exemple d’interrogation sur les données de trace

Les sections suivantes illustrent, à l’aide d’exemples, la manière dont vous pouvez interroger la table des événements pour obtenir des données de trace.

Données collectées

L’exemple suivant montre le contenu d’un sous-ensemble sélectionné de colonnes d’une table d’événements après la capture de données de trace pour trois gestionnaires distincts écrits en Python.

Pour des informations de référence sur les colonnes de la table d’événements qui collectent des données de trace, voir Données pour les événements de trace.

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| TIMESTAMP          | START_TIMESTAMP    | RESOURCE_ATTRIBUTES   | RECORD_TYPE | RECORD                                                                                                  | RECORD_ATTRIBUTES                                                           |
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| 2023-04-20 0:45:49 | 2023-04-20 0:45:49 | **See excerpt below** | SPAN        | { "kind": "SPAN_KIND_INTERNAL", "name": "digits_of_number", "status": { "code": "STATUS_CODE_UNSET" } } |                                                                             |
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| 2023-04-20 0:45:49 |                    |                       | SPAN_EVENT  | { "name": "test_udtf_init" }                                                                            |                                                                             |
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| 2023-04-20 0:45:49 |                    |                       | SPAN_EVENT  | { "name": "test_udtf_process" }                                                                         | { "input": "42" }                                                           |
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| 2023-04-20 0:45:49 |                    |                       | SPAN_EVENT  | { "name": "test_udtf_end_partition" }                                                                   |                                                                             |
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| 2023-04-20 0:46:00 | 2023-04-20 0:46:00 |                       | SPAN        | { "kind": "SPAN_KIND_INTERNAL", "name": "times_two", "status": { "code": "STATUS_CODE_UNSET" } }        | { "example.func.times_two": "begin", "example.func.times_two.response": 8 } |
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| 2023-04-20 0:46:00 |                    |                       | SPAN_EVENT  | { "name": "event_without_attributes" }                                                                  |                                                                             |
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| 2023-04-20 0:46:00 |                    |                       | SPAN_EVENT  | { "name": "event_with_attributes" }                                                                     | { "example.key1": "value1", "example.key2": "value2" }                      |
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| 2023-04-20 0:46:08 | 2023-04-20 0:46:08 |                       | SPAN        | { "kind": "SPAN_KIND_INTERNAL", "name": "do_tracing", "status": { "code": "STATUS_CODE_UNSET" } }       | { "example.proc.do_tracing": "begin" }                                      |
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| 2023-04-20 0:46:08 |                    |                       | SPAN_EVENT  | { "name": "event_with_attributes" }                                                                     | { "example.key1": "value1", "example.key2": "value2" }                      |
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Extraits RESOURCE_ATTRIBUTES

Les extraits JSON suivants contiennent deux des attributs inclus dans la colonne RESOURCE_ATTRIBUTES pour chacun des trois gestionnaires dont les données sont incluses dans la sortie précédente. L’instruction SELECT qui suit ces extraits sélectionne les valeurs de ces attributs.

La colonne RESOURCE_ATTRIBUTES contient des données sur la source de l’événement. Pour des informations de référence, voir Colonne RESOURCE_ATTRIBUTES.

{
  ...
  "snow.executable.name": "DIGITS_OF_NUMBER(INPUT NUMBER):TABLE: (RESULT NUMBER)",
  "snow.executable.type": "FUNCTION",
  ...
}

{
  ...
  "snow.executable.name": "TIMES_TWO(X NUMBER):NUMBER(38,0)",
  "snow.executable.type": "FUNCTION",
  ...
}

{
  ...
  "snow.executable.name": "DO_TRACING():VARIANT",
  "snow.executable.type": "PROCEDURE",
  ...
}
Copy

Interroger avec l’instruction SELECT

Lorsque vous demandez des données, vous pouvez sélectionner des valeurs d’attribut dans une colonne en utilisant la notation par crochets, comme dans le format suivant :

COLUMN_NAME['attribute_name']
Copy

Le code de l’exemple ci-dessous interroge la table précédente dans le but d’isoler les données relatives à la fonction DIGITS_OF_NUMBER.

SET EVENT_TABLE_NAME='my_db.public.my_events';

SELECT
  TIMESTAMP as time,
  RESOURCE_ATTRIBUTES['snow.executable.name'] as handler_name,
  RESOURCE_ATTRIBUTES['snow.executable.type'] as handler_type,
  RECORD['name'] as event_name,
  RECORD_ATTRIBUTES as attributes
FROM
  IDENTIFIER($event_table_name)
WHERE
  RECORD_TYPE = 'SPAN_EVENT'
  AND HANDLER_NAME LIKE 'DIGITS_OF_NUMBER%';
Copy

Résultats de la requête

La sortie de l’exemple suivant illustre le résultat de la requête.

-------------------------------------------------------------------------------------------------------------------------------------------
| TIME               | HANDLER_NAME                                          | HANDLER_TYPE | EVENT_NAME              | ATTRIBUTES        |
-------------------------------------------------------------------------------------------------------------------------------------------
| 2023-04-20 0:45:49 | DIGITS_OF_NUMBER(INPUT NUMBER):TABLE: (RESULT NUMBER) | FUNCTION     | test_udtf_init          |                   |
-------------------------------------------------------------------------------------------------------------------------------------------
| 2023-04-20 0:45:49 | DIGITS_OF_NUMBER(INPUT NUMBER):TABLE: (RESULT NUMBER) | FUNCTION     | test_udtf_process       | { "input": "42" } |
-------------------------------------------------------------------------------------------------------------------------------------------
| 2023-04-20 0:45:49 | DIGITS_OF_NUMBER(INPUT NUMBER):TABLE: (RESULT NUMBER) | FUNCTION     | test_udtf_end_partition |                   |
-------------------------------------------------------------------------------------------------------------------------------------------