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``
フィールドが含まれます。