Fichiers journaux de base de données PostgreSQL - Amazon Relational Database Service

Fichiers journaux de base de données PostgreSQL

Amazon RDS for PostgreSQL génère des journaux de requêtes et des erreurs. RDS PostgreSQL écrit les informations relatives au processus autovacuum et les actions rds_admin dans le journal des erreurs. PostgreSQL consigne également les connexions, les déconnexions et les points de contrôle dans le journal des erreurs. Pour plus d'informations, consultez la section Error Reporting and Logging dans la documentation PostgreSQL.

Pour définir les paramètres de journalisation d'une instance de base de données, définissez les paramètres dans un groupe de paramètres de base de données et associez-le à l'instance de base de données. Pour plus d'informations, consultez Utilisation de groupes de paramètres de base de données.

Définition de la période de conservation des journaux

Pour définir la période de conservation des journaux du système, utilisez le paramètre rds.log_retention_period. Le paramètre rds.log_retention_period se trouve dans le groupe de paramètres de base de données associé à votre instance de base de données. L'unité par défaut pour ce paramètre est la minute. Par exemple, la valeur 1 440 conserve les journaux pendant un jour. La valeur par défaut est 4 320 (trois jours). La valeur maximale est 10 080 (sept jours). La capacité de stockage allouée à votre instance doit être suffisante pour contenir les fichiers journaux conservés.

Pour conserver les journaux plus anciens, publiez-les dans Amazon CloudWatch Logs. Pour de plus amples informations, veuillez consulter Publication de journaux PostgreSQL dans CloudWatch Logs.

Utilisation de la journalisation des requêtes

Pour activer la journalisation des requêtes pour votre instance de base de données PostgreSQL, définissez deux paramètres dans le groupe de paramètres de base de données associé à votre instance de base de données : log_statement et log_min_duration_statement.

Le paramètre log_statement contrôle les instructions SQL qui sont enregistrées. Nous vous recommandons de définir ce paramètre sur all afin de journaliser toutes les instructions lorsque vous résolvez des problèmes dans votre instance de base de données. La valeur par défaut est none. Pour journaliser toutes les instructions DDL (Data Definition Language) (CREATE, ALTER, DROP, etc.), définissez cette valeur sur ddl. Pour journaliser toutes les instructions DDL et DML (Data Manipulation Language) (INSERT, UPDATE, DELETE, etc.), définissez cette valeur sur mod.

Le paramètre log_min_duration_statement définit la limite en millisecondes pour l'enregistrement d'une instruction. Toutes les instructions SQL s'exécutant plus longtemps que la durée définie pour le paramètre sont enregistrées. Par défaut, ce paramètre est désactivé et défini sur -1. L'activation de ce paramètre vous permet d'identifier les requêtes non optimisées.

Pour configurer la journalisation des requêtes, procédez comme suit :

  1. Définissez le paramètre log_statement sur all. L'exemple suivant illustre les informations écrites dans le fichier postgres.log.

    2013-11-05 16:48:56 UTC::@:[2952]:LOG: received SIGHUP, reloading configuration files 2013-11-05 16:48:56 UTC::@:[2952]:LOG: parameter "log_statement" changed to "all"

    Des informations supplémentaires sont écrites dans le fichier postgres.log lorsque vous exécutez une requête. L'exemple suivant illustre le type d'informations écrites dans le fichier après une requête.

    2013-11-05 16:41:07 UTC::@:[2955]:LOG: checkpoint starting: time 2013-11-05 16:41:07 UTC::@:[2955]:LOG: checkpoint complete: wrote 1 buffers (0.3%); 0 transaction log file(s) added, 0 removed, 1 recycled; write=0.000 s, sync=0.003 s, total=0.012 s; sync files=1, longest=0.003 s, average=0.003 s 2013-11-05 16:45:14 UTC:[local]:master@postgres:[8839]:LOG: statement: SELECT d.datname as "Name", pg_catalog.pg_get_userbyid(d.datdba) as "Owner", pg_catalog.pg_encoding_to_char(d.encoding) as "Encoding", d.datcollate as "Collate", d.datctype as "Ctype", pg_catalog.array_to_string(d.datacl, E'\n') AS "Access privileges" FROM pg_catalog.pg_database d ORDER BY 1; 2013-11-05 16:45:
  2. Définissez le paramètre log_min_duration_statement. L'exemple suivant illustre les informations écrites dans le fichier postgres.log lorsque le paramètre est défini sur 1.

    2013-11-05 16:48:56 UTC::@:[2952]:LOG: received SIGHUP, reloading configuration files 2013-11-05 16:48:56 UTC::@:[2952]:LOG: parameter "log_min_duration_statement" changed to "1"

    Des informations supplémentaires sont écrites dans le fichier postgres.log lorsque vous exécutez une requête dont la durée dépasse celle définie dans le paramètre de durée. L'exemple suivant illustre le type d'informations écrites dans le fichier après une requête.

    2013-11-05 16:51:10 UTC:[local]:master@postgres:[9193]:LOG: statement: SELECT c2.relname, i.indisprimary, i.indisunique, i.indisclustered, i.indisvalid, pg_catalog.pg_get_indexdef(i.indexrelid, 0, true), pg_catalog.pg_get_constraintdef(con.oid, true), contype, condeferrable, condeferred, c2.reltablespace FROM pg_catalog.pg_class c, pg_catalog.pg_class c2, pg_catalog.pg_index i LEFT JOIN pg_catalog.pg_constraint con ON (conrelid = i.indrelid AND conindid = i.indexrelid AND contype IN ('p','u','x')) WHERE c.oid = '1255' AND c.oid = i.indrelid AND i.indexrelid = c2.oid ORDER BY i.indisprimary DESC, i.indisunique DESC, c2.relname; 2013-11-05 16:51:10 UTC:[local]:master@postgres:[9193]:LOG: duration: 3.367 ms 2013-11-05 16:51:10 UTC:[local]:master@postgres:[9193]:LOG: statement: SELECT c.oid::pg_catalog.regclass FROM pg_catalog.pg_class c, pg_catalog.pg_inherits i WHERE c.oid=i.inhparent AND i.inhrelid = '1255' ORDER BY inhseqno; 2013-11-05 16:51:10 UTC:[local]:master@postgres:[9193]:LOG: duration: 1.002 ms 2013-11-05 16:51:10 UTC:[local]:master@postgres:[9193]:LOG: statement: SELECT c.oid::pg_catalog.regclass FROM pg_catalog.pg_class c, pg_catalog.pg_inherits i WHERE c.oid=i.inhrelid AND i.inhparent = '1255' ORDER BY c.oid::pg_catalog.regclass::pg_catalog.text; 2013-11-05 16:51:18 UTC:[local]:master@postgres:[9193]:LOG: statement: select proname from pg_proc; 2013-11-05 16:51:18 UTC:[local]:master@postgres:[9193]:LOG: duration: 3.469 ms

Publication de journaux PostgreSQL dans CloudWatch Logs

Pour stocker vos enregistrements de journal PostgreSQL dans une solution de stockage hautement durable, vous pouvez utiliser CloudWatch Logs. CloudWatch Logs vous permet également d'effectuer une analyse en temps réel des données de journaux et d'utiliser CloudWatch pour afficher les métriques et créer des alarmes.

Pour utiliser CloudWatch Logs, configurez votre instance de base de données RDS for PostgreSQL de sorte à publier les données de journaux dans un groupe de journaux.

Note

La publication de fichiers journaux dans CloudWatch Logs est uniquement prise en charge pour PostgreSQL version 9.6.6 et versions ultérieures, et pour PostgreSQL version 10.4 et versions ultérieures.

Vous pouvez publier les types de journaux suivants dans CloudWatch Logs pour RDS for PostgreSQL :

  • Journal PostgreSQL

  • Journal de mise à niveau (non disponible pour Aurora PostgreSQL)

Après avoir terminé la configuration, Amazon RDS publie les événements de journaux dans des flux de journaux au sein d'un groupe de journaux CloudWatch. Par exemple, les données de journaux PostgreSQL sont stockés dans le groupe de journaux /aws/rds/instance/my_instance/postgresql. Pour afficher vos journaux, ouvrez la console CloudWatch à l'adresse https://console.aws.amazon.com/cloudwatch/.

Pour publier des journaux PostgreSQL dans CloudWatch Logs à l'aide de la console

  1. Ouvrez la console Amazon RDS à l'adresse https://console.aws.amazon.com/rds/.

  2. Dans la panneau de navigation, choisissez Databases (Bases de données).

  3. Choisissez l'instance de base de données que vous souhaitez modifier, puis choisissez Modifier.

  4. Dans la section Exportations des journaux, choisissez les journaux que vous voulez commencer à publier dans CloudWatch Logs.

    La section Exportations des journaux est uniquement disponible pour les versions de PostgreSQL qui prennent en charge la publication dans CloudWatch Logs.

  5. Choisissez Continuer, puis Modifier l'instance de base de données sur la page récapitulative.

Vous pouvez publier des journaux PostgreSQL avec AWS CLI. Vous pouvez appeler la commande modify-db-instance avec les paramètres suivants :

  • --db-instance-identifier

  • --cloudwatch-logs-export-configuration

Note

Une modification apportée à l'option --cloudwatch-logs-export-configuration est toujours appliquée immédiatement à l'instance de base de données. Par conséquent, les options --apply-immediately et --no-apply-immediately sont sans effet.

Vous pouvez également publier des journaux PostgreSQL en appelant les commandes d'interface de ligne de commande suivantes :

Exécutez l'une de ces commandes d'interface de ligne de commande avec les options suivantes :

  • --db-instance-identifier

  • --enable-cloudwatch-logs-exports

  • --db-instance-class

  • --engine

D'autres options peuvent être requises en fonction de la commande d'interface de ligne de commande que vous exécutez.

Exemple Modification d'une instance pour publier des journaux dans CloudWatch Logs

L'exemple suivant modifie une instance de base de données PostgreSQL existante pour publier les fichiers journaux sur CloudWatch Logs. La valeur --cloudwatch-logs-export-configuration n'est pas un objet JSON. La clé pour cet objet est EnableLogTypes et sa valeur est un tableau de chaînes avec une combinaison quelconque de postgresql et upgrade.

Pour Linux, macOS ou Unix :

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

Pour Windows :

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

Exemple Création d'une instance pour publier des journaux dans CloudWatch Logs

L'exemple suivant crée une instance de base de données PostgreSQL et publie les fichiers journaux sur CloudWatch Logs. La valeur --enable-cloudwatch-logs-exports est un tableau de chaînes JSON. Les chaînes peuvent être une combinaison quelconque de postgresql et upgrade.

Pour Linux, macOS ou Unix :

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

Pour Windows :

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

Vous pouvez publier des journaux PostgreSQL avec l'API RDS. Vous pouvez appeler l'action ModifyDBInstance avec les paramètres suivants :

  • DBInstanceIdentifier

  • CloudwatchLogsExportConfiguration

Note

Une modification apportée au paramètre CloudwatchLogsExportConfiguration est toujours appliquée immédiatement à l'instance de base de données. Par conséquent, le paramètre ApplyImmediately est sans effet.

Vous pouvez également publier des journaux PostgreSQL en appelant les opérations d'API RDS suivantes :

Exécutez l'une de ces opérations d'API RDS avec les paramètres suivants :

  • DBInstanceIdentifier

  • EnableCloudwatchLogsExports

  • Engine

  • DBInstanceClass

D'autres paramètres peuvent être requis en fonction de l'opération que vous exécutez.