Logging ======= .. raw:: html CloudNativePGは、セキュリティ上の理由からストレージに永続化せずに、PostgreSQLログを含む標準出力にJSON形式でログを出力します。このデザインにより、 `stern `_ のようなコマンドラインのものを含む、ほとんどのKubernetes互換ログ管理ツールとのシームレスな統合が促進されます。 .. Note:: ログの長期保存と管理はオペレーターの範囲外であり、Kubernetesインフラストラクチャレベルで処理する必要があります。詳細については、 `Kubernetes Logging Architecture `_ を参照してください。 ドキュメント。   各ログエントリには、次のフィールドが含まれます。 - ``level`` – ログレベルたとえば ``info`` 、\ ``notice`` 。 - ``ts`` – タイムスタンプ。 - ``logger`` – ログのタイプ\ ``postgres`` 、\ ``pg_controldata`` など。 - ``msg`` – ログメッセージ、またはメッセージがJSON形式の場合はキーワード\ ``record`` - ``record`` – 実際のレコード。\ ``logger`` タイプに応じて異なる構造。 - ``logging_pod`` – ログが生成されたポッドの名前。 .. Note:: ログ取り込みシステムでカスタムフィールド名が必要な場合、オペレーターコントローラの`log-field-level` および`log-field-timestamp` フラグを使用して、`level` および`ts` フィールドの名前を変更できます。これは、 `cloudnative-pg` オペレーターの`Deployment` 定義を編集することにより構成できます。   クラスターログ -------------- ``logLevel`` オプションを使用して、クラスター仕様でインスタンスポッドのログレベルを構成できます。使用可能なログレベルは\ ``error`` 、\ ``warning`` 、\ ``info`` デフォルト、\ ``debug`` 、および\ ``trace`` です。 .. Note:: 現在、ログレベルはインスタンスの起動時にのみ設定できます。クラスターが起動した後のクラスター仕様のログレベルの変更は、新しいポッドにのみ適用され、既存のポッドには適用されません。   オペレーターログ ---------------- オペレーターポッドによって生成されるログは、インスタンスポッドと同じログレベルで構成できます。\ ``error`` 、\ ``warning`` 、\ ``info`` デフォルト、\ ``debug`` 、および\ ``trace`` 。 オペレーターのログレベルは、オペレーターの\ ``Deployment`` 定義を編集し、\ ``--log-level`` コマンドライン引数を目的の値に設定することにより、構成できます。 PostgreSQLログ -------------- 各PostgreSQLログエントリは、 ``logger`` キーが\ ``postgres`` に設定された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", } .. Note:: 内部的に、オペレーターはPostgreSQLのCSVログ形式を使用します。詳細については、 `PostgreSQL documentation on CSV log format `_ を参照してください。   PG監査ログ ---------- CloudNativePGは、 PostgreSQLクラスターで `PGAudit `_ のシームレスなネイティブサポートを提供します。 PGAuditを有効にするには、クラスター構成の\ ``postgresql`` セクションに必要な\ ``pgaudit`` パラメーターを追加します。 .. Note:: PGAuditライブラリを`shared_preload_libraries` に追加する必要があります。 CloudNativePGは、PostgreSQL構成内の`pgaudit.*` パラメーターの存在に基づいて、これを自動的に管理します。オペレーターは、`shared_preload_libraries` からのライブラリの追加と削除の両方を処理します。   さらに、オペレーターは、クラスター内のすべてのデータベースでPGAudit拡張機能の作成と削除を管理します。 .. Note:: CloudNativePGは、接続を受け入れるクラスター内のすべてのデータベースで`CREATE EXTENSION` および`DROP EXTENSION` コマンドを実行します。   次の例は、PGAuditが有効および構成されたPostgreSQL ``Cluster`` 展開を示しています。 .. code:: yaml apiVersion: postgresql.cnpg.io/v1 kind: Cluster metadata: name: cluster-example spec: instances: 3 postgresql: parameters: "pgaudit.log": "all, -misc" "pgaudit.log_catalog": "off" "pgaudit.log_parameter": "on" "pgaudit.log_relation": "on" storage: size: 1Gi PGAuditによって生成された監査CSVログエントリは解析され、他のすべてのログと同様に、JSON形式で標準出力にルーティングされます。 - ``.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`` インスタンスからのログ ``msg`` は\ ``record`` とは異なります - ``wal-archive`` インスタンスマネージャーの\ ``wal-archive`` サブコマンドからのログ - ``wal-restore`` インスタンスマネージャーの\ ``wal-restore`` サブコマンドからのログ - ``instance-manager`` :ref:`PostgreSQL instance manager ` から 特定の構造に従う\ ``postgres`` を除き 、他のすべての\ ``logger`` 値には、ログに記録されるエスケープメッセージを含む\ ``msg`` フィールドが含まれます。