/obs/diagnostic/ 目錄中包含下列記錄檔:
postgresql.audit:這個記錄檔會收集工作階段和物件存取稽核記錄。如要收集稽核記錄,請啟用稽核記錄。postgresql.log:這個記錄檔會收集 PostgreSQL 伺服器記錄。系統一律會收集這些記錄,無須啟用。
記錄檔輪替時,會發生下列情況:
記錄檔會複製到
/obs/diagnostic/archive/目錄。如果該目錄中已有同名的記錄檔,系統會覆寫該檔案。系統會刪除原始輪替記錄檔的內容,讓檔案保持空白。
系統會立即開始將記錄資訊寫入空白的輪替記錄檔。記錄資訊會寫入記錄檔,直到檔案達到大小或時間門檻為止,此時檔案會再次輪替。記錄檔會輪替,以免過大。
根據預設,輪替設定為每個記錄檔達到 200 MB 時輪替。預設輪播不會包含年齡設定。
封存的檔案會保留 7 天,系統會自動移除封存超過 7 天的檔案,但上次輪替期間封存的檔案除外。舉例來說,如果 log_rotation_age 的時間超過 7 天,則封存的檔案會在目前檔案輪替前達到 7 天的門檻。在這種情況下,系統不會移除這個封存檔案,直到下次輪替產生新的封存檔案為止。
每個輪替記錄檔的檔案名稱都採用以下格式:postgresql-%Y-%m-%d_%H%M%S.log。時間戳記會在記錄檔輪替時決定,並以世界標準時間 (UTC) 表示。舉例來說,如果記錄檔在 2024 年 12 月 20 日 13:01:02 (世界標準時間) 輪替,封存的檔案名稱為 postgresql-2024-12-20_130102.log。
每個封存的檔案都會使用 Gzip 檔案格式個別壓縮。
啟用稽核記錄
如要啟用工作階段和物件存取記錄,您必須在資料庫叢集中設定 pgAudit 參數,並在資料庫中安裝擴充功能。
步驟 1:在 DBCluster 參數中設定 pgAudit
如要在 postgresql.audit 檔案中收集工作階段和物件存取記錄,您必須啟用 pgAudit,並使用 pgaudit.log 設定要記錄的陳述式。
在
v1_dbcluster_parameters.yaml
檔案的 parameters 區段中新增下列幾行:
alloydb.enable_pgaudit: "on"
pgaudit.log: "all"
以下範例說明 DBCluster 資訊清單中的顯示方式:
apiVersion: v1
kind: Secret
...
apiVersion: alloydbomni.dbadmin.goog/v1
kind: DBCluster
metadata:
name: DB_CLUSTER_NAME
spec:
databaseVersion: "17.9.0"
primarySpec:
...
parameters:
...
alloydb.enable_pgaudit: "on"
pgaudit.log: "all"
詳情請參閱「支援的資料庫擴充功能」中的 pgaudit。
步驟 2:在資料庫中建立 pgAudit 擴充功能
設定參數並確認資料庫已重新啟動後,您必須連線至資料庫並安裝 pgAudit 擴充功能:
CREATE EXTENSION IF NOT EXISTS pgaudit;
您必須在每個要啟用稽核記錄的資料庫中執行這項指令。您必須執行這個步驟,才能安裝 DDL 稽核所需的事件觸發條件。
pgAudit 參數 (GUC)
下表說明可在 parameters 規格的 DBCluster 區段中設定的主要 pgAudit Grand Unified Configuration (GUC) 參數。詳情請參閱 pgAudit 說明文件。
| 參數 | 說明 | 預設值 |
|---|---|---|
pgaudit.log
|
指定工作階段稽核記錄記錄的陳述式類別。有效值為 none、all、read、write、function、role、ddl、misc、misc_set。 |
none
|
pgaudit.log_catalog
|
指定如果陳述式中的所有關係都在 pg_catalog 中,則會啟用工作階段記錄。停用這項功能可減少資料庫用戶端的記錄雜訊。 |
on
|
pgaudit.log_parameter
|
指定稽核記錄是否要包含陳述式傳遞的參數。 | off
|
pgaudit.log_relation
|
指定工作階段稽核是否要為 SELECT 或 DML 陳述式中參照的每個關係 (資料表、檢視區塊等) 建立個別的記錄項目。 |
off
|
pgaudit.log_rows
|
指定稽核記錄包含陳述式擷取或影響的資料列數。 | off
|
pgaudit.log_statement
|
指定記錄是否包含陳述式文字和參數。 | on
|
pgaudit.role
|
指定用於物件稽核記錄的主要角色。 | 無 |
PostgreSQL 伺服器記錄一律會收集在 postgresql.log 檔案中,不需要啟用 pgAudit。
查看稽核記錄檔的路徑
使用 SQL 函式 alloydb_audit_current_logfile 查看稽核記錄檔的路徑。如果稽核功能已停用,則結果為 NULL。
SELECT alloydb_audit_current_logfile();
alloydb_audit_current_logfile
----------------------------------
/obs/diagnostic/postgresql.audit
設定記錄輪替
如要進一步控制記錄檔輪替時間,請設定檔案大小上限、記錄檔輪替間隔時間,或同時設定這兩項。記錄檔輪替之間的時間長度也稱為記錄檔的存續時間。如果同時使用這兩項設定,則每個記錄檔達到其中一個門檻時,就會輪替。
如要設定記錄輪替,請在 DBCluster 資訊清單的 parameters 區段中,設定下列一或兩個參數:
log_rotation_size:「SIZE_IN_KB」log_rotation_age:「AGE_IN_MINUTES」
如要停用其中一項記錄輪替設定,請將其設為零 ("0")。如要保留預設設定,也就是記錄檔達到 200 MB 時輪替,請勿設定任何參數。
記錄輪替的最大記錄檔大小和時間長度範例
以下範例會將記錄檔設為在檔案大小達到 400 MB 時輪替,或在記錄檔輪替間隔達到一天時輪替 (以先發生者為準):
apiVersion: alloydbomni.dbadmin.goog/v1
kind: DBCluster
metadata:
name: DB_CLUSTER_NAME
spec:
...
primarySpec:
...
parameters:
log_rotation_size: "400000" # 400 MB
log_rotation_age: "1440" # 24 hours * 60 minutes = 1 day
記錄輪替最大記錄檔大小範例
下列範例會設定記錄檔,在檔案大小達到 400 MB 時輪替:
apiVersion: alloydbomni.dbadmin.goog/v1
kind: DBCluster
metadata:
name: DB_CLUSTER_NAME
spec:
...
primarySpec:
...
parameters:
log_rotation_size: "400000" # 400 MB
log_rotation_age: "0" # Set to 0 to disable
記錄輪替時間長度範例
下列範例會將記錄檔設為每 24 小時輪替一次:
apiVersion: alloydbomni.dbadmin.goog/v1
kind: DBCluster
metadata:
name: DB_CLUSTER_NAME
spec:
...
primarySpec:
...
parameters:
log_rotation_size: "0" # Set to 0 to disable
log_rotation_age: "1440" # 24 hours * 60 minutes = 1 day
將稽核記錄轉送至集中式接收器
AlloyDB Omni 會將稽核記錄寫入資料庫容器內的 /obs/diagnostic/postgresql.audit 檔案。如要將這些記錄轉送至集中式記錄接收器 (例如 Cloud Logging、Datadog、Splunk 或 Elasticsearch),可以使用 Sidecar 自訂資源 (CR) 部署 Sidecar 容器。
邊車容器會在與資料庫相同的 Pod 中執行,掛接記錄磁碟區 (obsdisk),並追蹤記錄檔,將其轉送至記錄目的地。
範例:使用 Fluent Bit Sidecar 轉送記錄
以下範例說明如何使用 Fluent Bit Sidecar 追蹤 pgAudit 記錄,並將其輸出至標準輸出,以便由標準 Kubernetes 叢集記錄收集器 (例如 Google Kubernetes Engine (GKE) 上的Google Cloud Logging 代理程式) 收集。
為 Fluent Bit 設定建立 ConfigMap:
建立包含 Fluent Bit 設定的 ConfigMap,以追蹤稽核記錄。
apiVersion: v1 kind: ConfigMap metadata: name: fluentbit-config namespace: NAMESPACE data: fluent-bit.conf: | [SERVICE] Flush 1 Daemon Off Log_Level info [INPUT] Name tail Path /obs/diagnostic/postgresql.audit Tag pgaudit DB /tmp/fluent-bit-pgaudit.db [OUTPUT] Name stdout Match *請將
NAMESPACE改成資料庫叢集的命名空間。建立
Sidecar自訂資源:建立
Sidecar資訊清單,定義 Fluent Bit 容器,並掛接obsdisk磁碟區 (內含 AlloyDB Omni 記錄) 和 ConfigMap 磁碟區。apiVersion: alloydbomni.dbadmin.goog/v1 kind: Sidecar metadata: name: pgaudit-forwarder namespace: NAMESPACE spec: additionalVolumes: - name: fluentbit-config-volume configMap: name: fluentbit-config sidecars: - name: fluent-bit image: fluent/fluent-bit:3.0 command: ["/fluent-bit/bin/fluent-bit"] args: ["-c", "/fluent-bit/etc/fluent-bit.conf"] volumeMounts: - name: obsdisk mountPath: /obs - name: fluentbit-config-volume mountPath: /fluent-bit/etc/向資料庫叢集註冊補充元件:
更新
DBCluster資訊清單以參照 Sidecar,或使用下列指令修補叢集:kubectl patch dbclusters.alloydbomni.dbadmin.goog DB_CLUSTER_NAME -p '{"spec":{"primarySpec":{"sidecarRef":{"name":"pgaudit-forwarder"}}}}' --type=merge將
DB_CLUSTER_NAME替換為資料庫叢集名稱。如要進一步瞭解如何管理 Sidecar,請參閱「設定邊車容器」。