I seguenti file di log si trovano nella directory /obs/diagnostic/:
postgresql.log: questo file di log raccoglie i log del server PostgreSQL, ad esempio connessioni client, query e avvisi amministrativi. Questi log vengono sempre raccolti e non devono essere abilitati.postgresql.audit: Questo file di log raccoglie i log di controllo dell'accesso a sessioni e oggetti. Per raccogliere i log di controllo, vedi Gestire i log di controllo con pgAudit.postgresql.internal: AlloyDB Omni fornisce più messaggi oltre ai normali log di PostgreSQL. Questi messaggi forniscono ulteriori informazioni tecniche che possono essere utili per il debug dei problemi del database.
Comprendere e configurare la rotazione dei log
Scopri come AlloyDB Omni gestisce la rotazione dei log e come configurare le soglie di rotazione in base alle dimensioni o alla durata del file.
Comportamento di rotazione log
Quando un file di log viene ruotato, si verifica quanto segue:
Il file di log esistente viene archiviato nella directory
/obs/diagnostic/archive/.Il file di log attivo in
/obs/diagnostic/viene reimpostato in modo che le voci di log successive inizino a essere scritte in un file pulito.Le informazioni di log continuano a essere scritte nel file di log attivo finché il file non raggiunge una soglia di dimensione o età, a quel punto viene ruotato di nuovo. I log vengono ruotati in modo che i file di log attivi 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 il formato
postgresql-%Y-%m-%d_%H%M%S.EXTENSION.gz, dove
EXTENSION è log, audit o internal. Il tempo di rotazione
determina il timestamp nel fuso orario UTC (Coordinated Universal Time). Ad esempio,
se un file di log viene ruotato alle 13:01:02 del 20 dicembre 2024 UTC, il nome del file archiviato è postgresql-2024-12-20_130102.log.gz.
Il sistema comprime ogni file archiviato singolarmente utilizzando il formato
gzip.
Configura le soglie di rotazione
Per controllare la 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"
Sostituisci quanto segue:
SIZE_IN_KB: la dimensione massima del file, in kilobyte, prima della rotazione dei log.AGE_IN_MINUTES: la durata tra le rotazioni dei log, in minuti.
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 nessuno dei due parametri.
Rotazione in base alle dimensioni e alla durata del log
I seguenti set di esempio impostano la rotazione dei log quando le dimensioni del file raggiungono 400 MB o quando il tempo tra le rotazioni dei log raggiunge un giorno, a seconda di quale evento 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
Sostituisci DB_CLUSTER_NAME con il nome del cluster di database.
Ruota solo in base alle dimensioni del log
Il seguente esempio imposta la rotazione dei log quando la dimensione del file raggiunge 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
Sostituisci DB_CLUSTER_NAME con il nome del cluster di database.
Ruota solo in base alla durata
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
Sostituisci DB_CLUSTER_NAME con il nome del cluster di database.
Parametri di logging PostgreSQL supportati
Puoi configurare le informazioni emesse in postgresql.log impostando
i parametri GUC (Grand Unified Configuration) di logging PostgreSQL standard nella
sezione parameters del manifest DBCluster:
apiVersion: alloydbomni.dbadmin.goog/v1
kind: DBCluster
metadata:
name: DB_CLUSTER_NAME
spec:
...
primarySpec:
...
parameters:
log_min_messages: "warning"
log_min_duration_statement: "250" # Log queries taking >= 250ms
log_statement: "ddl" # Log all DDL statements
log_lock_waits: "on"
log_checkpoints: "on"
log_temp_files: "0" # Log all temporary files created
log_autovacuum_min_duration: "1000" # Log autovacuum runs taking >= 1s
Sostituisci DB_CLUSTER_NAME con il nome del cluster di database.
La tabella seguente descrive i parametri di logging PostgreSQL supportati in base a Error Reporting and Logging nella documentazione di PostgreSQL.
| Parametro | Descrizione |
|---|---|
log_min_messages
|
Controlla quali livelli di messaggi vengono scritti nel log del server.
I valori validi sono debug5, debug4, debug3, debug2, debug1,
info, notice, warning, error, log, fatal e panic.
Ogni livello include tutti i livelli di gravità seguenti. |
log_min_error_statement
|
Controlla quali istruzioni SQL che causano una condizione di errore
vengono registrate nel log del server. I valori validi sono compresi tra debug5 e
panic. Per disattivare la registrazione degli errori delle istruzioni, imposta panic. |
log_min_duration_statement
|
Registra la durata di ogni istruzione completata
se l'istruzione è stata eseguita per almeno il numero specificato di
millisecondi. Se imposti questo parametro su 0, vengono registrate tutte le istruzioni
e le durate. Se imposti questo parametro su -1, il logging della durata viene disabilitato. |
log_min_duration_sample
|
I campioni hanno completato le istruzioni in esecuzione per almeno i millisecondi specificati, alla velocità impostata da log_statement_sample_rate.
Se imposti questo parametro su -1, il logging della durata campionata viene disattivato. |
log_statement_sample_rate
|
Specifica la frazione di istruzioni che superano
log_min_duration_sample che vengono registrate (da 0.0 a 1.0). |
log_transaction_sample_rate
|
Specifica la frazione di transazioni le cui istruzioni sono tutte
registrate (da 0.0 a 1.0), indipendentemente dalla durata di esecuzione
dell'istruzione. |
log_statement
|
Controlla quali istruzioni SQL vengono registrate: none (off), ddl
(tutti i comandi di definizione dei dati), mod (DDL più istruzioni
di modifica dei dati come INSERT, UPDATE e DELETE) o all. |
log_duration
|
Registra la durata di ogni istruzione completata. Il testo della query non viene stampato a meno che non venga superata anche la soglia log_min_duration_statement. |
log_line_prefix
|
Specifica l'output del prefisso in stile printf all'inizio di ogni
riga di log (ad esempio %m per il timestamp, %p per l'ID processo, %u
per l'utente e %d per il database). |
log_connections |
Controlla se le connessioni client al database vengono registrate. |
log_disconnections
|
Controlla se vengono registrate le terminazioni e le durate delle sessioni. |
log_hostname
|
Controlla se il nome host del client di connessione viene registrato oltre al relativo indirizzo IP. |
log_error_verbosity
|
Controlla il livello di dettaglio nei messaggi di log del server: terse,
default o verbose (include il codice SQLSTATE e le righe di origine). |
log_lock_waits
|
Controlla se viene registrato un messaggio quando una sessione attende più a lungo
di deadlock_timeout per acquisire un blocco. |
log_lock_failures
|
Controlla se viene registrato un messaggio quando l'acquisizione di un blocco non riesce
(ad esempio, quando si utilizza SELECT ... NOWAIT). |
log_checkpoints
|
Registra i punti di controllo e i punti di riavvio nel log, incluse le statistiche e la tempistica di scrittura dei buffer. |
log_autovacuum_min_duration
|
Registra ogni azione eseguita da autovacuum se è stata eseguita per almeno
il numero specificato di millisecondi. Se imposti questo parametro su
0, vengono registrate tutte le azioni. Se imposti questo parametro su -1, il logging viene disattivato. |
log_temp_files
|
Controlla la registrazione dei nomi e delle dimensioni in kilobyte dei file temporanei
quando vengono eliminati (per ordinamenti, hash o risultati delle query). Se imposti questo
parametro su 0, vengono registrati tutti i file temporanei. Se imposti questo parametro su -1, il logging viene disattivato. |
log_parameter_max_length
|
Tronca i valori dei parametri di associazione registrati nei log delle istruzioni non di errore a
questo numero di byte. Se imposti questo parametro su -1, i valori vengono registrati
per intero. Se imposti questo parametro su 0, il logging dei parametri viene disattivato. |
log_parameter_max_length_on_error
|
Tronca i valori dei parametri di binding riportati nei messaggi di errore a questo
numero di byte. Se imposti questo parametro su 0, i parametri
nei messaggi di errore vengono disattivati. Se lo imposti su -1, i valori vengono registrati per intero. |
log_replication_commands
|
Controlla se i comandi di replica e le azioni dello slot di replica vengono registrati. |
log_recovery_conflict_waits
|
Controlla se un messaggio viene registrato quando la procedura di avvio
attende più di deadlock_timeout per i conflitti di recupero. |
log_startup_progress_interval
|
Imposta il tempo in millisecondi tra i messaggi di avanzamento per
le operazioni di avvio a lunga esecuzione. Se imposti questo parametro su 0,
lo disattivi. |
log_timezone |
Imposta il fuso orario utilizzato per i timestamp nel log del server. |
Gestire gli audit log con pgAudit
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 i parametri pgAudit nel manifest DBCluster
Per raccogliere i log di accesso a sessioni e oggetti nel file postgresql.audit,
attiva pgAudit e configura le istruzioni da registrare utilizzando il parametro pgaudit.log.
Aggiungi le seguenti righe alla sezione parameters del file
v1_dbcluster_parameters.yaml:
alloydb.enable_pgaudit: "on"
pgaudit.log: "all"
Il seguente esempio mostra questa configurazione nel file manifest DBCluster:
apiVersion: alloydbomni.dbadmin.goog/v1
kind: DBCluster
metadata:
name: DB_CLUSTER_NAME
spec:
databaseVersion: "18.3.0"
primarySpec:
...
parameters:
...
alloydb.enable_pgaudit: "on"
pgaudit.log: "all"
Sostituisci DB_CLUSTER_NAME con il nome del cluster di database.
Per ulteriori informazioni, vedi pgaudit in
Estensioni di database supportate.
Passaggio 2: installa l'estensione pgAudit in ogni database
Dopo aver configurato i parametri e riavviato il database, connettiti al database e installa l'estensione pgAudit:
CREATE EXTENSION IF NOT EXISTS pgaudit;
Esegui questo comando in ogni database in cui vuoi attivare la registrazione degli audit log. Questo comando installa i trigger di eventi necessari per il controllo DDL.
Parametri pgAudit supportati
La tabella seguente descrive i parametri chiave 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,
e misc_set. |
none
|
pgaudit.log_catalog
|
Specifica che la registrazione della sessione
è attivata 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 trasmessi con l'istruzione. | off
|
pgaudit.log_relation
|
Specifica se il controllo della sessione
crea una voce di log
separata per ogni relazione
(come tabelle e viste)
a cui viene fatto riferimento in un'istruzione
SELECT o DML. |
off
|
pgaudit.log_rows
|
Specifica che la registrazione degli audit include 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 l'audit logging degli oggetti. | Nessuno |
I log del server PostgreSQL vengono sempre raccolti nel file postgresql.log e non richiedono l'attivazione di pgAudit.
Recupera il percorso dell'audit log attivo
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
Inoltrare i log del database a un sink centralizzato
AlloyDB Omni scrive i log del server di database (postgresql.log),
i log di controllo (postgresql.audit) e i log interni (postgresql.internal) nella
directory /obs/diagnostic/ sul volume obsdisk all'interno del container del database.
Per inoltrare questi log a un sink di logging centralizzato (ad esempio
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 i file di log per inoltrarli alla destinazione di logging.
Esempio: inoltrare i log utilizzando un sidecar Fluent Bit
L'esempio seguente mostra come utilizzare un sidecar Fluent Bit per seguire tutti i file di log di AlloyDB Omni e scriverli nell'output standard. I raccoglitori di log dei cluster Kubernetes standard, come l'agente Logging su Google Kubernetes Engine (GKE), possono quindi raccogliere questi log.
Crea un ConfigMap contenente la configurazione di Fluent Bit per seguire i file di log del server, di audit e interni:
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.log,/obs/diagnostic/postgresql.audit,/obs/diagnostic/postgresql.internal Tag alloydb.* Path_Key filename DB /tmp/fluent-bit.db [OUTPUT] Name stdout Match *Sostituisci
NAMESPACEcon lo spazio dei nomi del cluster di database.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: logging-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/Sostituisci
NAMESPACEcon lo spazio dei nomi del 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 -n NAMESPACE -p '{"spec":{"primarySpec":{"sidecarRef":{"name":"logging-forwarder"}}}}' --type=mergeSostituisci quanto segue:
DB_CLUSTER_NAME: il nome del cluster di database.NAMESPACE: lo spazio dei nomi del cluster di database.
Per saperne di più sulla gestione dei sidecar, consulta Configurare un container sidecar.
Cronologia della rotazione dei log delle query con SQL
Quando i file di log vengono ruotati, l'operatore archivia i file archiviati nella
directory /obs/diagnostic/archive/ con i timestamp di rotazione formattati come
postgresql-%Y-%m-%d_%H%M%S.EXTENSION.gz.
Puoi eseguire query sull'ultimo orario di rotazione dei log direttamente dal database utilizzando le funzioni standard del file system PostgreSQL.
Controllare i timestamp di rotazione dai nomi dei file di log archiviati
Per visualizzare le rotazioni dei log più recenti e i relativi timestamp di rotazione UTC analizzati, esegui la seguente query:
SELECT
file,
to_timestamp(
substring(file from 'postgresql-([0-9]{4}-[0-9]{2}-[0-9]{2}_[0-9]{6})') || '+00',
'YYYY-MM-DD_HH24MISS+TZH'
) AS rotated_at
FROM pg_ls_dir('/obs/diagnostic/archive') AS file
WHERE file ~ '^postgresql-[0-9]{4}-[0-9]{2}-[0-9]{2}_[0-9]{6}'
ORDER BY rotated_at DESC
LIMIT 5;
L'output è simile al seguente:
file | rotated_at
------------------------------------------+------------------------
postgresql-2026-09-29_171900.internal.gz | 2026-09-29 17:19:00+00
postgresql-2026-09-29_072800.log.gz | 2026-09-29 07:28:00+00
postgresql-2026-09-28_175300.log.gz | 2026-09-28 17:53:00+00
postgresql-2026-09-28_093400.log.gz | 2026-09-28 09:34:00+00
postgresql-2026-09-28_092000.audit.gz | 2026-09-28 09:20:00+00
(5 rows)
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