ログファイルの保守

PostgreSQL 8.0.0 文書
前のページ | 巻戻し | 第 21章定常的なデータベース保守作業 | 早送り | 次のページ

# 21.3. ログファイルの保守

データベースサーバのログ出力を `/dev/null` に渡してしまうのではなく、どこかに保存しておくことを推奨します。 問題の原因を究明する時にログ出力は貴重です。 しかし、ログ出力は (特により高いデバッグレベルの時に) 巨大になりがちですので、際限なく保存したくはないでしょう。 新しいログファイルを開始させ、適切な期間を経過した古いログファイルを捨ててしまうために、ログファイルを"回転"させる必要があります。

単に`postmaster`のstderrに渡している場合、ログ出力を保持できますが、そのログファイルを切り詰めるためには`postmaster`を停止させ、再度起動させるしか方法がありません。 開発環境でPostgreSQLを使用しているのであれば、これで構いませんが、実運用サーバでこの振舞いが適切となることはほぼありません。

`postmaster`のstderr を何らかののログ回転プログラムに送信する方が良いでしょう。 組み込みのログ回転プログラムがあり、`postgresql.conf`の`redirect_stderr`設定パラメータを`true`に設定することでこれを使用することができます。 このプログラムを制御するパラメータについては項16.4.6.1で説明します。

また、既に他のサーバソフトウェアで使用している外部のログ回転プログラムがあるのであれば、それを使用したいと考えるでしょう。 例えば、Apache配布物に含まれるrotatelogsをPostgreSQLで使用することができます。 これを行うには、単に`postmaster`のstderrを目的のプログラムにパイプで渡してください。 `pg_ctl`を使用してサーバを起動している場合はstderrは既にstdoutにリダイレクトされていますので、以下の例のようにコマンドをパイプする必要があるだけです。

    pg_ctl start | rotatelogs /var/log/pgsql_log 86400

この他の実運用レベルのログ出力の管理方法は、syslog に全てを送信し、syslog にファイルの回転を行なわせることです。 このためには、`postgresql.conf`の`log_destination`設定パラメータを`syslog`（syslogのみにログを出力）に設定してください。 そして、新しいログファイルへの書き込みを始めたい時に、syslog デーモンに `SIGHUP`シグナルを送信してください。 ログ回転を自動化させたい場合は、logrotateプログラムを設定することで、syslogからのログファイルを扱うことができます。

しかし、多くのシステムでは、特に巨大なログメッセージでは syslog はあまり信頼できません。 必要なメッセージを切り詰めてしまったり、破棄してしまったりする可能性があります。 また、Linuxでは、syslogはメッセージ毎にディスクと同期するため、性能がよくありません。 （この振舞いは、syslog設定ファイル内のファイル名の先頭に`-`を使うことで無効にすることができます。）

上述の手法は全て、新しいログファイルを開始する周期を設定することができますが、古い、既に不要となったログファイルの削除は扱わないことに注意してください。 おそらく定期的に古いログファイルを削除するバッチジョブを設定することになるでしょう。 他に、回転用プログラムを設定して古いログファイルを周期的に上書きさせるという方法もあります。

前のページ | ホーム | 次のページ
定常的なインデックスの再作成 | 上に戻る | バックアップとリストア