PostgreSQLにはクライアントが実行したSQLやプロセスに関する各種情報をログファイルに書き出す機能がありますが、デフォルトではオフになっています。
平時はそれでも問題ないですが、システムに異常が発生した場合にそれらのログファイルを参照した方が問題を早く取り除く事ができます。
ここでは、PostgreSQLのログのとり方の基本的なところについて触れて見たいと思います。
なお、設定するPostgreSQLのバージョンは7.4、プラットフォームはRedHatES4です。
1. PostgreSQLの設定ファイル(postgresql.conf)の編集
まずは、PostgreSQLの設定ファイルを編集して、ログを出力するようにセットします。
編集するファイルは、postgresql.confファイルです。
下記のように編集します。
#--------------------------------------------------------------------------- # - Syslog - syslog = 1 # range 0-2; 0=stdout; 1=both; 2=syslog |
PostgreSQLのログの出力は、syslogを経由して指定のファイルに書き込まれます。
「syslog_facility」は、そのsyslogがメッセージを出力する際の分類名です。
syslogに関しての詳細は、下記を参照してみてください。
第3回 システム管理の基礎 syslogdの設定をマスターしよう / @IT
ここでは、「LOCAL5」というファシリティを使用していますが、もし他のアプリケーション等で使用している場合は他の(LOCAL0~LOCAL7)を指定します。
PosrgreSQLにおけるログの出力設定は、これだけでも出力されるようになるのですが、このままだとDBの停止やプロセスの大きな問題が発生した場合などしかログに出力されません。
ログを詳細に取りたい場合は、postgresql.conf内のパラメータを変更する事で対応可能です。
ログの出力レベルを変更したいのであれば
log_min_messages = notice |
の箇所を変更します。
詳細は、マニュアル を参照。(16.4.5. エラー報告とロギング)
また、「log_min_messages」で設定する以外にも、DBに対して発行されたSQL文自体をログに出力したければ、
log_statement = true |
※ PostgreSQL8からは、指定のSQL文だけログに出力させると言う事が可能ですが、バージョン7では全てのSQLを
指定するしかオプションがありません。
と設定し、DBのコネクション情報をログに取りたければ
log_connections = true |
とすることで、対応が可能です。
何れも設定すると大量の情報がログファイルに出力されますので、ディスクの容量に注意が必要です。
また、パフォーマンスの劣化を招く事にもなりますので、取る必要がある項目に絞って設定します。
2. syslogの設定ファイル(syslog.conf)の編集
先ほど説明したとおりPostgreSQLのログの出力は、syslog経由で行われます。
ですので、次はsyslogの設定を変更しPostgreSQLのログの出力を受け取れるように設定する必要があります。
syslogの設定ファイルは、syslog.confで/etcにあります。
下記の一行をsyslog.confの最後に追記します。
# PostgreSQL Log |
ファシリティはPostgreSQLの設定ファイルで設定したものと併せる必要があります。
また、出力先のログファイルは何処でも指定可能です。
3. PostgreSQLとsyslogプロセスの再起動
設定を反映させる為に、プロセスを再起動します。
まずは、syslogプロセスの再起動をします。
# /etc/init.d/syslog restart |
次に、PostgreSQLのプロセスを再起動します。
# /etc/init.d/postgresql restart |
これで、PostgreSQLのログが/var/log/pgsqlファイルに出力されるようになります。
中身を見てみると
Oct 9 09:08:41 localhost postgres[14356]: [1-1] LOG: received fast shutdown request |
のようにPostgreSQLを再起動をしたログが出力されています。
4. logrotateの設定(オプション)
ここまでで既にログが出力されるようになっていますが、今度はそのログファイルが肥大化しないよう適当な周期で退避させるように、logrotateに設定しておきます。
ログは、syslogを経由して行われている為、logrotateにデフォルトで存在するsyslog関連の設定をまとめた設定ファイル(syslog)に、PostgreSQLのログファイルを追記します。
# vi /etc/logrotate.d/syslog |
下記のように最後に、PostgreSQLのログファイル(/var/log/pgsql)の設定を追加します。
/var/log/messages /var/log/secure /var/log/maillog /var/log/spooler /var/log/boot.log /var/log/cron /var/log/pgsql { |
logrotateが上手く動作しない場合は
logrotateでログファイルがローテーションされない事への対処
も併せて参照してみてください。
[PR]NTTPCのVPS 『WebARENA SuitePRO V3』
[PR]面倒な事はおまかせ!@YMCの「マネージドサーバー」月額4,095円~
[PR]低価格・携帯対応のSSLをお探しなら ジオトラスト クイックSSLプレミアム
関連記事