I seguenti file di log si trovano nella directory /obs/diagnostic/:
postgresql.audit: Questo file di log raccoglie i log di controllo dell'accesso a sessioni e oggetti. Per raccogliere i log di controllo, devi abilitarli.postgresql.log: questo file di log raccoglie i log del server PostgreSQL. Questi log vengono sempre raccolti e non devono essere abilitati.
Quando un file di log viene ruotato, si verifica quanto segue:
Il file di log viene copiato nella directory
/obs/diagnostic/archive/. Se in quella directory esiste un file di log con lo stesso nome, questo viene sovrascritto.I contenuti del file di log ruotato originale vengono eliminati in modo che il file sia vuoto.
Le informazioni del log iniziano immediatamente a essere scritte nel file di log ruotato vuoto. Le informazioni di log vengono scritte nel file di log fino a quando il file non raggiunge una soglia di dimensione o età, a quel punto viene nuovamente ruotato. I log vengono ruotati in modo che non diventino troppo grandi.
Per impostazione predefinita, l'impostazione di rotazione prevede che ogni file di log ruoti quando le sue dimensioni raggiungono i 200 MB. La rotazione predefinita non include un'impostazione dell'età.
I file archiviati vengono conservati per 7 giorni. I file archiviati più vecchi di 7 giorni vengono rimossi automaticamente, ad eccezione del file archiviato durante l'ultima rotazione. Ad esempio, se log_rotation_age ha più di 7 giorni, il file archiviato raggiunge la soglia di 7 giorni prima della rotazione del file corrente. In questo caso, il file archiviato non viene rimosso finché la rotazione successiva
non genera un nuovo file archiviato.
Ogni nome file di log ruotato segue questo formato: postgresql-%Y-%m-%d_%H%M%S.log.
Il timestamp viene determinato al momento della rotazione dei log ed è espresso in
Coordinated Universal Time (UTC). Ad esempio, se il log viene ruotato alle 13:01:02
del 20/12/2024 UTC, il nome del file archiviato è postgresql-2024-12-20_130102.log.
Ogni file archiviato viene compresso singolarmente utilizzando il formato di file Gzip.
Abilita audit log
Per attivare la registrazione dell'accesso a sessioni e oggetti, devi configurare i parametri pgAudit nel cluster di database e installare l'estensione nei tuoi database.
Passaggio 1: configura pgAudit nei parametri DBCluster
Affinché i log di accesso a sessioni e oggetti vengano raccolti nel file postgresql.audit, devi abilitare pgAudit e configurare le istruzioni da registrare utilizzando
pgaudit.log.
Aggiungi le seguenti righe alla sezione parameters del file
v1_dbcluster_parameters.yaml:
alloydb.enable_pgaudit: "on"
pgaudit.log: "all"
Di seguito è riportato un esempio di come appare nel manifest DBCluster:
apiVersion: v1
kind: Secret
...
apiVersion: alloydbomni.dbadmin.goog/v1
kind: DBCluster
metadata:
name: DB_CLUSTER_NAME
spec:
databaseVersion: "17.7.0"
primarySpec:
...
parameters:
...
alloydb.enable_pgaudit: "on"
pgaudit.log: "all"
Per ulteriori informazioni, vedi pgaudit in
Estensioni di database supportate.
Passaggio 2: crea l'estensione pgAudit nel database
Dopo aver configurato i parametri e verificato il riavvio del database, devi connetterti al database e installare l'estensione pgAudit:
CREATE EXTENSION IF NOT EXISTS pgaudit;
Devi eseguire questo comando in ogni database in cui vuoi abilitare la registrazione audit. Questo passaggio è necessario per installare i trigger evento necessari per il controllo DDL.
Parametri pgAudit (GUC)
La tabella seguente descrive i parametri GUC (Grand Unified Configuration) principali di pgAudit che puoi configurare nella sezione parameters della specifica DBCluster. Per saperne di più, consulta la documentazione di pgAudit.
| Parametro | Descrizione | Valore predefinito |
|---|---|---|
pgaudit.log
|
Specifica quali classi di
istruzioni vengono registrate dalla
registrazione di controllo della sessione. I valori validi sono
none, all, read, write,
function, role, ddl, misc,
misc_set. |
none
|
pgaudit.log_catalog
|
Specifica che la registrazione della sessione
è abilitata se tutte le relazioni
in un'istruzione si trovano in
pg_catalog. La disattivazione di questa opzione
riduce il rumore dei log dei client
di database. |
on
|
pgaudit.log_parameter
|
Specifica che l'audit logging include i parametri passati con l'istruzione. | off
|
pgaudit.log_relation
|
Specifica se il controllo della sessione
crea una voce di log
separata per ogni relazione
(tabella, vista e così via) a cui viene fatto riferimento
in un'istruzione SELECT o DML. |
off
|
pgaudit.log_rows
|
Specifica che la registrazione degli audit includa il numero di righe recuperate o interessate da un'istruzione. | off
|
pgaudit.log_statement
|
Specifica se la registrazione include il testo e i parametri dell'istruzione. | on
|
pgaudit.role
|
Specifica il ruolo principale da utilizzare per la registrazione degli audit log degli oggetti. | Nessuno |
I log del server PostgreSQL vengono sempre raccolti nel file postgresql.log e non richiedono l'attivazione di pgAudit.
Visualizzare il percorso del file di log di controllo
Utilizza la funzione SQL alloydb_audit_current_logfile per visualizzare il percorso del
file di log di controllo. Se il controllo è disattivato, il risultato è NULL.
SELECT alloydb_audit_current_logfile();
alloydb_audit_current_logfile
----------------------------------
/obs/diagnostic/postgresql.audit
Configura la rotazione log
Se vuoi avere un maggiore controllo sulla rotazione dei log, configura una dimensione massima del file, una durata tra le rotazioni dei log o entrambe. La durata tra le rotazioni dei log è chiamata anche età del log. Se utilizzi entrambe le impostazioni, ogni log viene ruotato quando raggiunge una delle soglie.
Per configurare la rotazione dei log, imposta uno o entrambi i seguenti parametri nella sezione parameters del manifest DBCluster:
log_rotation_size: "SIZE_IN_KB"log_rotation_age: "AGE_IN_MINUTES"
Per disattivare una delle impostazioni di rotazione dei log, impostala su zero, "0". Per mantenere
l'impostazione predefinita che ruota i log quando le dimensioni del file raggiungono i 200 MB,
non impostare alcun parametro.
Esempio di dimensione e durata massime della rotazione dei log
I seguenti set di esempio impostano la rotazione dei log quando la dimensione del file raggiunge 400 MB o quando il tempo tra le rotazioni dei log raggiunge un giorno, a seconda dell'evento che si verifica per primo:
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
Esempio di dimensione massima del log di rotazione log
Il seguente esempio imposta la rotazione dei log quando le dimensioni del file raggiungono 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
Esempio di durata della rotazione dei log
Il seguente esempio imposta la rotazione dei log una volta ogni 24 ore:
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
Inoltrare gli audit log a un sink centralizzato
AlloyDB Omni scrive i log di controllo nel file /obs/diagnostic/postgresql.audit all'interno del container del database. Se vuoi inoltrare questi log a un sink di logging centralizzato (come Cloud Logging, Datadog, Splunk o Elasticsearch), puoi eseguire il deployment di un container sidecar utilizzando la risorsa personalizzata (CR) Sidecar.
Il container sidecar viene eseguito nello stesso pod del database, monta il volume dei log (obsdisk) e segue il file di log per inoltrarlo alla destinazione di logging.
Esempio: inoltro dei log utilizzando un sidecar fluent bit
L'esempio seguente mostra come utilizzare un sidecar Fluent Bit per seguire i log pgAudit e inviarli all'output standard, dove possono essere raccolti dai raccoglitori di log del cluster Kubernetes standard (come l'agente Logging su Google Kubernetes Engine (GKE)).Google Cloud
Crea un ConfigMap per la configurazione di Fluent Bit:
Crea un oggetto ConfigMap contenente la configurazione di Fluent Bit per seguire il log di controllo.
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 *Sostituisci
NAMESPACEcon lo spazio dei nomi del cluster di database.Crea la risorsa personalizzata
Sidecar:Crea un manifest
Sidecarche definisce il container Fluent Bit e monta sia il volumeobsdisk(contenente i log di AlloyDB Omni) sia il volume 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/Registra il sidecar con il cluster di database:
Aggiorna il manifest
DBClusterin modo che faccia riferimento al sidecar o applica una patch al cluster utilizzando il seguente comando:kubectl patch dbclusters.alloydbomni.dbadmin.goog DB_CLUSTER_NAME -p '{"spec":{"primarySpec":{"sidecarRef":{"name":"pgaudit-forwarder"}}}}' --type=mergeSostituisci
DB_CLUSTER_NAMEcon il nome del cluster di database.Per saperne di più sulla gestione dei sidecar, consulta Configurare un container sidecar.
Passaggi successivi
- Gestire e monitorare AlloyDB Omni
- Generare e diagnosticare i file di dump di AlloyDB Omni
- Scopri di più sulla gestione automatica della memoria