File di log del database RDS per PostgreSQL - Amazon Relational Database Service

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

File di log del database RDS per PostgreSQL

RDS per PostgreSQL registra le attività del database nel file di log PostgreSQL predefinito. Per un'istanza database PostgreSQL on-premise, questi messaggi vengono archiviati localmente in log/postgresql.log. Per un'istanza database RDS per PostgreSQL, il file di log è disponibile nell'istanza Amazon RDS. Inoltre, devi utilizzare la console Amazon RDS per visualizzarne o scaricarne il contenuto. Il livello di registrazione predefinito rileva gli errori di accesso, gli errori irreversibili del server, i deadlock e gli errori delle query.

Per ulteriori informazioni su come visualizzare, scaricare e guardare i registri di database basati su file, consulta Monitoraggio dei file di log di Amazon RDS. Per ulteriori informazioni sui registri PostgreSQL, consulta Working with Amazon RDS and Aurora PostgreSQL logs: Part 1 (Utilizzo dei registri RDS e Aurora PostgreSQL: parte 1) e Working with Amazon RDS and Aurora PostgreSQL logs: Part 2 (Utilizzo dei registri RDS e Aurora PostgreSQL: parte 2).

Oltre ai log PostgreSQL standard trattati in questo argomento, RDS per PostgreSQL supporta anche l'estensione di audit PostgreSQL (pgAudit). La maggior parte dei settori regolamentati e degli enti governativi deve mantenere un log di audit o un audit trail delle modifiche apportate ai dati per conformità ai requisiti legali. Per informazioni sull'installazione e sull'utilizzo di pgAudit, consulta Utilizzo di pgAudit per registrare l'attività del database.

Parametri che influiscono sul comportamento della registrazione

È possibile personalizzare il comportamento di registrazione per l'istanza database RDS per PostgreSQL modificando vari parametri. Nella tabella seguente sono riportati, tra le altre impostazioni, i parametri che stabiliscono la durata di archiviazione dei log, quando ruotarli e se l'output del log è in formato CSV (valori separati da virgole). Puoi anche trovare l'output di testo inviato a STDERR, tra le altre impostazioni. Per modificare le impostazioni per i parametri modificabili, utilizza un gruppo di parametri del·clusterdatabase personalizzato per l'istanza database RDS per PostgreSQL. Per ulteriori informazioni, consulta Utilizzo di gruppi di parametri DB in un'istanza DB. Come indicato nella tabella, log_line_prefix non può essere modificato.

Parametro Predefinito Descrizione

log_destination

stderr

Imposta il formato di output per il registro. L'impostazione predefinita è stderr, ma puoi anche specificare il formato CSV aggiungendo csvlog all'impostazione. Per ulteriori informazioni, consulta Impostazione della destinazione del registro (stderr, csvlog).

log_filename

postgresql.log.%Y-%m-%d-%H

Specifica il modello per il nome del file di log. Oltre al valore predefinito, questo parametro supporta postgresql.log.%Y-%m-%d per il modello del nome del file.

log_line_prefix

%t:%r:%u@%d:[%p]:

Definisce il prefisso per ogni riga di log che viene scritta in stderr, per annotare l'ora (%t), l'host remoto (%r), l'utente (%u), il database (%d) e l'ID del processo (%p). Non puoi modificare questo parametro.

log_rotation_age

60

I minuti dopo i quali il file di log viene ruotato automaticamente. Puoi modificare questo valore entro un intervallo compreso tra 1 e 1440 minuti. Per ulteriori informazioni, consulta Impostazione della rotazione dei file di log.

log_rotation_size

La dimensione (KB) che stabilisce la rotazione automatica del log. Per impostazione predefinita, questo parametro non viene utilizzato perché i log vengono ruotati in base al parametro. log_rotation_age Per ulteriori informazioni, consulta Impostazione della rotazione dei file di log.

rds.log_retention_period

4320

I registri PostgreSQL più vecchi del numero di minuti specificato vengono eliminati. Il valore di default di 4.320 minuti elimina i file di log dopo 3 giorni. Per ulteriori informazioni, consulta Impostazione del periodo di retention dei log.

Per identificare i problemi dell'applicazione, puoi cercare fallimenti di query, errori di accesso, deadlock ed errori irreversibili del server nel registro. Ad esempio, supponi di convertire un'applicazione legacy da Oracle ad Amazon RDS PostgreSQL, ma non tutte le query sono state convertite correttamente. Queste query formattate in modo errato generano messaggi di errore nei registri che puoi utilizzare per identificare i problemi. Per ulteriori informazioni sulla registrazione delle query, consulta Attivazione della registrazione delle query per l'istanza database RDS per PostgreSQL.

Negli argomenti seguenti sono disponibili informazioni su come impostare vari parametri che controllano i dettagli di base dei log PostgreSQL.

Impostazione del periodo di retention dei log

Il parametro rds.log_retention_period specifica per quanto tempo l'istanza database RDS per PostgreSQL conserva i file di log. L'impostazione predefinita è 3 giorni (4.320 minuti), ma è possibile impostare qualsiasi valore compreso tra 1 giorno (1.440 minuti) e 7 giorni (10.080 minuti). Assicurati che l'istanza database RDS per PostgreSQL abbia spazio di archiviazione sufficiente per contenere i file di log per il periodo di tempo specificato.

l'istanza database RDS per PostgreSQL. Per ulteriori informazioni, consulta Pubblicazione dei log PostgreSQL su Amazon Logs CloudWatch . Logs. CloudWatch

Impostazione della rotazione dei file di log

Per impostazione predefinita, nuovi file di log vengono creati da Amazon RDS ogni ora. La tempistica è controllata dal parametro log_rotation_age. Questo parametro ha un valore predefinito di 60 (minuti), ma è possibile impostarlo su qualsiasi valore tra 1 minuto e 24 ore (1.440 minuti). Al momento della rotazione, viene creato un nuovo file di log distinto. Il file è denominato in base al modello specificato dal parametro log_filename.

I file di log possono anche essere ruotati in base alle loro dimensioni, come specificato dal parametro log_rotation_size. Questo parametro specifica che il log deve essere ruotato quando raggiunge la dimensione specificata (in kilobyte). Per un'istanza database RDS for PostgreSQL, log_rotation_size non è impostato, cioè non è specificato alcun valore. Tuttavia, puoi impostare il parametro su un valore compreso tra 0 e 2.097.151 kB (kilobyte).

I nomi dei file di registro si basano sul modello di nome di file specificato nel parametro log_filename. Le impostazioni disponibili per questo parametro sono le seguenti:

  • postgresql.log.%Y-%m-%d : formato predefinito per il nome del file di registro. Include l'anno, il mese e la data nel nome del file di log.

  • postgresql.log.%Y-%m-%d-%H: include l'ora nel formato del nome del file di registro.

Per ulteriori informazioni, consulta log_rotation_age e log_rotation_size nella documentazione di PostgreSQL.

Impostazione della destinazione del registro (stderr, csvlog)

Per impostazione predefinita, PostgreSQL genera i log in formato errore standard (stderr). Questo formato è l'impostazione predefinita per il parametro log_destination. Ogni messaggio ha un prefisso che utilizza il modello specificato nel parametro log_line_prefix. Per ulteriori informazioni, consulta Informazioni sul parametro log_line_prefix.

RDS per PostgreSQL può anche generare log in formato csvlog. Il formato csvlog è utile per analizzare i dati dei registri in formato CSV. Ad esempio, supponi di utilizzare l'estensione log_fdw per lavorare con i log come tabelle esterne. La tabella esterna creata sui file di log di stderr contiene una singola colonna con i dati degli eventi di log. Aggiungendo csvlog al parametro log_destination, ottieni il file di log in formato CSV con le demarcazioni per le diverse colonne della tabella esterna. In tal modo puoi ordinare e analizzare i log più facilmente. Per informazioni su come usare log_fdw con csvlog, consulta Utilizzo dell'estensione log_fdw per accedere al registro di database utilizzando SQL.

Se specifichi csvlog per questo parametro, tieni presente che vengono generati entrambi i file stderr e csvlog. Ti consigliamo di monitorare lo spazio di archiviazione consumato dai registri tenendo conto di rds.log_retention_period e delle altre impostazioni che influiscono sull'archiviazione e sulla rotazione dei registri. Utilizzando stderr e csvlog lo spazio di archiviazione consumato dai registri aumenta più del doppio.

Se aggiungi csvlog a log_destination e vuoi ripristinare solo stderr, devi reimpostare il parametro. Per farlo, nella console Amazon RDS apri il gruppo di parametri del·clusterdatabase personalizzato per la tua istanza. Scegli il parametro log_destination, seleziona Edit parameter (Modifica parametro), quindi Reset (Reimposta).

Per ulteriori informazioni sulla configurazione dei registri, consulta Utilizzo dei log Amazon RDS e Aurora PostgreSQL: Parte 1.

Informazioni sul parametro log_line_prefix

Il formato di log stderr applica il prefisso a ogni messaggio di log con i dettagli specificati dal parametro log_line_prefix, come indicato di seguito.

%t:%r:%u@%d:[%p]:t

Non puoi modificare questa impostazione. Ogni voce del log inviata a stderr include le seguenti informazioni.

  • %t - Ora della voce di log

  • %r - Indirizzo dell'host remoto

  • %u@%d - Nome utente @ nome del database

  • [%p] - ID del processo, se disponibile

Attivazione della registrazione delle query per l'istanza database RDS per PostgreSQL

È possibile raccogliere informazioni più approfondite sulle attività dei database, tra cui query, query in attesa di blocchi, checkpoint e molti altri dettagli impostando alcuni parametri elencati nella tabella seguente. Questo argomento illustra la registrazione delle query.

Parametro Predefinito Descrizione

log_connections

Registra ogni connessione riuscita.

log_disconnections

Registra il momento in cui termina ciascuna sessione e la relativa durata.

log_checkpoints

1

Registra ogni checkpoint.

log_lock_waits

Registra lunghe attese di lock. Per impostazione predefinita, questo parametro non è impostato.

log_min_duration_sample

Imposta il tempo (ms) minimo di esecuzione oltre il quale viene registrato un campione di istruzioni. La dimensione del campione viene impostata utilizzando il parametro log_statement_sample_rate.

log_min_duration_statement

Viene registrata qualsiasi istruzione SQL che viene eseguita per il periodo specificato o per più tempo. Per impostazione predefinita, questo parametro non è impostato. L'attivazione di questo parametro può aiutarti a trovare query non ottimizzate.

log_statement

Imposta il tipo di istruzioni registrate. Per impostazione predefinita, questo parametro non è impostato, ma puoi modificarlo in all, ddl o mod per specificare i tipi di istruzioni SQL che vuoi registrare. Se specifichi un valore diverso da none per questo parametro, dovrai adottare ulteriori misure per evitare l'esposizione delle password nei file di log. Per ulteriori informazioni, consulta Riduzione del rischio di esposizione delle password quando si utilizza la registrazione delle query.

log_statement_sample_rate

La percentuale di istruzioni che superano il tempo specificato in log_min_duration_sample da registrare, espressa come valore in virgola mobile compreso tra 0,0 e 1,0.

log_statement_stats

Scrive le statistiche cumulative sulla prestazione nel registro del server.

Utilizzo della registrazione per trovare query lente

È possibile registrare istruzioni e query SQL per trovare le query con prestazioni lente. Puoi attivare questa funzionalità modificando le impostazioni nei parametri log_statement e log_min_duration come descritto in questa sezione. Prima di attivare la registrazione delle query per l'istanza database RDS per PostgreSQL, è necessario essere consapevoli della possibile esposizione delle password nei registri e di come mitigare i rischi. Per ulteriori informazioni, consulta Riduzione del rischio di esposizione delle password quando si utilizza la registrazione delle query.

Di seguito sono disponibili informazioni di riferimento sui parametri log_statement e log_min_duration.

log_statement

Questo parametro specifica il tipo di istruzioni SQL che devono essere inviate al registro. Il valore predefinito è none. Se modifichi questo parametro in all, ddl o mod, esegui le azioni consigliate per ridurre il rischio di esporre le password nei log. Per ulteriori informazioni, consulta Riduzione del rischio di esposizione delle password quando si utilizza la registrazione delle query.

tutto

Registra tutte le istruzioni. Questa impostazione è consigliata per il debug.

ddl

Registra tutte le istruzioni DDL (Data Definition Language), come CREATE, ALTER, DROP e così via.

mod

Registra tutte le istruzioni DDL e DML (Data Manipulation Language), come INSERT, UPDATE e DELETE, che modificano i dati.

nessuno

Nessuna istruzione SQL viene registrata. Consigliamo questa impostazione per evitare il rischio di esporre le password nei registri.

log_min_duration_statement

Viene registrata qualsiasi istruzione SQL che viene eseguita per il periodo specificato o per più tempo. Per impostazione predefinita, questo parametro non è impostato. L'attivazione di questo parametro può aiutarti a trovare query non ottimizzate.

–1–2147483647

Il numero di millisecondi (ms) di runtime durante il quale un'istruzione viene registrata.

Per configurare la registrazione delle query

Questi passaggi presuppongono che l'istanza database RDS per PostgreSQL utilizzi un gruppo di parametri database personalizzato.

  1. Imposta il parametro log_statement su all. L'esempio seguente mostra le informazioni scritte nel file postgresql.log con questa impostazione del parametro.

    2022-10-05 22:05:52 UTC:52.95.4.1(11335):postgres@labdb:[3639]:LOG: statement: SELECT feedback, s.sentiment,s.confidence FROM support,aws_comprehend.detect_sentiment(feedback, 'en') s ORDER BY s.confidence DESC; 2022-10-05 22:05:52 UTC:52.95.4.1(11335):postgres@labdb:[3639]:LOG: QUERY STATISTICS 2022-10-05 22:05:52 UTC:52.95.4.1(11335):postgres@labdb:[3639]:DETAIL: ! system usage stats: ! 0.017355 s user, 0.000000 s system, 0.168593 s elapsed ! [0.025146 s user, 0.000000 s system total] ! 36644 kB max resident size ! 0/8 [0/8] filesystem blocks in/out ! 0/733 [0/1364] page faults/reclaims, 0 [0] swaps ! 0 [0] signals rcvd, 0/0 [0/0] messages rcvd/sent ! 19/0 [27/0] voluntary/involuntary context switches 2022-10-05 22:05:52 UTC:52.95.4.1(11335):postgres@labdb:[3639]:STATEMENT: SELECT feedback, s.sentiment,s.confidence FROM support,aws_comprehend.detect_sentiment(feedback, 'en') s ORDER BY s.confidence DESC; 2022-10-05 22:05:56 UTC:52.95.4.1(11335):postgres@labdb:[3639]:ERROR: syntax error at or near "ORDER" at character 1 2022-10-05 22:05:56 UTC:52.95.4.1(11335):postgres@labdb:[3639]:STATEMENT: ORDER BY s.confidence DESC; ----------------------- END OF LOG ----------------------
  2. Impostare il parametro log_min_duration_statement. L'esempio seguente mostra le informazioni scritte nel file postgresql.log quando il parametro è impostato su 1.

    Le query che superano la durata specificata nel parametro log_min_duration_statement vengono registrate. Di seguito viene riportato un esempio. Puoi visualizzare il file di log per l'istanza database RDS per PostgreSQL nella console Amazon RDS.

    2022-10-05 19:05:19 UTC:52.95.4.1(6461):postgres@labdb:[6144]:LOG: statement: DROP table comments; 2022-10-05 19:05:19 UTC:52.95.4.1(6461):postgres@labdb:[6144]:LOG: duration: 167.754 ms 2022-10-05 19:08:07 UTC::@:[355]:LOG: checkpoint starting: time 2022-10-05 19:08:08 UTC::@:[355]:LOG: checkpoint complete: wrote 11 buffers (0.0%); 0 WAL file(s) added, 0 removed, 0 recycled; write=1.013 s, sync=0.006 s, total=1.033 s; sync files=8, longest=0.004 s, average=0.001 s; distance=131028 kB, estimate=131028 kB ----------------------- END OF LOG ----------------------

Riduzione del rischio di esposizione delle password quando si utilizza la registrazione delle query

Ti consigliamo di mantenere log_statement impostato su none per evitare di esporre le password. Se imposti log_statement su all, ddl o mod, ti consigliamo di eseguire una o più delle seguenti operazioni.

  • Per il client, applica la crittografia delle informazioni sensibili. Per ulteriori informazioni, consulta Encryption Options (Opzioni di crittografia) nella documentazione di PostgreSQL. Usa le opzioni ENCRYPTED (e UNENCRYPTED) delle istruzioni CREATE e ALTER. Per ulteriori informazioni, consulta CREATE USER nella documentazione di PostgreSQL.

  • Per l'istanza database RDS per PostgreSQL, configura e usa l'estensione di audit PostgreSQL (pgAudit). Questa estensione oscura le informazioni sensibili nelle istruzioni CREATE e ALTER inviate al registro. Per ulteriori informazioni, consulta Utilizzo di pgAudit per registrare l'attività del database.

  • Limita l'accesso ai log. CloudWatch

  • Utilizza meccanismi di autenticazione più efficaci come IAM.

Pubblicazione dei log PostgreSQL su Amazon Logs CloudWatch

Per archiviare i record di log PostgreSQL in uno storage altamente durevole, puoi utilizzare Amazon Logs. CloudWatch Con CloudWatch Logs, puoi anche eseguire analisi in tempo reale dei dati di log e utilizzarli CloudWatch per visualizzare metriche e creare allarmi. Ad esempio, se imposti log_statement su ddl, puoi impostare un avviso per notificare ogni volta che viene eseguita un'istruzione DDL. Puoi scegliere di caricare i log di PostgreSQL in Logs durante il processo di creazione dell'istanza DB RDS CloudWatch per PostgreSQL. Se hai scelto di non caricare i registri, puoi successivamente modificare l'istanza per iniziare a caricare i registri da quel momento in poi. In altre parole, i log esistenti non vengono caricati. Solo i nuovi log vengono caricati quando vengono creati sull'istanza database RDS per PostgreSQL modificata.

Tutte le versioni di RDS per PostgreSQL attualmente disponibili supportano la pubblicazione di file di registro in Logs. CloudWatch Per informazioni dettagliate, consulta Amazon RDS for PostgreSQL updates (Aggiornamenti di Amazon RDS per PostgreSQL) in Amazon RDS for PostgreSQL Release Notes (Note di rilascio di Amazon RDS per PostgreSQL).

Per utilizzare CloudWatch Logs, configura l'istanza DB RDS for PostgreSQL per pubblicare i dati di log in un gruppo di log.

È possibile pubblicare i seguenti tipi di log in CloudWatch Logs for RDS for PostgreSQL:

  • Log di PostgreSQL

  • Registro di aggiornamento

Dopo aver completato la configurazione, Amazon RDS pubblica gli eventi di log per registrare i flussi all'interno di un CloudWatch gruppo di log. Ad esempio, i dati di log di PostgreSQL sono archiviati in un gruppo di log /aws/rds/instance/my_instance/postgresql. Per visualizzare i log, apri la console all' CloudWatch indirizzo https://console.aws.amazon.com/cloudwatch/.

Per pubblicare i log di PostgreSQL su Logs utilizzando la console CloudWatch
  1. Apri la console Amazon RDS all'indirizzo https://console.aws.amazon.com/rds/.

  2. Nel pannello di navigazione, scegliere Databases (Database).

  3. Scegliere l'istanza database che si desidera modificare e selezionare Modify (Modifica).

  4. Nella sezione Esportazioni dei log, scegli i log che desideri iniziare a pubblicare su Logs. CloudWatch

    La sezione Esportazioni dei log è disponibile solo per le versioni di PostgreSQL che supportano la pubblicazione nei registri. CloudWatch

  5. Scegliere Continue (Continua) e quindi Modify DB Instance (Modifica istanza database) nella pagina di riepilogo.

È possibile pubblicare i log di PostgreSQL con. AWS CLI Puoi chiamare il comando modify-db-instance con i parametri seguenti.

  • --db-instance-identifier

  • --cloudwatch-logs-export-configuration

Nota

Viene sempre applicata all'istanza database una modifica all'opzione --cloudwatch-logs-export-configuration immediatamente. Pertanto, le opzioni --apply-immediately e --no-apply-immediately non hanno alcun effetto.

Puoi anche pubblicare i log PostgreSQL chiamando i seguenti comandi CLI:

Esegui uno di questi comandi CLI con le opzioni seguenti:

  • --db-instance-identifier

  • --enable-cloudwatch-logs-exports

  • --db-instance-class

  • --engine

Altre opzioni potrebbero essere richieste a seconda del comando CLI eseguito.

Esempio Modifica un'istanza per pubblicare i log in Logs CloudWatch

L'esempio seguente modifica un'istanza DB PostgreSQL esistente per pubblicare file di registro in Logs. CloudWatch Il valore --cloudwatch-logs-export-configuration è un oggetto JSON. La chiave per questo oggetto è EnableLogTypes e il suo valore è una matrice di stringhe con qualsiasi combinazione di postgresql e upgrade.

Per, o: Linux macOS Unix

aws rds modify-db-instance \ --db-instance-identifier mydbinstance \ --cloudwatch-logs-export-configuration '{"EnableLogTypes":["postgresql", "upgrade"]}'

Per Windows:

aws rds modify-db-instance ^ --db-instance-identifier mydbinstance ^ --cloudwatch-logs-export-configuration '{"EnableLogTypes":["postgresql","upgrade"]}'
Esempio Crea un'istanza per pubblicare i log in Logs CloudWatch

L'esempio seguente crea un'istanza DB PostgreSQL e pubblica i file di registro in Logs. CloudWatch Il valore --enable-cloudwatch-logs-exports è una matrice di stringhe JSON. Le stringhe possono essere una qualsiasi combinazione di postgresql e upgrade.

Per, o: Linux macOS Unix

aws rds create-db-instance \ --db-instance-identifier mydbinstance \ --enable-cloudwatch-logs-exports '["postgresql","upgrade"]' \ --db-instance-class db.m4.large \ --engine postgres

Per Windows:

aws rds create-db-instance ^ --db-instance-identifier mydbinstance ^ --enable-cloudwatch-logs-exports '["postgresql","upgrade"]' ^ --db-instance-class db.m4.large ^ --engine postgres

È possibile pubblicare i log PostgreSQL con RDS API. Puoi chiamare l'operazione ModifyDBInstance con i parametri seguenti:

  • DBInstanceIdentifier

  • CloudwatchLogsExportConfiguration

Nota

Viene sempre applicata all'istanza database una modifica al parametro CloudwatchLogsExportConfiguration immediatamente. Pertanto, il parametro ApplyImmediately non ha alcun effetto.

È possibile anche pubblicare i log PostgreSQL eseguendo una delle seguenti azioni API RDS:

Esegui una di queste azioni API RDS con i seguenti parametri:

  • DBInstanceIdentifier

  • EnableCloudwatchLogsExports

  • Engine

  • DBInstanceClass

Altri parametri potrebbero essere richiesti a seconda dell'operazione eseguita.