このテーマについて深く掘り下げる前に、PostgreSQL用の軽量接続プールであるPgBouncerについて簡単に説明します。これにより、1つ以上のデータベースへの多数のクライアント接続を維持するための処理時間とリソースが大幅に削減されます。通常、高性能環境で処理できるユーザー接続の数を増やすために使用されます。 PgBouncerのインストール/構成の詳細については、こちらのドキュメントを参照してください。
他のツールと同様に、PgBouncerには、さまざまな詳細レベルの接続、切断、pooler_errorsを記録するstderr/syslogログアーキテクチャがあります。現在のところ、ロギングの大部分は1つのファイル「pgbouncer.log」に送られ、際限なく大きくなります。ログファイルの場所にディスク領域がないために、システムが応答しなくなる可能性がある場合があります。現在、PgBouncerロギングには、経過時間またはサイズに基づいてログをローテーションするための組み込み構成がないため、ユーザーは別の方法を選択する必要があります。 IMO、それを処理するための2つのアプローチがあります:-
- 「syslog」メソッドでPgBouncerを構成して、OSログローテーションに依存するか
- 「pgbouncer.log」ファイルでOSユーティリティを使用してログローテーションを構成します。
方法1:
PgBouncerでsyslogを構成するのは非常に簡単で、「syslog」を1(デフォルトは0)に設定します。 「syslog_ident」(デフォルトは「pgbouncer」)のOSログでログ行を開始する名前を付け、「syslog_facility」(デフォルトのデーモン)で機能の詳細を指定します。 OSログ(/ var / log / messages)からの出力例:
Aug 5 16:54:27 raghavt pgbouncer [62549]:C-0x1cdfe60:postgres / postgres @ unix(62621):6432ログイン試行:db =postgres user =postgres tls =いいえ 8月5日16:54:27raghavtpgbouncer [62549]:S-0x1ce4b10:postgres / postgres @ 127.0.0.1:5432サーバーへの新しい接続(127.0.0.1:38947から) 8月516 :54:27 raghavt pgbouncer [62549]:C-0x1cdfe60:postgres / postgres @ unix(62621):6432終了理由:client close request(age =0) |
注:「syslog」が有効になっている場合は、「logfile」パラメーターにコメントを付けるか空白にします。有効になっていない場合は、追加のログになります。
方法2:
Logrotateは、ログを体系的にローテーションし、アーカイブしてオペレーティングシステムのディスク容量要件を削減する機能を備えたOSユーティリティの1つです。各ログファイルは、毎日、毎週、毎月、または大きくなりすぎたときに処理される場合があります。デフォルトの設定ファイル「/etc/logrotate.conf」は、ログローテーションの経過時間/サイズ/間隔を定義します。このツールを使用すると、より少ないディスク容量でログをより長く保持できます。多くの人が、とにかくネット上でそれを見つけることができるユーティリティの使用法について明確に述べているので、実装フェーズに直接ジャンプしています。
まず、pgbouncerログ用の構成ファイルを/etc/logrotate.d/ディレクトリに作成します。以下の詳細を使用して、「/ etc / logrotate.d/pgbouncer」という名前を付けました。
/var/log/pgbouncer/pgbouncer.log { 10回回転 missingok sharedscripts notifempty nocompress サイズ10m 毎日 create0640 postgres postgres postrotate / bin / kill -HUP `cat /var/pgbouncer-postgres/pgbouncer.pid 2> / dev / null` 2> / dev / null || true endscript } |
構成ファイルについて、最初の行はpgbouncerログファイルの場所(pgbouncer.iniファイルの「logfile」パラメーター値)を示し、次の行は次のようなローテーションしきい値で機能するパラメーターです。維持(ローテーション)するログファイルの数。エラーを発行せず、次のログに進みます(missingok);ローテーションの前後(prerotate / postrotate)に実行する必要のあるスクリプト。事前/事後スクリプト(共有スクリプト)を1回または複数回実行します。ログが空の場合(空でない場合)は、ログをローテーションしないでください。ローテーション後、古いログファイルをgzipユーティリティ(compress / nocompress)で圧縮する必要があります。ログローテーションを実行するサイズ(サイズ)。特定のログをローテーションする頻度(毎日)。新しいログファイルの権限(作成)。
これで、10Mサイズでローテーションされた新しいログファイルを確認できます。 (コマンド「logrotate-f /etc/logrotate.conf」を使用して強制的にローテーションすることもできます)
[[email protected] pgbouncer]#ls-lrth 合計16K -rw-r-。 1 postgres postgres10M7月27日15:30pgbouncer.log-20160727 -rw-r-。 1 postgres postgres11K7月27日18:32pgbouncer.log |
それは簡単でした 、Windows環境で同じことを確認しましょう。
Windowsの場合:
私はWindowsユーティリティについてほとんど知らないので、グーグルで調べて、「LogRotateWin」というWindowsバージョンのユーティリティを見つけました。 これは、Linuxバージョンのlogrotateと同じように機能します。詳細については、こちらのインストール/構成/使用法で入手できる詳細なドキュメントを参照してください。
どのように機能するかを見てみましょう。まず、サイトで入手できるLogRotateWinの「.msi」バージョンをダウンロードします。 「logrotateSetup*.zip」ファイルとして。 「.msi」ファイルを抽出して実行すると、ユーティリティが「c:Program Files(x86)LogRotate」の場所にインストールされます。デフォルトの構成ファイル(logrotate.conf)は、「c:Program Files(x86)LogRotateContent」にあります。
次に、「c:Program Files(x86)LogRotateContentlogrotate.conf」ファイルを編集して、フルパスを指定します。同じローテーションパラメータを持つ「pgbouncer.log」ファイルの。 Windows 10でテストされた構成ファイルのサンプルコピー(注:以下のパラメーター値は、ユーティリティのテストに使用されます)
c:Program Files(x86)LogRotateContent> more logrotate.conf “ c:Program Files(x86)PgBouncerlogpgbouncer.log” { rotate 10 copytruncate create missingok sharedscripts nocompress size 200k daily } |
確認するために、「-f」オプションを使用してログローテーションを強制しました
c:Program Files(x86)LogRotate> logrotate.exe -f Contentlogrotate.conf logrotate:オプションを強制的にtrueに設定 |
結果は次のとおりです。
C:Program Files(x86)PgBouncerlog>dir ドライブCのボリュームにラベルがありません。 ボリュームのシリアル番号はF226-9FFBです C:Programファイルのディレクトリ(x86)PgBouncerlog 2016年8月8日午後1時31分 2016年8月8日午後1時31分 2016年8月8日午後1時31分0pgbouncer.log 08/08/2016 01:31 PM 6,626 pgbouncer.log.1 08/08/2016 01:31 PM 13,252 pgbouncer.log.2 3ファイル19,878バイト 2ディレクトリ26,905,051,136バイト空き |
いいですね!!!。
ほとんどのLinuxディストリビューションでは、logrotateはcronjobの一部として「logrotate.conf」を使用して毎日実行されます。Windowsと同様に、Windowsタスクスケジューラでタスクをスケジュールして、ログを毎日ローテーションできます。参考までに、「LogRotateWin」ユーティリティについては、基本的なレベルではあまり調べていません。問題が発生した場合は、 logrotateGeneralDiscussionフォーラムに投稿してください。
お読みいただきありがとうございます。
–Raghav