ロギング ======== オペレーターは、PostgreSQLログを含む標準出力にJSON形式で直接ログを記録するように設計されています。 各ログエントリには次のフィールドがあります。 - ``level`` – ログレベル\ ``info`` 、\ ``notice`` 、… 。 - ``ts`` – タイムスタンプマイクロ秒のエポック。 - ``logger`` – レコードのタイプたとえば ``postgres`` または\ ``pg_controldata`` など。 - ``msg`` – 実際のメッセージまたはキーワード\ ``record`` メッセージがJSON形式で解析される場合。 - ``record`` – ``logger`` タイプによって異なる構造を持つ実際のレコード。 - ``logging_podName`` – ログが作成されたポッド。 .. Warning:: ログの長期保存と管理はオペレーターの範囲外であり、Kubernetesインストールのレベルで提供される必要があります。 :ref:`Kubernetes Logging Architecture <ロギング>` を参照してください ドキュメント。 .. Note :: ログ取り込みシステムで必要な場合は、オペレーターコントローラの`log-field-level` および`log-field-timestamp` フラグを使用して、`level` および`ts` フィールド名を変更できます。 `cloudnative-pg` オペレーターの`Deployment` 定義を編集します。 オペレーターログ ---------------- オプション ``logLevel`` を使用して、クラスター仕様のログレベルを指定できます。 ``error`` 、\ ``warning`` 、\ ``info`` default、\ ``debug`` 、または\ ``trace`` に設定できます。 現在、ログレベルは、インスタンスの起動時にのみ設定できます。実行時に変更することはできません。クラスターが起動された後にクラスター仕様の値を変更する場合、新しいポッドでのみ有効になり、古いポッドでは有効になりません。 PostgreSQLログ -------------- PostgreSQLログの各エントリは、\ ``postgres`` に設定された\ ``logger`` キーと次の例で説明する構造を持つJSONオブジェクトです。 .. code:: 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ログ形式に依存しています。 :ref:`CSV log format <ロギング>` の詳細については、 PostgreSQLドキュメントを参照してください。 PGAuditログ ----------- CloudNativePGは、PostgreSQLクラスターで `PGAudit `_ の透過的かつネイティブサポートを備えています。 このサポートを有効にするには、必要な\ ``pgaudit`` パラメーターをクラスターの構成の\ ``postgresql`` セクションに追加します。 .. Important:: PGAuditライブラリを`shared_preload_libraries` に追加する必要があります。 CloudNativePGは、 postgresql構成内の`pgaudit.*` パラメーターの存在に基づいて、ライブラリを追加します。オペレーターは、`shared_preload_libraries` からのライブラリの追加と削除を検出および管理します。 オペレーターは、クラスター内の使用可能なすべてのデータベースから拡張機能の作成と削除も行います。 .. Important:: CloudNativePGは、接続を受け入れるクラスター内のすべてのデータベースで`CREATE EXTENSION` および`DROP EXTENSION` コマンドを実行します。 この例は、要求された構成で\ ``pgaudit`` が有効になるPostgreSQL 13 ``Cluster`` 展開を示しています。 .. code:: yaml 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`` には、解析されたレコード全体がJSONオブジェクトとして含まれています。これは、JSONオブジェクトとしてフォーマットされたPGAudit CSVメッセージが含まれる\ ``.record.audit`` を除き ``logging_collector`` ログに似ています。 この例は、サンプルログエントリを示しています。 .. code:: json { "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": "" } }, "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`` をログに記録されるエスケープメッセージに設定します。