Journalisation Snowflake Postgres

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

All Postgres servers on Snowflake Postgres instances log locally to syslog. The log data is collected from there and sent to your account’s active event table.

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.

Each row of the output will contain a single log-line entry that was logged by the Postgres server on the given Snowflake Postgres instance with the timestamp when it was originally logged. Note that it can take up to a few minutes between the time Postgres makes a log entry and it is available in the event table.

Comprendre l’entrelacement des lignes de journal Postgres

Note that Postgres uses multi-line logging and since multiple Postgres server processes will be making log entries concurrently, full log entries from different Postgres server processes will often be interleaved. For example, let’s consider these log line entries:

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.

  • The second bracketed value is the process ID (pid) for the session that logged the line. Postgres uses a process-based (vs. thread-based) concurrency model so each session is run on its own server process.

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.