Journalisation Snowflake Postgres

Récupération des données de journal Postgres

Tous les serveurs Postgres sur les instances Snowflake Postgres se connectent localement à syslog. Les données de journal sont collectées à partir de là et envoyées au tableau des événements actif de votre compte.

Pour afficher les journaux Postgres d’une instance donnée, interrogez le tableau des événements pour le champ TIMESTAMP et la partie MESSAGE du champ des enregistrements VALUE avec record_type = 'LOG' en utilisant la partie initiale du nom d’hôte de l’instance, également appelée ID d’instance (ou cluster_id). Par exemple, cette opération extraira les 10 dernières minutes des entrées de journal pour l’instance avec l’ID oyrpb2cwtvbu5al5vtbyrsnkgy :

SELECT TIMESTAMP, VALUE:MESSAGE as log_line
FROM SNOWFLAKE.TELEMETRY.EVENTS
WHERE resource_attributes['snowflake.o11y.logtype'] = 'postgres-otelcol-vm-agent'
  AND resource_attributes['instance.id'] = 'oyrpb2cwtvbu5al5vtbyrsnkgy'
  AND record_type = 'LOG'
  AND TIMESTAMP > CURRENT_TIMESTAMP() - INTERVAL '10 MINUTES'
LIMIT 100;
Copy

Note

La requête ci-dessus utilise le tableau des événements par défaut du compte, SNOWFLAKE.TELEMETRY.EVENTS. Si vous avez configuré un tableau des événements personnalisé, vous devez ajuster la requête en conséquence.

Chaque ligne de la sortie contiendra une seule entrée de ligne de journal qui a été enregistrée par le serveur Postgres sur l’instance Snowflake Postgres donnée avec l’horodatage de la date à laquelle elle a été enregistrée à l’origine. Notez qu’il peut s’écouler jusqu’à quelques minutes entre le moment où Postgres effectue une entrée dans le journal et celui où celle-ci est disponible dans le tableau des événements.

Comprendre l’entrelacement des lignes de journal Postgres

Notez que Postgres utilise la journalisation à plusieurs lignes et que plusieurs processus de serveur Postgres effectuent des entrées de journal simultanément. Les entrées de journal complètes provenant de différents processus de serveur Postgres seront souvent entrelacées. Par exemple, considérons les entrées de ligne de journal suivantes :

Exemple de lignes de journal Postgres

timestamp

log_line

2025-12-09 23:16:38.760

« [14-1] [1592908][client backend][27/2][0] [user=snowflake_admin,db=postgres,app=psql] [34.214.158.144] ERROR: canceling statement due to user request »

2025-12-09 23:16:38.760

« [10-1] [1593992][not initialized][][0] [user=[unknown],db=[unknown],app=[unknown]] [34.214.158.144] LOG: connection received: host=34.214.158.144 port=46114 »

2025-12-09 23:16:38.760

« [14-2] [1592908][client backend][27/2][0] [user=snowflake_admin,db=postgres,app=psql] [34.214.158.144] STATEMENT: select pg_sleep(10); »

2025-12-09 23:16:43.007

« [15-1] [1592908][client backend][27/3][0] [user=snowflake_admin,db=postgres,app=psql] [34.214.158.144] LOG: AUDIT: SESSION,2,1,MISC,SHOW,,,show log_min_duration_statement,<not logged> »

Dans chaque entrée de ligne de journal :

  • Les premières valeurs entre crochets correspondent au numéro de commande de la session qui a exécuté la commande et à la ligne de journal pour cette commande, séparés par un trait d’union. Par exemple, [1-1] et [1-2] sont deux lignes de journal de la première commande exécutée dans une session.

  • La deuxième valeur entre crochets est l’ID de processus (pid) pour la session qui a enregistré la ligne. Postgres utilise un modèle de simultanéité basé sur les processus (plutôt que sur les threads), de sorte que chaque session est exécutée sur son propre processus de serveur.

Dans cet exemple, vous pouvez voir que :

  • La commande 14 a été exécutée par la session avec le pid 1592908 en tant qu’annulation d’une requête select pg_sleep(10);.

  • La journalisation de la commande 14 par le pid 1592908 a ajouté deux lignes de journal, à savoir [14-1] et [14-2].

  • Une seule ligne de journal provenant de la 10e commande exécutée par la session avec le pid 1593992 s’est retrouvée entre les deux lignes provenant de la commande 14 sur le pid 1592908.

  • La commande suivante exécutée par la session avec le pid 1592908 était une requête show log_min_duration_statement et ne nécessitait qu’une seule ligne de journal, à savoir [15-1].

Astuce

Le format de la ligne de journal Postgres est déterminé par son paramètre de serveur `log_line_prefix<https://www.postgresql.org/docs/current/runtime-config-logging.html#GUC-LOG-LINE-PREFIX>`_, qui est défini par défaut sur “[%p://%b://%v://%x] %q[user=%u,db=%d,app=%a] [%h]” sur les instances Snowflake Postgres.