ロギング
オペレーターは、PostgreSQLログを含む標準出力にJSON形式で直接ログを記録するように設計されています。
各ログエントリには次のフィールドがあります。
level– ログレベルinfo、notice、… 。ts– タイムスタンプマイクロ秒のエポック。logger– レコードのタイプたとえばpostgresまたはpg_controldataなど。msg– 実際のメッセージまたはキーワードrecordメッセージがJSON形式で解析される場合。record–loggerタイプによって異なる構造を持つ実際のレコード。logging_podName– ログが作成されたポッド。
警告
ログの長期保存と管理はオペレーターの範囲外であり、Kubernetesインストールのレベルで提供される必要があります。 Kubernetes Logging Architecture を参照してください
ドキュメント。
注釈
ログ取り込みシステムで必要な場合は、オペレーターコントローラの`log-field-level` および`log-field-timestamp` フラグを使用して、level および`ts` フィールド名を変更できます。 cloudnative-pg オペレーターの`Deployment` 定義を編集します。
オペレーターログ
オプション logLevel
を使用して、クラスター仕様のログレベルを指定できます。 error
、warning 、info default、debug 、またはtrace
に設定できます。
現在、ログレベルは、インスタンスの起動時にのみ設定できます。実行時に変更することはできません。クラスターが起動された後にクラスター仕様の値を変更する場合、新しいポッドでのみ有効になり、古いポッドでは有効になりません。
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クラスターで PGAudit の透過的かつネイティブサポートを備えています。
このサポートを有効にするには、必要なpgaudit
パラメーターをクラスターの構成のpostgresql
セクションに追加します。
重要
PGAuditライブラリを`shared_preload_libraries` に追加する必要があります。 CloudNativePGは、 postgresql構成内の`pgaudit.*` パラメーターの存在に基づいて、ライブラリを追加します。オペレーターは、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には、解析されたレコード全体がJSONオブジェクトとして含まれています。これは、JSONオブジェクトとしてフォーマットされたPGAudit CSVメッセージが含まれる.record.auditを除き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-archivebarman-cloud-wal-archiveから直接barman-cloud-wal-restorebarman-cloud-wal-restoreから直接initdbinitdbの実行からpg_basebackuppg_basebackupの実行からpg_controldatapg_controldataの実行からpg_ctlpg_ctlサブコマンドの実行からpg_rewindpg_rewindの実行からpgauditPGAudit拡張機能からpostgrespostgresインスタンスからrecordとは異なるmsgを持っていますwal-archiveインスタンスマネージャーのwal-archiveサブコマンドからwal-restoreインスタンスマネージャーのwal-restoreサブコマンドから
前述の構造を持つpostgres を除き 、他のすべての可能な値はmsg
をログに記録されるエスケープメッセージに設定します。