Snowflake Postgresのログ記録

Postgresログデータの取得

Snowflake Postgresインスタンス上のすべてのPostgresサーバーは、ローカルでsyslogにログを記録します。 ログデータはそこから収集され、アカウントのアクティブな イベントテーブル に送信されます。

特定のインスタンスのPostgresログを表示するには、インスタンスホスト名の最初の部分(つまりインスタンス ID または cluster_id )を使用して、 TIMESTAMP フィールドのイベントテーブルと record_type = 'LOG'``を持つ記録の VALUE フィールドの MESSAGE 部分に対してクエリを実行します。たとえば、これはID ``oyrpb2cwtvbu5al5vtbyrsnkgy を持つインスタンスの過去10分間のログエントリを取得します。

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

注釈

上記のクエリは、アカウントのデフォルトイベントテーブルである SNOWFLAKE.TELEMETRY.EVENTS を使用します。カスタムイベントテーブルを設定している場合は、クエリを適切に調整する必要があります。

出力の各行には、指定されたSnowflake PostgresインスタンスのPostgresサーバーによって最初にログに記録されたときのタイムスタンプを持つ単一のログ行エントリが含まれます。 Postgresがログエントリを作成してから、イベントテーブルで利用可能になるまでに最大で数分かかる場合があることに注意してください。

Postgresログ行インターリーブについて

Postgresは複数行のログを使用し、複数のPostgresサーバープロセスが同時にログエントリを作成するため、異なるPostgresサーバープロセスからの完全なログエントリがインターリーブされることがよくあることに注意してください。 たとえば、次のログ行エントリを考えてみましょう。

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

各ログ行エントリ:

  • 最初の括弧で囲まれた値は、コマンドを実行したセッションのコマンド番号と、ハイフンで区切られたそのコマンドのログ行です。たとえば、[1-1]と[1-2]は、セッションで実行された最初のコマンドの2つのログ行になります。

  • 2番目の括弧で囲まれた値は、その行をログに記録したセッションのプロセス ID (pid)です。 Postgresはプロセスベース(対スレッドベース)の同時実行モデルを使用しているため、各セッションは独自のサーバープロセスで実行されます。

この例では、以下のことがわかります。

  • コマンド14は、 select pg_sleep(10); クエリのキャンセルとして、pid 1592908 を持つセッションによって実行された。

  • pid 1592908 によるコマンド14のログ記録により、2つのログ行として[14-1]と[14-2]が追加された。

  • pid 1593992 を持つセッションによって実行された10番目のコマンドの単一のログ行は、pid 1592908 のコマンド14の2行の間で終了した。

  • pid 1592908 を持つセッションによって実行された次のコマンドは show log_min_duration_statement クエリで、1つのログ行[15-1]のみを必要とした。

Tip

Postgresログ行形式は log_line_prefix サーバー設定によって決まります。デフォルトはSnowflake Postgresインスタンスの'[%p][%b][%v][%x] %q[user=%u,db=%d,app=%a] [%h]'です。