ロギング

オペレーターは、PostgreSQL ログを含む標準出力に JSON 形式で直接ログインするように設計されています。

各ログ エントリには次のフィールドがあります。

  • level : ログ レベル (info 、notice 、…)

  • ts : タイムスタンプ (マイクロ秒のエポック)

  • logger : レコードのタイプ (例: postgres または pg_controldata )

  • msg : メッセージが JSON 形式で解析される場合の実際のメッセージまたはキーワード record

  • record : 実際のレコード (logger タイプによって構造が異なります)

  • logging_podName : ログが生成されたポッド

警告

ログの長期保存と管理はオペレーターの権限外であり、Kubernetes インストールのレベルで提供する必要があります。 Kubernetes Logging Architecture を参照してください。

ドキュメンテーション。

オペレーターログ

ログ レベルは、オプション logLevel を使用してクラスター仕様で指定でき、error 、warning 、info (デフォルト)、debug 、または trace のいずれかに設定できます。

現時点では、ログ レベルはインスタンスの起動時にのみ設定でき、実行時に変更することはできません。クラスターの開始後にクラスター仕様で値が変更された場合、これは新しい Pod でのみ有効になり、古い Pod では有効になりません。

PostgreSQL ログ

PostgreSQL ログの各エントリは、postgres に設定された logger キーと、次の例で説明されている構造を持つ JSON オブジェクトです。

{
  "level": "info",
  "ts": 1619781249.7188137,
  "logger": "postgres",
  "msg": "record",
  "record": {
    "log_time": "2021-04-30 11:14:09.718 UTC",
    "user_name": "",
    "database_name": "",
    "process_id": "25",
    "connection_from": "",
    "session_id": "608be681.19",
    "session_line_num": "1",
    "command_tag": "",
    "session_start_time": "2021-04-30 11:14:09 UTC",
    "virtual_transaction_id": "",
    "transaction_id": "0",
    "error_severity": "LOG",
    "sql_state_code": "00000",
    "message": "database system was interrupted; last known up at 2021-04-30 11:14:07 UTC",
    "detail": "",
    "hint": "",
    "internal_query": "",
    "internal_query_pos": "",
    "context": "",
    "query": "",
    "query_pos": "",
    "location": "",
    "application_name": "",
    "backend_type": "startup"
  },
  "logging_pod": "cluster-example-1",
}

内部的には、オペレーターは PostgreSQL CSV ログ形式に依存しています。 CSV log format の詳細については、PostgreSQL のドキュメントを参照してください。

PGAudit ログ

CloudNativePG は、PostgreSQL クラスターで :ref:``pgaudit` の有効化<pgaudit の有効化>` を透過的かつネイティブにサポートします。

必要な pgaudit パラメーターをクラスターの構成の postgresql セクションに追加するだけです。

重要

shared_preload_libraries に PGAudit ライブラリを追加する必要はありません。ライブラリは、postgresql 構成内の pgaudit.* パラメーターの存在に基づいて、CloudNativePG によって自動的に追加されます。オペレーターは、shared_preload_libraries からのライブラリの追加と削除を検出して管理します。

オペレーターは、クラスター内の使用可能なすべてのデータベースから拡張機能を作成および削除することも行います。

重要

CloudNativePG は、接続を受け入れるクラスター内のすべてのデータベースで CREATE EXTENSION および DROP EXTENSION コマンドを実行します。

以下は、要求された構成で pgaudit が有効になる PostgreSQL 13 Cluster 展開の例です。

apiVersion: postgresql.cnpg.io/v1
kind: Cluster
metadata:
  name: cluster-example
spec:
  instances: 3
  imageName: ghcr.io/cloudnative-pg/postgresql:13

  postgresql:
    parameters:
      "pgaudit.log": "all, -misc"
      "pgaudit.log_catalog": "off"
      "pgaudit.log_parameter": "on"
      "pgaudit.log_relation": "on"

  storage:
    size: 1Gi

次に、PGAudit によって返された監査 CSV ログ エントリが解析され、残りのすべてのログと同様に、JSON 形式で stdout にルーティングされます。

  • .logger は pgaudit に設定されます

  • .msg は record に設定されます

  • .record には、logging_collector ログと同様に、解析されたレコード全体が JSON オブジェクトとして含まれます - JSON オブジェクトとしてフォーマットされた PGAudit CSV メッセージを含む .record.audit を除いて

以下の例を参照してください。

{
  "level": "info",
  "ts": 1627394507.8814096,
  "logger": "pgaudit",
  "msg": "record",
  "record": {
    "log_time": "2021-07-27 14:01:47.881 UTC",
    "user_name": "postgres",
    "database_name": "postgres",
    "process_id": "203",
    "connection_from": "[local]",
    "session_id": "610011cb.cb",
    "session_line_num": "1",
    "command_tag": "SELECT",
    "session_start_time": "2021-07-27 14:01:47 UTC",
    "virtual_transaction_id": "3/336",
    "transaction_id": "0",
    "error_severity": "LOG",
    "sql_state_code": "00000",
    "backend_type": "client backend",
    "audit": {
      "audit_type": "SESSION",
      "statement_id": "1",
      "substatement_id": "1",
      "class": "READ",
      "command": "SELECT FOR KEY SHARE",
      "statement": "SELECT pg_current_wal_lsn()",
      "parameter": "<none>"
    }
  },
  "logging_pod": "cluster-example-1",
}

レコードの各フィールドの詳細については、 PGAudit documentation を参照してください。

その他のログ

オペレーターとそのインスタンスによって生成されるすべてのログは JSON 形式であり、それらを生成したプロセスに応じて logger が設定されます。したがって、可能なすべての logger 値は次のとおりです。

  • barman-cloud-wal-archive : barman-cloud-wal-archive から直接

  • barman-cloud-wal-restore : barman-cloud-wal-restore から直接

  • initdb : initdb の実行から

  • pg_basebackup : pg_basebackup の実行から

  • pg_controldata : pg_controldata の実行から

  • pg_ctl : pg_ctl サブコマンドの実行から

  • pg_rewind : pg_rewind の実行から

  • pgaudit : PGAudit 拡張機能から

  • postgres : postgres インスタンスから (record とは異なる msg を持つ)

  • wal-archive : インスタンス マネージャーの wal-archive サブコマンドから

  • wal-restore : インスタンス マネージャーの wal-restore サブコマンドから

前述の構造を持つ postgres を除いて、他のすべての可能な値には、ログに記録されるエスケープされたメッセージに設定された msg があります。