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;
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:
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
1592908en tant qu’annulation d’une requêteselect pg_sleep(10);.La journalisation de la commande 14 par le pid
1592908a 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
1593992s’est retrouvée entre les deux lignes provenant de la commande 14 sur le pid1592908.La commande suivante exécutée par la session avec le pid
1592908était une requêteshow log_min_duration_statementet 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.