22.3. Maintenance du fichier de traces
Sauvegarder les journaux de trace du serveur de bases de données dans
un fichier plutôt que dans /dev/NULL est
une bonne idée. Les journaux sont d'une utilité incomparable
lorsqu'arrive le moment où des problèmes surviennent. Néanmoins, les
journaux ont tendance à être volumineux (tout spécialement à des
niveaux de débogage importants) et vous ne voulez pas les sauvegarder
indéfiniment. Vous avez besoin de faire une « rotation » des journaux pour que les nouveaux
journaux sont commencés et que les anciens soient supprimés après une
période de temps raisonnable.
Si vous redirigez simplement stderr du
postgres
dans un
fichier, vous aurez un journal des traces mais la seule façon de le
tronquer sera d'arrêter et de relancer le serveur. Ceci peut convenir
si vous utilisez PostgreSQL™
dans un environnement de développement mais peu de serveurs de
production trouveraient ce comportement acceptable.
Une meilleure approche est d'envoyer la sortie stderr du serveur dans un programme de rotation de
journaux. Il existe un programme interne de rotation que vous pouvez
utiliser en configurant le paramètre redirect_stderr à true dans
postgresql.conf. Les paramètres de contrôle
pour ce programme sont décrits dans Section 17.7.1, « Où
tracer ».
Sinon, vous pourriez préférer utiliser un programme externe de
rotation de journaux si vous en utilisez déjà un avec d'autres
serveurs. Par exemple, l'outil rotatelogs inclus dans la distribution
Apache™ peut être utilisé avec
PostgreSQL™. Pour cela,
envoyez via un tube la sortie stderr du
serveur dans le programme désiré. Si vous lancez le serveur avec
pg_ctl
, alors
stderr est déjà directement renvoyé dans
stdout, donc vous avez juste besoin
d'ajouter la commande via un tube, par exemple :
pg_ctl start | rotatelogs /var/log/pgsql_log 86400
Une autre approche de production pour la gestion des journaux de
trace est de les envoyer à syslog et
de laisser syslog gérer la rotation
des fichiers. Pour cela, initialisez le paramètre de configuration
log_destination à syslog (pour tracer uniquement via syslog) dans postgresql.conf. Ensuite, vous pouvez envoyer un
signal SIGHUP au démon syslog quand vous voulez le forcer à écrire dans
un nouveau fichier. Si vous voulez automatiser la rotation des
journaux, le programme logrotate
peut être configuré pour fonctionner avec les journaux de traces
provenant de syslog.
Néanmoins, sur beaucoup de systèmes, syslog n'est pas très fiable, particulièrement
avec les messages très gros ; il pourrait tronquer ou supprimer des
messages au moment où vous en aurez le plus besoin. De plus, sur
Linux™, syslog synchronisera tout message sur disque,
amenant des performances assez pauvres. (Vous pouvez utiliser un
- au début du nom de fichier dans le fichier
de configuration syslog pour
désactiver ce comportement.)
Notez que toutes les solutions décrites ci-dessus font attention à
lancer de nouveaux journaux de traces à des intervalles configurables
mais ils ne gèrent pas la suppression des vieux fichiers de traces,
qui ne sont probablement plus très intéressants. Vous voudrez
probablement configurer un script pour supprimer périodiquement les
anciens journaux. Une autre possibilité est de configurer le
programme de rotation pour que les anciens journaux de traces soient
écrasés de façon cyclique.