Comment utiliser Amazon RDS pour activer la journalisation des requêtes pour PostgreSQL ?

Lecture de 6 minute(s)
0

Je souhaite activer la journalisation des requêtes dans Amazon Relational Database Service (Amazon RDS) pour les instances de base de données PostgreSQL.

Brève description

Pour activer la journalisation des requêtes sur PostgreSQL, vous devez modifier les paramètres suivants qui sont associés à l’instance de base de données dans un groupe de paramètres personnalisé :

Lorsque vous modifiez les paramètres de journalisation, il est possible que le volume de d’instance de base de données nécessite davantage d’espace. Si l’espace de stockage du volume est plein, l’instance de base de données devient indisponible. Il est recommandé de modifier le paramètre rds.log_retention_period pour supprimer les journaux inutiles. Il est également recommandé d’utiliser la métrique FreeStorageSpace d’Amazon CloudWatch pour surveiller en continu votre consommation d’espace de stockage. Si vous constatez que l’espace de stockage est presque plein, vous pouvez l’augmenter afin que l’instance de base de données reste disponible.

Résolution

En fonction des requêtes que vous souhaitez consigner, vous pouvez activer log_statement ou log_min_duration_statement. Il n’est pas nécessaire de modifier les deux paramètres pour activer la journalisation.

Modifiez le paramètre log_min_duration_statement pour définir un seuil en millisecondes. Cela vous permet de consigner toutes les requêtes de durée supérieure à la valeur du paramètre défini. Supposons par exemple que vous définissiez la valeur de log_min_duration_statement à 500. Dans ce cas, Amazon RDS enregistrera toutes les requêtes dont l’exécution prend plus d’une demi-seconde. Si vous définissez la valeur de ce paramètre à 2 000, Amazon RDS enregistrera toutes les requêtes dont l’exécution prend plus de deux secondes. Si vous définissez la valeur du paramètre à -1, le paramètre est désactivé. Amazon RDS n’enregistrera aucune requête fondée sur le temps nécessaire à son exécution. Si vous définissez la valeur du paramètre à 0, Amazon RDS consignera toutes les requêtes.

Remarque : le paramètre log_min_duration_statement ne dépend pas du paramètre log_statement et n’interfère pas avec celui-ci.

Modifiez le paramètre log_statement pour contrôler la journalisation des instructions SQL. La valeur par défaut est aucune. Vous pouvez modifier les valeurs suivantes pour ce paramètre :

  • ddl consigne toutes les instructions DDL (Data Definition Language) telles que CREATE, ALTER et DROP.
  • mod consigne toutes les instructions DDL et DML (Data Manipulation Language) telles que INSERT, UPDATE et DELETE.
  • all consigne toutes les requêtes (quelle que soit leur durée d’exécution).

Remarque : quelle que soit la valeur définie pour log_statement et log_min_duration_statement, les requêtes sont consignées une seule fois dans le journal.

Activation de la journalisation des requêtes sur PostgreSQL

Procédez comme suit pour activer la journalisation des requêtes sur PostgreSQL :

Remarque : l’exemple suivant de modification de paramètres consigne toutes les requêtes d’une durée supérieure à une seconde, ainsi que toutes les modifications de schéma.

  1. Ouvrez la console Amazon RDS puis choisissez Bases de données dans le volet de navigation.
  2. Choisissez l’instance de base de données pour laquelle vous souhaitez consigner les requêtes.
  3. Sélectionnez la vue Configuration pour afficher les détails de l’instance de base de données et le groupe de paramètres qui lui est associé.
    Remarque : lorsque vous créez une instance de base de données, celle-ci est associée au groupe de paramètres de base de données par défaut. Comme vous ne pouvez pas modifier ce groupe, vous devez créer un groupe de paramètres personnalisé pour le modifier. Lorsque vous modifiez le groupe de paramètres de l’instance de base de données (en passant du groupe par défaut à un groupe personnalisé), vous devez redémarrer l’instance de base de données.
  4. Choisissez Groupe de paramètres dans le volet Configuration d’instance puis choisissez le groupe de paramètres que vous souhaitez modifier.
  5. Choisissez Modifier le paramètre.
  6. Dans le champ Filtrer les paramètres, sélectionnez le paramètre que vous souhaitez modifier. Par exemple :
    Saisissez log_statement et remplacez la valeur par ddl.
    Saisissez log_min_duration_statement et remplacez la valeur par 1 000. (cette valeur est exprimée en millisecondes et équivaut à une seconde).
  7. Choisissez Enregistrer les modifications.
    Remarque : ces paramètres sont dynamiques. Si votre instance de base de données possède un groupe de paramètres personnalisé, vous n’avez pas besoin de redémarrer l’instance de base de données pour que ces paramètres prennent effet.

Confirmation de l’activation de la journalisation

Une fois que vous avez sauvegardé le groupe de paramètres associé à votre instance de base de données, le statut apparaît comme étant en cours d’application. Une fois le groupe de paramètres défini dans votre instance de base de données, le statut passe à synchronisé. Pour confirmer l’activation de la journalisation, connectez-vous à l’instance de base de données. Dans cet exemple, vérifiez que le journal inclut toutes les instructions DDL et toutes les requêtes qui prennent plus d’une seconde. Exécutez ensuite des commandes de ce type :

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;

Affichage des journaux de requêtes

Procédez comme suit pour afficher les journaux :

1.    Ouvrez la console Amazon RDS.

2.    Dans le volet de navigation, choisissez Bases de données.

3.    Choisissez votre instance de base de données, puis choisissez la vue Journaux.

4.    Dans l’onglet Journaux et événements, choisissez le journal le plus récent puis sélectionnezAfficher le journal pour voir son contenu. Par exemple :

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;

Remarque : assurez-vous de ne pas définir les paramètres précédents à des valeurs qui génèrent une abondante journalisation. Par exemple, le fait de définir le paramètre log_statement sur all ou log_min_duration_statement à 0 génère une grande quantité d’informations de journalisation. Cela a une incidence sur votre consommation d’espace de stockage. Si vous choisissez ces valeurs pour ces paramètres, veillez à ne le faire que pendant une courte période, à des fins de dépannage. Surveillez de près l’espace de stockage tout au long du processus de dépannage.

Informations connexes

Fichiers journaux de base de données RDS for PostgreSQL