sql >> データベース >  >> RDS >> PostgreSQL

Linux / WindowsでPgBouncerログをローテーションする方法は?

    このテーマについて深く掘り下げる前に、PostgreSQL用の軽量接続プールであるPgBouncerについて簡単に説明します。これにより、1つ以上のデータベースへの多数のクライアント接続を維持するための処理時間とリソースが大幅に削減されます。通常、高性能環境で処理できるユーザー接続の数を増やすために使用されます。 PgBouncerのインストール/構成の詳細については、こちらのドキュメントを参照してください。
    他のツールと同様に、PgBouncerには、さまざまな詳細レベルの接続、切断、pooler_errorsを記録するstderr/syslogログアーキテクチャがあります。現在のところ、ロギングの大部分は1つのファイル「pgbouncer.log」に送られ、際限なく大きくなります。ログファイルの場所にディスク領域がないために、システムが応答しなくなる可能性がある場合があります。現在、PgBouncerロギングには、経過時間またはサイズに基づいてログをローテーションするための組み込み構成がないため、ユーザーは別の方法を選択する必要があります。 IMO、それを処理するための2つのアプローチがあります:-

    1. 「syslog」メソッドでPgBouncerを構成して、OSログローテーションに依存するか
    2. 「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


    1. ネストされたトランザクションはMySQLで許可されていますか?

    2. 選択した行をPostgresのCSVファイルの値で更新するにはどうすればよいですか?

    3. Hekatonのネイティブにコンパイルされたストアドプロシージャを呼び出さない方法

    4. ANSIJOINクエリと非ANSIJOINクエリのパフォーマンスは異なりますか?