ロギング

オペレーターは、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 のいずれかに設定できます。

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

PostgreSQLログ

PostgreSQLログの各エントリは、 logger キーがpostgres に設定され、次の例で説明する構造を持つ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クラスターでの 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 ログと同様に、解析されたレコード全体が含まれています。

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

{
  "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 インスタンスから(msg はrecord とは異なります)

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

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

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