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

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Fichiers journaux de base de données RDS for PostgreSQL

RDS for PostgreSQL consigne les activités de base de données dans le fichier journal PostgreSQL par défaut. Pour une instance de base de données PostgreSQL sur site, ces messages sont stockés localement dans log/postgresql.log. Pour une instance de base de données RDS for PostgreSQL, le fichier journal est disponible sur l'instance Amazon RDS. Vous devez également utiliser la console Amazon RDS pour consulter ou télécharger son contenu. Le niveau de journalisation par défaut capture les échecs de connexion, les erreurs de serveur fatales, les blocages et les échecs de requête.

Pour plus d'informations sur l'affichage, le téléchargement et la consultation des journaux de base de données basés sur des fichiers, consultez Surveillance des fichiers journaux Amazon RDS. Pour en savoir plus sur les journaux PostgreSQL, consultez la section Working with Amazon RDS and Aurora PostgreSQL logs: Part 1 (Utilisation des journaux Amazon RDS et Aurora PostgreSQL : Partie 1) et Working with Amazon RDS and Aurora PostgreSQL logs: Part 2 (Utilisation des journaux Amazon RDS et Aurora PostgreSQL : Partie 2).

Outre les journaux PostgreSQL standard décrits dans cette rubrique, RDS for PostgreSQL prend également en charge l'extension PostgreSQL Audit (pgAudit). La plupart des secteurs réglementés et des agences gouvernementales doivent conserver un journal d'audit ou une piste d'audit des modifications apportées aux données afin de se conformer aux exigences légales. Pour plus d'informations sur l'installation et l'utilisation de pgAudit, consultez Utilisation de pgAudit pour journaliser l'activité de la base de données.

Paramètres qui affectent le comportement de journalisation

Vous pouvez personnaliser le comportement de journalisation de votre instance de base de données RDS for PostgreSQL en modifiant divers paramètres. Dans le tableau suivant, vous trouverez les paramètres qui affectent combien de temps les journaux sont stockés, quand effectuer la rotation du journal et s'il convient de fournir en sortie le journal au format CSV (valeurs séparées par des virgules). Vous pouvez également trouver le texte de sortie envoyé à STDERR, entre autres paramètres. Pour modifier les valeurs des paramètres modifiables, utilisez un groupe de paramètres de base de données pour votre Instance RDS for PostgreSQL. Pour plus d'informations, consultez Utilisation de groupes de paramètres de base de données dans une instance de base de données. Comme indiqué dans le tableau, log_line_prefix ne peut pas être modifié.

Paramètre Par défaut Description

log_destination

stderr

Définit le format de sortie pour le journal. La valeur par défaut est stderr, mais vous pouvez également spécifier une valeur séparée par des virgules (CSV) en ajoutant csvlog au paramètre. Pour plus d'informations, consultez Définition de la destination du journal (stderr, csvlog).

log_filename

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

Spécifie le modèle du nom de fichier journal. Outre la valeur par défaut, ce paramètre prend en chargepostgresql.log.%Y-%m-%d pour le modèle de nom de fichier.

log_line_prefix

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

Définit le préfixe pour chaque ligne de journal qui est écrite sur stderr, afin de noter l'heure (%t), l'hôte distant (%r), l'utilisateur (%u), la base de données (%d) et l'ID du processus (%p). Vous ne pouvez pas modifier ce paramètre.

log_rotation_age

60

Minutes après lesquelles la rotation automatique du fichier journal est effectuée. Vous pouvez remplacer cette valeur par toute valeur comprise entre 1 et 1 440 minutes. Pour plus d'informations, consultez Définition de la rotation des fichiers journaux.

log_rotation_size

Taille (en Ko) à laquelle la rotation automatique du fichier journal est effectuée. Par défaut, ce paramètre n'est pas utilisé car les journaux sont pivotés en fonction du paramètre log_rotation_age. Pour en savoir plus, veuillez consulter la section Définition de la rotation des fichiers journaux.

rds.log_retention_period

4320

Les journaux PostgreSQL plus anciens que le nombre de minutes spécifié sont supprimés. La valeur par défaut de 4 320 minutes supprime les fichiers journaux après trois jours. Pour plus d'informations, consultez Définition de la période de conservation des journaux.

Pour identifier les problèmes d'application, vous pouvez rechercher dans le journal les échecs de requête, les échecs de connexion, les interblocages et les erreurs fatales du serveur. Par exemple, supposons que vous avez converti une application héritée d'Oracle vers Amazon RDS for PostgreSQL, mais que certaines requêtes n'ont pas été converties correctement. Ces requêtes mal formatées génèrent des messages d'erreur que vous pouvez trouver dans les journaux pour aider à identifier les problèmes. Pour plus d'informations sur la journalisation des requêtes, consultez Activer la journalisation des requêtes pour votre instance de base de données RDS for PostgreSQL..

Dans les rubriques suivantes, vous pouvez trouver des informations sur la manière de définir les différents paramètres qui contrôlent les détails de base de vos journaux PostgreSQL.

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

Le paramètre rds.log_retention_period indique la durée pendant laquelle votre instance de base de données RDS for PostgreSQL conserve ses fichiers journaux. La valeur par défaut est de 3 jours (4 320 minutes), mais vous pouvez définir une valeur comprise entre 1 jour (1 440 minutes) et 7 jours (10 080 minutes). Assurez-vous que votre instance de base de données RDS for PostgreSQL dispose d'un espace de stockage suffisant pour contenir les fichiers journaux pendant cette période.

Nous vous recommandons de publier régulièrement vos CloudWatch journaux sur Amazon Logs afin de pouvoir consulter et analyser les données système longtemps après leur suppression de votre cluster de base de données . Instance de base de données RDS for PostgreSQL. Pour plus d’informations, consultez Publication de journaux PostgreSQL sur Amazon Logs CloudWatch .

Définition de la rotation des fichiers journaux

Amazon RDS crée de nouveaux fichiers journaux toutes les heures, par défaut. Le timing est contrôlé par le paramètre log_rotation_age. Ce paramètre a une valeur par défaut de 60 (minutes), mais vous pouvez le régler sur une valeur comprise entre 1 minute et 24 heures (1 440 minutes). Au moment de la rotation, un fichier journal distinct est créé. Le fichier est nommé selon le modèle spécifié par le paramètre log_filename.

Les fichiers journaux peuvent également faire l'objet d'une rotation en fonction de leur taille, comme indiqué dans le paramètre log_rotation_size. Ce paramètre indique que le journal doit faire l'objet d'une rotation lorsqu'il atteint la taille spécifiée (en kilo-octets). Pour une instance de base de données RDS for PostgreSQL, la valeur log_rotation_size n'est pas définie, c'est-à-dire qu'il n'y a pas de valeur spécifiée. Toutefois, vous pouvez définir ce paramètre entre 0 et 2 097 151 Ko (kilo-octets).

Les noms de fichier journal sont basés sur le modèle de nom de fichier spécifié dans le paramètre log_filename. Les valeurs disponibles pour ce paramètre sont les suivantes :

  • postgresql.log.%Y-%m-%d : format par défaut du nom de fichier journal. Inclut l'année, le mois et la date dans le nom du fichier journal.

  • postgresql.log.%Y-%m-%d-%H – Inclut l'heure dans le format du nom de fichier journal.

Pour plus d'informations, consultez log_rotation_age et log_rotation_size dans la documentation de PostgreSQL.

Définition de la destination du journal (stderr, csvlog)

Par défaut, Amazon RDS PostgreSQL génère des journaux au format d'erreur standard (stderr). Ce format correspond au réglage par défaut du paramètre log_destination. Chaque message est préfixé selon le modèle spécifié dans le paramètre log_line_prefix. Pour plus d'informations, consultez Compréhension du paramètre log_line_prefix.

RDS for PostgreSQL peut également générer les journaux au format csvlog. La valeur csvlog permet d'analyser les données du journal en tant que données CSV (valeurs séparées par des virgules). Par exemple, supposons que vous utilisez l'extension log_fdw pour travailler avec vos journaux en tant que tables externes. La table externe créée sur les fichiers journaux stderr contient une seule colonne avec les données des événements de journal. En ajoutant csvlog au paramètre log_destination, vous obtenez le fichier journal au format CSV avec des démarcations pour les différentes colonnes de la table externe. Vous pouvez désormais trier et analyser vos journaux plus facilement. Pour savoir comment utiliser log_fdw avec csvlog, consultez Utilisation de l'extension log_fdw pour accéder au journal de base de données à l'aide de SQL.

Si vous spécifiez csvlog pour ce paramètre, sachez que les deux fichiers stderr et csvlog sont générés. Assurez-vous de surveiller le stockage consommé par les journaux, en tenant compte de rds.log_retention_period et des autres paramètres qui affectent le stockage et la rotation des journaux. Utiliser stderr et csvlog fait plus que doubler le stockage consommé par les journaux.

Si vous ajoutez csvlog à log_destination et que vous souhaitez revenir au paramètre stderr seul, vous devez réinitialiser le paramètre. Pour ce faire, ouvrez la console Amazon RDS, puis ouvrez le groupe de paramètres personnalisé de la base de données pour votre instance. Choisissez le paramètre log_destination, choisissez Edit parameter (Modifier le paramètre), puis Reset (Réinitialiser).

Pour plus d'informations sur la configuration de la journalisation, consultez Working with Amazon RDS and Aurora PostgreSQL logs: Part 1 (Utiliser les journaux d'Amazon RDS et Aurora PostgreSQL : partie 1).

Compréhension du paramètre log_line_prefix

Le format du journal stderr précède chaque message du journal des détails spécifiés par le paramètre log_line_prefix, comme suit.

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

Vous ne pouvez pas modifier ce paramètre. Chaque entrée de journal envoyée à stderr inclut les informations suivantes.

  • %t : heure de l'entrée du journal

  • %r : adresse de l'hôte distant

  • %u@%d : nom d'utilisateur @ nom de base de données

  • [%p] : ID de processus si disponible

Activer la journalisation des requêtes pour votre instance de base de données RDS for PostgreSQL.

Vous pouvez collecter des informations plus détaillées sur les activités de votre base de données, notamment les requêtes, les requêtes en attente de verrouillage, les points de contrôle et de nombreux autres détails en définissant certains des paramètres répertoriés dans le tableau suivant. Cette rubrique se concentre sur la journalisation des requêtes.

Paramètre Par défaut Description

log_connections

Enregistre toutes les connexions réussies.

log_disconnections

Journalise la fin de chaque session et sa durée.

log_checkpoints

1

Enregistre les points de vérification.

log_lock_waits

Enregistre les longs temps d'attente pour l'acquisition d'un verrou. Ce paramètre n'est pas défini par défaut.

log_min_duration_sample

(ms) Définit la durée minimum d'exécution au-delà de laquelle les instructions sont journalisées. La taille de l'échantillon est définie à l'aide du paramètre log_statement_sample_rate.

log_min_duration_statement

Toute instruction SQL exécutée au moins pendant la durée spécifiée ou plus est journalisée. Ce paramètre n'est pas défini par défaut. L'activation de ce paramètre peut vous aider à identifier les requêtes non optimisées.

log_statement

Définit le type d'instructions enregistrées. Par défaut, ce paramètre n'est pas défini, mais vous pouvez le modifier pour all, ddl ou mod afin de spécifier les types d'instructions SQL que vous souhaitez journaliser. Si vous spécifiez autre chose que none pour ce paramètre, vous devez également prendre des mesures supplémentaires pour empêcher l'exposition des mots de passe dans les fichiers journaux. Pour plus d'informations, consultez Atténuation du risque d'exposition des mots de passe lors de l'utilisation de la journalisation de requêtes.

log_statement_sample_rate

Le pourcentage d'instructions dépassant la durée spécifiée dans log_min_duration_sample pour être journalisées, exprimé sous la forme d'une valeur à virgule flottante comprise entre 0,0 et 1,0.

log_statement_stats

Ecrit les statistiques de performance cumulées dans le journal du serveur.

Utilisation de la journalisation pour détecter les requêtes lentes

Vous pouvez journaliser les instructions et les requêtes SQL pour favoriser la recherche des requêtes lentes. Vous pouvez activer cette fonctionnalité en modifiant les valeurs des paramètres log_statement et log_min_duration, comme indiqué dans cette section. Avant d'activer la journalisation des requêtes pour votre instance de base de données RDS for PostgreSQL, vous devez être conscient de l'exposition possible à des mots de passe dans les journaux et de la manière d'atténuer les risques. Pour plus d'informations, consultez Atténuation du risque d'exposition des mots de passe lors de l'utilisation de la journalisation de requêtes.

Vous trouverez ci-dessous des informations de référence sur les paramètres log_statement et log_min_duration.

log_statement

Ce paramètre indique le type d'instructions SQL qui doivent être envoyées au journal. La valeur par défaut est none. Si vous remplacez ce paramètre par all, ddl ou mod, veillez à prendre les mesures recommandées pour réduire le risque d'exposition des mots de passe dans les journaux. Pour plus d'informations, consultez Atténuation du risque d'exposition des mots de passe lors de l'utilisation de la journalisation de requêtes.

Tout

Journalise toutes les instructions. Ce paramètre est recommandé à des fins de débogage.

ddl

Journalise toutes les instructions DDL (Data Definition Language), telles que CREATE, ALTER, DROP, etc.

mod

Journalise toutes les instructions DDL et les instructions de langage de manipulation des données (DML) telles que INSERT, UPDATE et DELETE, qui modifient les données.

none

Aucune instruction SQL n'est journalisée. Nous recommandons ce paramètre pour éviter le risque d'exposer des mots de passe dans les journaux.

log_min_duration_statement

Toute instruction SQL exécutée au moins pendant la durée spécifiée ou plus est journalisée. Ce paramètre n'est pas défini par défaut. L'activation de ce paramètre peut vous aider à identifier les requêtes non optimisées.

–1–2147483647

Le nombre de millisecondes (ms) d'exécution pendant lequel une instruction est journalisée.

Configurer la journalisation des requêtes

Ces étapes supposent que votre L'instance de base de données RDS for PostgreSQL utilise un groupe de paramètres de base de données personnalisé.

  1. Définissez le paramètre log_statement sur all. L'exemple suivant illustre les informations écrites dans le fichier postgresql.log avec cette définition de paramètre.

    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. Définissez le paramètre log_min_duration_statement. L'exemple suivant illustre les informations écrites dans le fichier postgresql.log lorsque le paramètre est défini sur 1.

    Les requêtes qui dépassent la durée spécifiée dans le paramètre log_min_duration_statement sont enregistrées. Vous en trouverez un exemple ci-dessous. Vous pouvez consulter le fichier journal de votre instance de base données RDS for PostgreSQL dans la 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 ----------------------

Atténuation du risque d'exposition des mots de passe lors de l'utilisation de la journalisation de requêtes

Nous vous recommandons de garder log_statement sur none pour éviter de dévoiler les mots de passe. Si vous avez réglé log_statement sur all, ddl ou mod, nous vous recommandons de suivre une ou plusieurs des étapes suivantes.

  • Pour le client, chiffrez les informations sensibles. Pour plus d'informations, consultez Options de chiffrement dans la documentation PostgreSQL. Utilisez les options ENCRYPTED (et UNENCRYPTED) des instructions CREATE et ALTER. Pour plus d'informations, consultez CREATE USER dans la documentation PostgreSQL.

  • Pour votre instance de base de données RDS for PostgreSQL, configurez et utilisez l'extension PostgreSQL Auditing (pgAudit). Cette extension supprime les informations sensibles dans les instructions CREATE et ALTER envoyées au journal. Pour plus d'informations, consultez Utilisation de pgAudit pour journaliser l'activité de la base de données.

  • Limitez l'accès aux CloudWatch journaux.

  • Utilisez des mécanismes d'authentification plus forts tels que IAM.

Publication de journaux PostgreSQL sur Amazon Logs CloudWatch

Pour stocker vos enregistrements de journal PostgreSQL dans un espace de stockage hautement durable, vous pouvez utiliser Amazon Logs. CloudWatch Avec CloudWatch Logs, vous pouvez également effectuer une analyse en temps réel des données des journaux et les utiliser CloudWatch pour consulter les métriques et créer des alarmes. Par exemple, si vous définissez log_statement sur ddl, vous pouvez configurer une alarme pour vous alerter chaque fois qu'une instruction DDL est exécutée. Vous pouvez choisir de télécharger vos journaux PostgreSQL dans Logs pendant le processus de création CloudWatch de votre instance de base de données RDS pour PostgreSQL. Si vous avez choisi de ne pas télécharger de journaux à ce moment-là, vous pouvez modifier ultérieurement votre instance pour commencer à charger les journaux à partir de ce moment. En d'autres termes, les journaux existants ne sont pas chargés. Seuls les nouveaux journaux sont chargés lorsqu'ils sont créés sur votre instance de base de données RDS for PostgreSQL modifiée.

Toutes les versions de RDS pour PostgreSQL actuellement disponibles prennent en charge la publication de fichiers journaux dans Logs. CloudWatch Pour plus d'informations, consultez Mises à jour d'Amazon RDS for PostgreSQL dans les notes de mise à jour d'Amazon RDS for PostgreSQL.

Pour utiliser les CloudWatch journaux, configurez votre instance de base de données RDS pour PostgreSQL afin de publier les données des journaux dans un groupe de journaux.

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

  • Journal PostgreSQL

  • Mettre à niveau le journal

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

Pour publier les journaux PostgreSQL dans Logs CloudWatch à 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 de journaux, choisissez les journaux que vous souhaitez commencer à publier dans CloudWatch Logs.

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

  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 de CLI suivantes :

Exécutez l'une de ces commandes de CLI 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 de CLI que vous exécutez.

Exemple Modifier une instance pour publier des journaux dans CloudWatch Logs

L'exemple suivant modifie une instance de base de données PostgreSQL existante pour publier des fichiers journaux dans Logs. CloudWatch 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 LinuxmacOS, ou Unix :

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

Dans 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 des fichiers journaux dans Logs. CloudWatch 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 LinuxmacOS, 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

Dans 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.