ロギング¶
オペレーターは、PostgreSQL ログを含む標準出力に JSON 形式で直接ログインするように設計されています。
各ログ エントリには次のフィールドがあります。
level: ログ レベル (info、notice、…)ts: タイムスタンプ (マイクロ秒のエポック)logger: レコードのタイプ (例:postgresまたはpg_controldata)msg: メッセージが JSON 形式で解析される場合の実際のメッセージまたはキーワードrecordrecord: 実際のレコード (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 があります。