PostgreSQLデータベース接続の数を適切に監視するにはどうすればよいですか?


10

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

2
ええ、それはかなり興味深い問題です。PgBouncerPostgreSQLインスタンスの前にを置くことを強くお勧めします。接続が拒否されるのではなく、ビジー状態のときに接続をキューに入れます。(はい、PostgreSQLがそれ自体を行うことができないのは愚かですが、それは単純な修正ではありません。メーリングリストと組み込みのプールに関する無限の議論を参照してください)。
クレイグリンガー

7
log_connections およびを使用してlog_disconnections)接続をログファイル(csvlog など)に記録し、pgBadgerまたは同様のものを使用してログファイルから抽出しますか?
a_horse_with_no_name 2014

2
@a_horse_with_no_nameいいですね。新しいログエントリを読み取るだけのクライアントでログを「テール」にして、切断と接続を介して統合し、指定された時間枠でのピーク接続のほぼリアルタイムのレポートを取得することもできます。率直に言って、これはそれほど複雑であってはなりません。AXLEプロジェクト(axleproject.eu)の私のタスクの1つは、さらに監査を実装することであり、これをそれに適合させることができるかもしれません...
クレイグリンガー

回答:


1

pgbadgerデータベース接続や全体的な負荷をチェックするようなワークロード監視ツールを使用する方が良いでしょう。これは、どのユーザーがどのくらいの時間接続していて、どのクエリがユーザーによって起動されているかを理解するのに役立ちます。pgbadgerのインストールと設定については、このページを参照しください。

アクティブな接続の数だけを確認したい場合は、 select count(*) from pg_stat_activity where state='active'


0

これを行うには、local_preload_librariesで拡張機能を使用できます。

このようなもの:

#include "postgres.h"
#include <string.h>

#ifdef PG_MODULE_MAGIC
PG_MODULE_MAGIC;
#endif

void _PG_init(void)
{
  SPI_connect();
  int ret = SPI_execute("UPDATE logon_logs SET logged = logged + 1", false, 0);
  SPI_finish();
}

/*
 * _PG_fini
 * Uninstall the hook.
 */
void _PG_fini(void)
{
}

または、代わりにNOTIFYを介して更新する


5
どうすればよいかを説明して、回答を改善してください。
McNets 2017年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.