Snowflake Postgres-Protokollierung

Abrufen von Postgres-Protokolldaten

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.

Um die Postgres-Protokolle für eine bestimmte Instanz anzuzeigen, fragen Sie die Ereignistabelle nach dem Feld TIMESTAMP und dem MESSAGE-Teil des Felds VALUE der Datensätze mit record_type = 'LOG' ab. Verwenden Sie dafür den ersten Teil des Hostnamens der Instanz, d. h. die Instanz-ID (oder cluster_id). So werden beispielsweise die letzten 10 Minuten der Protokolleinträge für eine Instanz mit der ID oyrpb2cwtvbu5al5vtbyrsnkgy abgerufen:

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

Bemerkung

Die obige Abfrage verwendet die Standard-Ereignistabelle des Kontos: SNOWFLAKE.TELEMETRY.EVENTS. Wenn Sie eine kundenspezifische Ereignistabelle eingerichtet haben, sollten Sie die Abfrage entsprechend anpassen.

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.

Erläuterungen zur Verschachtelung von Postgres-Protokollzeilen

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:

Beispiel für Postgres-Protokollzeilen

Zeitstempel

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>“

Für jeden Protokollzeileneintrag gilt:

  • Die ersten Werte in Klammern sind die Befehlsnummer der Sitzung, in der der Befehl ausgeführt wurde, und die Protokollzeile für diesen Befehl, getrennt durch einen Bindestrich. Beispielsweise sind [1-1] und [1-2] zwei Protokollzeilen von der ersten Befehlsausführung in einer Sitzung.

  • 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.

In diesem Beispiel können Sie Folgendes sehen:

  • Befehl 14 wurde von der Sitzung mit PID 1592908 als Abbruch einer select pg_sleep(10);-Abfrage ausgeführt.

  • Protokollierung von Befehl 14 durch PID 1592908 hat zwei Protokollzeilen hinzugefügt, [14-1] und [14-2].

  • Eine einzelne Protokollzeile aus dem 10. Befehl, der von der Sitzung mit PID 1593992 ausgeführt wird, endete zwischen den beiden Zeilen von Befehl 14 in ID 1592908.

  • Der nächste Befehl, der von der Sitzung mit PID 1592908 ausgeführt wird, war eine show log_min_duration_statement-Abfrage und benötigte nur eine Protokollzeile, [15-1].

Tipp

Das Format der Postgres-Protokollzeile wird durch die Servereinstellung log_line_prefix bestimmt, die bei Snowflake Postgres-Instanzen standardmäßig ‚[%p][%b][%v][%x] %q[user=%u,db=%d,app=%a] [%h]‘ lautet.