以下日志文件位于 /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 日 UTC 时间 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: "18.1.0"
primarySpec:
...
parameters:
...
alloydb.enable_pgaudit: "on"
pgaudit.log: "all"
如需了解详情,请参阅支持的数据库扩展程序中的 pgaudit。
第 2 步:在数据库中创建 pgAudit 扩展程序
配置参数并确保数据库已重启后,您必须连接到数据库并安装 pgAudit 扩展程序:
CREATE EXTENSION IF NOT EXISTS pgaudit;
您必须在要启用审核日志记录的每个数据库中运行此命令。此步骤是安装 DDL 审核所需的事件触发器的必要步骤。
pgAudit 参数 (GUC)
下表介绍了您可以在 DBCluster 规范的 parameters 部分中配置的关键 pgAudit 全局统一配置参数 (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) 部署边车容器。
边车容器与数据库在同一 Pod 中运行,装载日志卷 (obsdisk),并跟踪日志文件以将其转发到日志记录目的地。
示例:使用 Fluent Bit Sidecar 转发日志
以下示例演示了如何使用 Fluent Bit 边车来跟踪 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清单以引用边车,或使用以下命令修补集群:kubectl patch dbclusters.alloydbomni.dbadmin.goog DB_CLUSTER_NAME -p '{"spec":{"primarySpec":{"sidecarRef":{"name":"pgaudit-forwarder"}}}}' --type=merge将
DB_CLUSTER_NAME替换为您的数据库集群的名称。如需详细了解如何管理边车,请参阅配置边车容器。