Wie verwende ich Amazon RDS, um die Abfrageprotokollierung für PostgreSQL zu aktivieren?

Lesedauer: 5 Minute
0

Ich möchte die Abfrageprotokollierung für meinen Amazon Relational Database Service (Amazon RDS) für PostgreSQL-DB-Instances aktivieren.

Kurzbeschreibung

Um die Abfrageprotokollierung in PostgreSQL zu aktivieren, ändern Sie die folgenden Parameter, die der DB-Instance für eine benutzerdefinierte Parametergruppe zugeordnet sind:

Wenn Sie Protokoll-Parameter ändern, benötigt das Volume der DB-Instance möglicherweise mehr Speicherplatz. Wenn der Speicher des Volumes voll ist, ist die DB-Instance nicht verfügbar. Es hat sich bewährt, den Parameter rds.log_retention_period zu ändern, um unnötige Protokolle zu bereinigen. Es ist auch eine bewährte Methode, die Amazon CloudWatch-Metrik FreeStorageSpace zu verwenden, um Ihren Speicherverbrauch kontinuierlich zu überwachen. Wenn Sie feststellen, dass der Speicherplatz fast voll ist, können Sie den Speicherplatz erhöhen, sodass die DB-Instance immer verfügbar ist.

Behebung

Je nachdem, welche Abfragen Sie protokollieren möchten, aktivieren Sie log_statement oder log_min_duration_statement. Sie müssen nicht beide Parameter ändern, um die Protokollierung zu aktivieren.

Ändern Sie log_min_duration_statement um einen Schwellenwert in Millisekunden festzulegen. Auf diese Weise können Sie alle Abfragen protokollieren, die länger als der eingestellte Parameterwert dauern. Angenommen, Sie setzen den Wert log_min_duration_statement auf 500. In diesem Fall protokolliert Amazon RDS alle Abfragen, deren Bearbeitung länger als eine halbe Sekunde dauert. Wenn Sie den Wert für diesen Parameter auf 2000 setzen, protokolliert Amazon RDS alle Abfragen, deren Abschluss länger als zwei Sekunden dauert. Wenn Sie den Parameterwert auf -1 setzen, ist der Parameter ausgeschaltet. Amazon RDS protokolliert keine Abfragen, die auf der Zeit bis zum Abschluss basieren. Wenn Sie den Parameterwert auf 0 setzen, protokolliert Amazon RDS alle Abfragen.

**Hinweis:**Der Parameter log_min_duration_statement hängt nicht vom Parameter log_statement ab und beeinträchtigt ihn nicht.

Ändern Sie das log_statement, um die SQL-Anweisungen zu steuern, die protokolliert werden. Der Standardwert ist keines. Sie können die folgenden Werte für diesen Parameter ändern:

  • ddl protokolliert alle DDL-Anweisungen (Data Definition Language) wie CREATE, ALTER und DROP.
  • mod protokolliert alle DDL- und DML-Anweisungen (Data Modification Language) wie INSERT, UPDATE und DELETE.
  • all protokolliert alle Abfragen (unabhängig von der Ausführungszeit).

**Hinweis:**Unabhängig vom Wert, den Sie für log_statement und log_min_duration_statement einstellen,werden die Abfragen einmal in das Protokoll geschrieben.

Aktivieren Sie die Abfrageprotokollierung in PostgreSQL

Gehen Sie wie folgt vor, um die Abfrageprotokollierung in PostgreSQL zu aktivieren:

**Hinweis:**Das folgende Beispiel für Parameteränderungen protokolliert alle Abfragen, die länger als eine Sekunde dauern, und protokolliert auch alle Schemaänderungen.

  1. Öffnen Sie die Amazon-RDS-Konsole und wählen Sie im Navigationsbereich Datenbanken aus.
  2. Wählen Sie die DB-Instance aus, für die Sie Abfragen protokollieren möchten.
  3. Wählen Sie die Ansicht Konfiguration, um die Details der DB-Instance und die Parametergruppe zu sehen, die der DB-Instance zugeordnet ist.
    **Hinweis:**Wenn Sie eine DB-Instance erstellen, wird die DB-Instance der Standard-DB-Parametergruppe zugeordnet. Da Sie diese Gruppe nicht ändern können, erstellen Sie eine benutzerdefinierte Parametergruppe, um die Parametergruppe zu ändern. Wenn Sie die DB-Instance-Parametergruppe ändern (von der Standardgruppe in eine benutzerdefinierte Gruppe), müssen Sie die DB-Instance neu starten.
  4. Wählen Sie im Bereich Instance-Konfiguration die Option Parametergruppe aus, und wählen Sie dann die Parametergruppe aus, die Sie ändern möchten.
  5. Wählen Sie Parameter bearbeiten aus.
  6. Wählen Sie im Feld Filterparameter den Parameter aus, den Sie ändern möchten. Zum Beispiel:
    Geben Sie log_statement ein und ändern Sie den Wert auf ddl.
    Geben Sie log_min_duration_statement ein und ändern Sie den Wert auf 1000. (Dieser Wert wird in Millisekunden angegeben und entspricht einer Sekunde).
  7. Wählen Sie Änderungen speichern aus.
    **Hinweis:**Diese Parameter sind dynamisch. Wenn Ihre DB-Instance über eine benutzerdefinierte Parametergruppe verfügt, müssen Sie die DB-Instance nicht neu starten, damit diese Parameter wirksam werden.

Vergewissern Sie sich, dass die Protokollierung aktiviert ist

Nachdem Sie die mit Ihrer DB-Instance verknüpfte Parametergruppe gespeichert haben, wird der Status auf anwenden gesetzt. Nachdem die Parametergruppe in Ihrer DB-Instance festgelegt wurde, wird der Status auf synchronisiert gesetzt. Stellen Sie eine Verbindung zur DB-Instance her, um zu bestätigen, dass die Protokollierung aktiviert ist. Vergewissern Sie sich in diesem Beispiel, dass das Protokoll alle DDL-Anweisungen und alle Abfragen enthält, die länger als eine Sekunde dauern. Führen Sie dann Befehle ähnlich den folgenden aus:

CREATE TABLE article(article_code bigint, created_at timestamp with time zone, summary text, content text) ;
SELECT pg_sleep(2);
SELECT generate_series(1,10000000) as test;

Abfrageprotokolle anzeigen

Gehen Sie wie folgt vor, um die Protokolle anzuzeigen:

1.Öffnen Sie die Amazon-RDS-Konsole.

2.Wählen Sie im Navigationsbereich Datenbanken aus.

3.Wählen Sie Ihre DB-Instance und dann die Ansicht Protokolle.

4.Wählen Sie auf der Registerkarte Protokolle und Ereignisse das neueste Protokoll aus und klicken Sie dann auf Protokoll anzeigen, um den Inhalt der Protokolle zu sehen. Zum Beispiel:

2018-12-19 11:05:32 UTC:172.31.xx.yyy(35708):user@awspostgres:[27174]:LOG: statement: CREATE TABLE article(article_code bigint, created_at timestamp with time zone, summary text, content text) ;

2018-12-19 11:10:36 UTC:172.31.xx.yyy(35708):user@awspostgres:[27174]:LOG: duration: 2010.247 ms statement: select pg_sleep(2);

2018-12-19 11:11:25 UTC:172.31.xx.yyy(35708):user@awspostgres:[27174]:LOG: duration: 2159.838 ms statement: SELECT generate_series(1,10000000) as test;

Hinweis: Stellen Sie sicher, dass Sie die vorherigen Parameter nicht auf Werte setzen, die eine umfangreiche Protokollierung generieren. Wenn Sie beispielsweise log_statement auf all oder log_min_duration_statement auf 0 setzen, wird eine große Menge an Protokollierungsinformationen generiert. Dies wirkt sich auf Ihren Speicherverbrauch aus. Um die Parameter auf diese Werte einzustellen, stellen Sie sicher, dass Sie dies zur Problembehandlung nur für kurze Zeit tun. Überwachen Sie den Speicherplatz während der gesamten Zeit genau, wenn Sie Probleme beheben.

Ähnliche Informationen

RDS für PostgreSQL-Datenbankprotokolldateien