Nagiosスクリプトを使用してPostgresデータベース上のデータベース接続の数を監視しようとしたところ、この問題が発生しました。これらは現在開いている接続としてカウントされ、5分ごとに測定されます。
SELECT sum(numbackends) FROM pg_stat_database;
それでも、これは多数の短期間の接続を見逃しているようで、統計は現実とはかけ離れています。
スクリプトを手動で実行してみましたが、2秒の接続が数秒離れた2つの接続の間でも大きな変化が見られました。
この情報を信頼できる方法で取得するにはどうすればよいですか?時間間隔中に発生したmax(connectios)など。
1
時間の経過に伴う接続の統計の集計は良いでしょうが、PostgreSQLが現在それらを収集しているとは思いません。詳細については、docs postgresql.org/docs/current/static/monitoring-stats.htmlを参照してください。
—
クレイグリンガー
@CraigRinger多分私はそれらを測定することができるように私が接続をより長い時間開いたままにしておくようにPostgresまたはクライアントを設定することができました。現在の設定が原因で、postgresが接続を拒否し始めたときに1つのケースがありました。これは5分以内に発生し、警告レベルを下回ってから5分未満で重大を超えたため、モニタリングはこれを検出できませんでした。そして、これはDoS攻撃ではありませんでした。
—
ソリン2014
ええ、それはかなり興味深い問題です。
—
クレイグリンガー
PgBouncer
PostgreSQLインスタンスの前にを置くことを強くお勧めします。接続が拒否されるのではなく、ビジー状態のときに接続をキューに入れます。(はい、PostgreSQLがそれ自体を行うことができないのは愚かですが、それは単純な修正ではありません。メーリングリストと組み込みのプールに関する無限の議論を参照してください)。
(
—
a_horse_with_no_name 2014
log_connections
およびを使用してlog_disconnections
)接続をログファイル(csvlog など)に記録し、pgBadgerまたは同様のものを使用してログファイルから抽出しますか?
@a_horse_with_no_nameいいですね。新しいログエントリを読み取るだけのクライアントでログを「テール」にして、切断と接続を介して統合し、指定された時間枠でのピーク接続のほぼリアルタイムのレポートを取得することもできます。率直に言って、これはそれほど複雑であってはなりません。AXLEプロジェクト(axleproject.eu)の私のタスクの1つは、さらに監査を実装することであり、これをそれに適合させることができるかもしれません...
—
クレイグリンガー